Алгоритм пересечения трехмерных линий - PullRequest
2 голосов
/ 10 августа 2011

У меня есть направление линии, используя x, y, z

и две точки A, B, я использовал отрезок линии, используя B-A

как получить точку пересечения между ними

С наилучшими пожеланиями

1 Ответ

8 голосов
/ 10 августа 2011

Система уравнений:

Параметрическое уравнение прямой с направлением (a, b, c) и одной точкой X (x1, x2, x3) равно:

D1:(x, y, z) = (x1, y1, z1) + t1(a, b, c)

Параметрическое уравнение линии с 2 точками A и B:

 D2:(x, y, z) = (xa, ya, za) + t2(xb-xa, yb-ya, zb-za)

вам просто нужно выровнять D1 и D2, чтобы получить результат, найдя параметры t1 и t2, которые будут работать,(3 уравнения с 2 неизвестными)

Если решения нет, пересечение отсутствует.

Пересечение только с отрезком:

Теперь пусть Mесли вы результат, вам просто нужно проверить:

t2 in [0,1] 

 or  0<AM.AB<||AB||^2 (M is in the segment AB)

примечание:

Если представление вашей линии из декартовых уравнений (пересечение планов), чем проблемато же самое, но с 4 уравнениями 3 неизвестных

Пример:

A (1,1,1)
B (0,0,0)
D2:(x,y,z)=(1-t2,1-t2,1-t2)

(a,b,c)=(1.-1.1)
(x1,y1,z1)=(1,0,1)
D1:(x,y,z)=(t1+1,-t1,1+t1)

(D1 и D2 - 2 диагонали куба стороны = 1, расположенные на 0, 0,0)

пусть M (x, y, z) будет пересечением D1, D2

мы найдем t1 и t2, которые уравнивают вышеприведенное уравнение: D1 и D2

мы легко получаем t1 = -1 / 2 и t2 = 1/2

, кроме того, t2 находится в [0,1], поэтому результирующее пересечение находится в [A, B]

M (1 / 2,1 / 2,1 / 2) = D1 (t1) = D2 (t2) - решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...