很长时间以来,我一直在寻找答案,但是到目前为止,我还没有找到任何明确的答案。我要做的是确定两个身体在时间t0
和t1
之间是否碰撞以及何时碰撞。如果每个物体只是平移或旋转(围绕中心或任何点),则计算该值将更直接,但是在彼此之上添加多个变换时,事情会变得更加混乱。我制作了这个动画来说明问题。
如您所见,有时t0
和t1
不会发生冲突,但是在它们之间会发生多次冲突。
我想到的解决此问题的一种方法是减小时间间隔的大小。因此,在t0
和t1
之间,将总共进行n
个更新以检查冲突。这行得通,但我发现无法保证不会出现假阴性(即找不到发生的碰撞)的唯一方法是在极短的时间范围内进行积分。您可以想象,这是非常昂贵的,因为它导致每个更新周期每个主体数十到数百个时间步长。我并不是说这个想法没有任何价值,但我需要找到一种方法来计算最小时间步长,而不是将每个物体均匀地向前移动一个距离/旋转单位,直到它们到达所需的位置和方向。< / p>
所以,我的问题分为两个部分:
答案 0 :(得分:0)
我怀疑这个问题能否总体解决。如果我们将时间视为第三个空间轴,则问题等同于找到在时间 t_1 和 t_2 之间由两个形状的轮廓所跟踪的物体之间的任何交点。最好的方法(最准确的方法)可能是使用较小的时间步长,并考虑在时间 t_m 和 t_(m + 1)之间跨越的任何两个3d“切片”之间的交集。我>。但这并不会比只考虑2d数字好得多。
关于第二部分,可能没有,但是也许您可以通过一个时间步长迭代模拟,该时间步长取决于两个图形之间的最近距离以及该距离的变化速度?这可能会提高准确性和处理速度,但仍不能保证找到所有相交点。
如果这样做的话,我会建议一个时间步长 dt 之类的
dt = Min(f * d / Max(-v,v_min),DT),其中
DT是您允许的最大时间步长
d是图中最近的点之间的距离
v是该距离变化的速度(如果彼此接近,则为负),
v_min是您认为对模型逼真的最低(正)速度,
最后,您可以围绕图形的旋转点建模一些圆,并在圆不相交的情况下安全地移动图形(您只需平移圆,因为它们在旋转下是不变的),那么您可以只要这些圆圈相交,就使用小的时间步长。
我希望其中的一些帮助。