检测两个物体之间的碰撞发生多次转化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测两个物体之间的碰撞发生多次转化相关的知识,希望对你有一定的参考价值。

我一直在寻找一个答案了很长一段时间,我还没有发现任何明确的答案的呢。我所试图做的是确定是否和何时两个机构时代t0t1之间的碰撞。这样计算下来是更直线前进,如果每个机构只有两种平移或旋转(约中心或任意点),但在彼此的顶部添加多个转换时,事情就变得有些比较凌乱。我做这个动画来说明这个问题。

Animation

正如你所看到的,有时t0t1有没有冲突,但之间有多次碰撞发生。

我想到了解决这一问题的方法之一是减少的时间间隔的大小。所以,t0之间t1会有一个总n更新以检查是否存在冲突。这工作,但唯一的方式,我发现我可以保证无假阴性,即没有发现发生碰撞,是整合在极小的时间步长。你可以想像,这是非常昂贵的,因为它导致了几十到几百的时间步长每身体每更新周期。我不是说这个想法有没有道理,但是我需要找到一种方法来计算的时间步长的最小数量,而非均匀,直到他们到达所需位置和方向的每个车身距离的一个单元/旋转前进。

所以,我的问题是两个部分:

  1. 有没有确定是否及何时发生碰撞时更好的办法?
  2. 如果没有,是不是可以计算的时间步长的最小数目?
答案

我怀疑这个问题一般可以解决。如果我们查看时间作为第三空间轴,问题是等价于求由倍T_1和T_2之间的两个形状的轮廓描绘出的机构之间的任何交叉点。最好的(最准确)的事情可能是使用小的时间步骤和考虑任何两个3D“片”之间的交叉点时间t_m和T_(M + 1)之间跨越。但是,这不会比仅考虑二维数字要好得多..

至于第二部分,大概没有 - 但也许你可以遍历一个时间步长,这两个数字和速度与此距离的变化之间取决于最近距离的模拟?这可能会提高精度和处理速度,但它仍然不能保证找出所有路口。

如果你这样做,我会提出一个时间步,DT,像

DT =最小值(F * d /最大值(-v,v_min),DT),其中

DT是最大的时间步骤中,您将允许,

d是最近点之间的距离在图中,

v是速度与该距离的变化(负的,如果它们彼此靠近),

v_min是一些最低速度,你认为现实的模型(正)

f是小于一些因素,以尽量减少由突然产生的假阳性的数目的两个对象之间“跳跃”的速度。

最后,你可以将某些圈子模型周围旋转的数字点只要圆不相交(你只需要圆圈翻译,因为他们正在旋转不变)安全地移动数据 - 那么你可以用较小的时间-steps只要这些圆相交。

我希望一些这有助于。

以上是关于检测两个物体之间的碰撞发生多次转化的主要内容,如果未能解决你的问题,请参考以下文章

unity 怎么判断碰撞的物体

多次检测到碰撞

四叉树优化碰撞检测

unity碰撞检测(碰撞器,触发器)

CollisionOnEnter 如何检测物体是不是发生碰撞?

未检测到 spritekit 物理碰撞