目前的基本算法是:
1. 移动一个物体 2. 检查碰撞 3. 如果发生了碰撞
- 将物体移动最小距离以解决碰撞。 - 根据法线、质量等调整速度。
我有一个移动的物体向两个静态无质量物体移动。
移动的物体在一步中被平移到与其中一个物体发生碰撞。
我通过寻找可以移动的最小距离来回应,以便它们不再碰撞。在这种情况下,这意味着将动态盒子向下移动。然而,现在它正在与另一个盒子碰撞。
我用那个箱子重复同样的事情,试图移动动态盒子,以使其不再碰撞,但这会将它推回第一个箱子。这将永远重复。我的算法基本上有缺陷吗?
min_o
可能是一个非常小的值,1/min_o
可能非常大。而且如果你看单位,似乎也有问题:v
和min_o
都是距离,因此-v/min_o
是无量纲的,你不能将其赋给距离向量v2
。我不是很理解你如何定义min_o
,但你可能应该添加或减去一些东西,或者像我的答案一样,只需返回上一个位置并重新执行最小可能步骤即可。 - Bas Swinckelsv
向量缩小到最小交点的大小,然后从v
中减去它。但要做到这一点,如果最小交点在 x 方向上,则必须按v_x / min_o
缩放,如果交点在 y 方向上,则必须按v_y / min_o
缩放。否则,就像你说的那样,它是无量纲的。 - cyonmin_o
非常小,则不会受到影响。这应该是正确的缩放方式,可以将v
缩小到所需大小以适应对象交集。 - cyon