# Understanding the use of Minimum Translation Vector (MTV) for an elastic collision response

So, I'm trying to simulate polygon rigid body physics, both linear and angular.

To calculate the MTV is easy in SAT (Minimum Translation Vector), and to use it to adjust position is also easy:

PolygonA.center -= MTV * .5
PolygonB.center += MTV * .5


But if you want to adjust velocity and angular velocity with it how would you do that?

This is what I've thinked about, I haven't tested it yet though in my program:

AccelerationA = -MTV * (2 * PolygonB.mass / (PolygonA.mass + PolygonB.mass))
AccelerationB = MTV * (2 * PolygonA.mass / (PolygonA.mass + PolygonB.mass))

PolygonA.velocity += AccelerationA
PolygonB.velocity += AccelerationB

PolygonA.angularVelocity = Cross(Normalize(AccelerationA), PolygonA.velocity) / PolygonA.radius
PolygonB.angularVelocity = Cross(Normalize(AccelerationB), PolygonB.velocity) / PolygonB.radius


Where radius is the longest distance from the center to the fartherst vertex, the rotation axis length of that polygon.

Now is my idea correct?, and if not, how do I fix it?