保持角动量

时间:2017-02-02 19:20:43

标签: c# angularjs physics momentum

我在C#中使用2D物理引擎。 除了在碰撞过程中解决旋转问题,我还能解决所有问题。 我有我认为的解决方案,但它导致物体疯狂地反弹并高速旋转。

我按如下方式计算两点的相对速度:

Vector2 collisionPointVelocityA = bodyA.linearVelocity; + (bodyA.angularVelocity * collisionPointRadiusAPerpendicular);
Vector2 collisionPointVelocityB = bodyB.linearVelocity; +(bodyB.angularVelocity * collisionPointRadiusBPerpendicular);        

//Relative velocity of bodyA's with respect to bodyB's collision-point velocity
collisionPointRelativeVelocityAtoB = collisionPointVelocityA - collisionPointVelocityB;

然后我计算出对项目施加的冲动:

j = Vector2.Dot(-(1 + (bodyA.Restitution + bodyB.Restitution) * 0.5f) * collisionPointRelativeVelocityAtoB, collisionInfo.CollisionNormal)
        / (Vector2.Dot(collisionInfo.CollisionNormal, (collisionInfo.CollisionNormal * (bodyA.InverseMass + bodyB.InverseMass))));

并像这样对物体施加旋转力:

float torque = Vector2.Dot(parameter_Force, radiusVectorNormal) * radiusVector.Length();

并添加这样的扭矩:

angularVelocity += parameter_Torque * InverseInertia;

我认为这会因角动量守恒而导致问题,但我仍然坚持如何修复它。

0 个答案:

没有答案