Ваша задача может быть преобразована в задачу линейного программирования и решена точно.
Сначала предположим, что (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’ 4d объем для этого движущегося тетраэдра.
Теперь пересечение двух выпуклых многоугольников является выпуклым многоугольником. В первый раз, когда это произойдет, будет удовлетворена следующая задача линейного программирования:
Если (p0, p1, p2, p3) переместится в (q0, q1, q2, q3)
и (p0 ’, p1’, p2 ’, p3’) перемещается в (q0 ’, q1’, q2 ’, q3’)
тогда первый раз пересечения происходит в точках / временах (r, t):
Минимизировать t0 * (a0 + a1 + a2 + 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).
Это всего 20 линейных ограничений из 16 значений ak, bk, ak 'и bk'.
Если есть решение, то
(r,t)= a0*(p0,t0) + … + a3*(p3,t0) + b0*(q0,t1) + … + b3*(q3,t1)
является точкой первого пересечения. В противном случае они не пересекаются.