你的问题可以转化为线性规划问题并且完全解决。首先,假设(p0,p1,p2,p3)是时刻t0的顶点,(q0,q1,q2,q3)是第一个四面体在时刻t1的顶点,则在4d时空,他们填写以下4D关闭体积
V = { (r,t) | (r,t) = a0 (p0,t0) + … + a3 (p3,t0) + b0 (q0,t1) + … + b3 (q3,t1) }
在这里,A0 ... a3和B0 ... B3参数是在区间[0,1]和总和为1:
a0+a1+a2+a3+b0+b1+b2+b3=1
第二四面体同样是一个凸多边形(添加'以上所有内容来定义V'为该四面体移动的四维体积。
现在两个凸多边形的交集是一个凸多边形。第一次发生这将满足下面的线性规划问题:
如果(p0,p1,p2,p3)移动到(q0,q1,q2,q3) 和(p0',p1',p2' (r,t):
最小化t0 *(a0 + a1 + a2 + p3')移动到(q0',q1',q2',q3') 然后第一次交点发生在点/ A3)+ T1 *(B0 + B1 + B2 + B3)除
0 <= ak <=1, 0<=bk <=1, 0 <= ak’ <=1, 0<=bk’ <=1, k=0..4
a0*(p0,t0) + … + a3*(p3,t0) + b0*(q0,t1) + … + b3*(q3,t1)
= a0’*(p0’,t0) + … + a3’*(p3’,t0) + b0’*(q0’,t1) + … + b3’*(q3’,t1)
最后实际上是4个方程,一个用于的(R,T)每个维度。 这是16个值ak,bk,ak'和bk'的总共20个线性约束。 如果存在的溶液中,然后
(r,t)= a0*(p0,t0) + … + a3*(p3,t0) + b0*(q0,t1) + … + b3*(q3,t1)
是第一交点。否则它们不会相交。
+1只是因为标题太酷了 - 如果你正在尝试,你不会做得更好!)。 (对不起,我没有足够的三维计算几何专业知识来真正帮助这里)。 – 2009-07-11 01:34:47
是的,这是一个很酷的标题。我不记得有足够的数学来解决这个问题,但我相信你会想要求解一个微分参数方程来模拟当前位置(x,y,z)=(f(t),g(t),h(t ))为每个对象。您可以通过首先查找它们是否足够接近以使其成为基于每个对象的最小球体的碰撞来优化它。如果不是,它们不会相互碰撞。如果是,那么你可以做复杂的计算。 – cletus 2009-07-11 01:39:29
OP在这里。我可能会使用其他技术来过滤实际需要测试碰撞的对象(有些称它为宽相)。如果没有人提出任何实际的方程或更好的方法来做到这一点,我会把所有的东西都放在一个距离方程中(就时间而言),并写出一个算法,试图找到一个解决方案。说实话,我真的不想这样做,特别是如果它已经完成。 – x26 2009-07-11 02:11:26