1

我正在编写一个 2D 游戏,我希望在其中有类似板条箱的对象。这些物体会四处移动,就像真正的板条箱一样。我对如何实现这一目标有一个假设的想法:

基本上我会将盒子的角坐标与它们的力和速度单位向量一起存储,并且在每次更新中我基本上都会执行以下步骤:
1. 相应地应用力(重力、碰撞等)。
2. 根据力修改速度矢量。
3. 移动盒子的每个角落,像这样:拖动技术
4. 我重复 nr 3. 每个角落,所以我得到了立方体的真实运动。

我的问题是:这种方法是否朝着正确的方向发展?这个理论是否正确?如果不是,那么在 2D 环境中基于向量移动框的正确方法是什么?

澄清一下:我只是在图片中拖动角落“A”,但我想用自己的向量重复拖动每个其他角落。“拖动”是指我刚才所说的算法。

4

1 回答 1

2

保持每个角落的坐标和速度是没有意义的,因为您将存储大量冗余信息。盒子是刚性物体,这意味着在任何时刻都必须满足一些约束条件,即任意两个给定角之间的距离是固定的。这也转化为连接所有四个角的速度的约束,因此它们不是独立值。对于刚体,任何点的运动都是两个独立运动的总和 - 质心 (CM) 的线性运动和围绕固定轴的旋转 - 通常但并非总是选择通过厘米。因此,您只需要存储板条箱 CM 的位置和速度(与板条箱的几何中心重合)以及围绕 CM 的旋转角度和旋转速度。

至于运动,重力场是一个恒定的矢量场,因此不能在像那些矩形板条箱这样的对称物体中引起旋转。相反,它只产生 CM 的加速垂直运动。这也是由于所有外力而发生的情况 - 必须将它们的向量和应用于 CM。只有方向不通过 CM 的外力才会产生扭矩,从而导致旋转。这种力是当板条箱相互碰撞或撞击地面/墙壁时产生的任何外部推/拉或反作用力。计算由外力引起的扭矩很容易,但计算反作用力可能是一个相当复杂的过程,因为必须采用受约束的动力学。一旦计算出扭矩,为了获得角加速度,必须将其除以创建的惯性矩。通常使用另一个轴而不是通过 CM 的轴更方便 -在这种情况下,可以使用施泰纳定理来计算绕该其他轴的转动惯量。

总结一下:

  • 所有作用在创建上的力首先被加在一起(作为矢量),合力(除以创建的质量)决定了 CM 的线性加速度;
  • 计算所有力的扭矩,然后用于确定围绕给定轴的角加速度。

有关刚体运动的一些示例问题以及物理实际是如何计算的,请参见此处。

给定您的算法,如果“速度矢量”实际上是指“CM 的速度”,那么 1 将是正确的 - 所有角都沿同一方向移动(CM 的线性运动)。但是 2 并不总是正确的 - 正确的旋转角度取决于施加扭矩的时间(例如模拟时间步长),并且必须考虑杠杆臂长度随着板条箱旋转而在两者之间发生变化。

于 2013-02-12T12:42:15.050 回答