我正在使用 Segment to Segment 最接近方法,该方法将输出两个长度段之间的最近距离。每个段对应一个球体对象的起点和终点。速度只是从一个点到另一个点。
即使没有真正的碰撞,最近的方法也可以成功。因此,我目前正在使用 10 步法并计算两个球体沿两个线段移动时的距离。所以,基本上每段的长度就是物体在物理步骤中的遍历,半径就是物体的半径。通过步进,我可以知道它们在哪里发生碰撞,以及它们是否发生碰撞(对于大多数部分来说,排序)。
我觉得可能会有更好的东西。虽然我有点相信第一个最接近的方法调用是必需的,但我认为紧随其后的方法是 TAD 弱点。谁能帮我吗?如果需要,我可以说明这一点。
非常感谢!
(来源:yfrog.com)
最佳答案
(我不知道如何发布图形;请耐心等待。)
好的,我们有两个半径为 r1 和 r2 的球体,从位置 X1 和 X2 开始,以速度 V1 和 V2(X 和 V 是矢量)移动。
从球体 2 看球体 1 的速度为
V = V1-V2
它的方向是
v = V/|V|
球体 1 必须行进(在球体 2 的框架中)到最近的方法的距离是
s = Xv
如果 X 是初始间隔,则最近接近的距离为
h = |X - Xv|
这是图形可以提供帮助的地方。如果 h > r1+r2,则不会发生碰撞。假设 h < r1+r2。碰撞时,两个球心和最接近的点会形成一个直角三角形。从球体 1 的中心到最近点的距离是
u = sqrt((r1 + r2)^2 - h^2)
所以球体 1 走过的距离是
s - u
现在看看球体 1 是否在给定的间隔内行进那么远。如果是这样,那么您就知道球体的确切时间和位置(您必须从球体 2 的框架移回,但这很容易)。如果没有,就没有碰撞。
关于math - 数学/物理负责人的最近方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2568914/