保持每个角落的坐标和速度是没有意义的,因为您将存储大量冗余信息。盒子是刚性物体,这意味着在任何时刻都必须满足一些约束条件,即任意两个给定角之间的距离是固定的。这也转化为连接所有四个角的速度的约束,因此它们不是独立值。对于刚体,任何点的运动都是两个独立运动的总和 - 质心 (CM) 的线性运动和围绕固定轴的旋转 - 通常但并非总是选择通过厘米。因此,您只需要存储板条箱 CM 的位置和速度(与板条箱的几何中心重合)以及围绕 CM 的旋转角度和旋转速度。
至于运动,重力场是一个恒定的矢量场,因此不能在像那些矩形板条箱这样的对称物体中引起旋转。相反,它只产生 CM 的加速垂直运动。这也是由于所有外力而发生的情况 - 必须将它们的向量和应用于 CM。只有方向不通过 CM 的外力才会产生扭矩,从而导致旋转。这种力是当板条箱相互碰撞或撞击地面/墙壁时产生的任何外部推/拉或反作用力。计算由外力引起的扭矩很容易,但计算反作用力可能是一个相当复杂的过程,因为必须采用受约束的动力学。一旦计算出扭矩,为了获得角加速度,必须将其除以创建的惯性矩。通常使用另一个轴而不是通过 CM 的轴更方便 -在这种情况下,可以使用施泰纳定理来计算绕该其他轴的转动惯量。
总结一下:
- 所有作用在创建上的力首先被加在一起(作为矢量),合力(除以创建的质量)决定了 CM 的线性加速度;
- 计算所有力的扭矩,然后用于确定围绕给定轴的角加速度。
有关刚体运动的一些示例问题以及物理实际是如何计算的,请参见此处。
给定您的算法,如果“速度矢量”实际上是指“CM 的速度”,那么 1 将是正确的 - 所有角都沿同一方向移动(CM 的线性运动)。但是 2 并不总是正确的 - 正确的旋转角度取决于施加扭矩的时间(例如模拟时间步长),并且必须考虑杠杆臂长度随着板条箱旋转而在两者之间发生变化。