了解在弹性碰撞响应中使用最小平移向量 (MTV)

计算科学 软件 计算物理学 向量
2021-12-13 03:35:22

所以,我正在尝试模拟多边形刚体物理,包括线性和角度。

在 SAT(Minimum Translation Vector)中计算 MTV 很容易,用它来调整位置也很容易:

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

但是如果你想用它来调整速度和角速度,你会怎么做呢?

这是我的想法,虽然在我的程序中我还没有测试过:

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

其中半径是从中心到最远顶点的最长距离,即该多边形的旋转轴长度。

现在我的想法正确吗?如果不正确,我该如何解决?

0个回答
没有发现任何回复~