3D Line - пересечение плоскости? - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть два вектора (X, Y, Z), один выше Y=0 и один ниже Y=0.Я хочу найти Вектор (X, Y, Z), где линия между двумя исходными векторами пересекается с уровнем Y=0.Как мне это сделать?

Пример точки A:

X = -43.54235
Y = 95.2679138
Z = -98.2120361

Пример точки B:

X = -43.54235
Y = 97.23531
Z = -96.24464

Эти точки считываются из двух UnProjection от щелчка пользователя, и япытаюсь нацелить непроекцию на Y=0.

(я обнаружил пересечение трехмерной плоскости с простой плоскостью , но не понял принятый ответ как для 2D)

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

Я подозреваю, что под двумя векторами вы действительно имеете в виду две точки и хотите пересечь линию, соединяющую эти две точки с плоскостью, определенной как Y=0.

Если это так, то вы можете использоватьопределение линии между двумя точками:

<A + (D - A)*u, B + (E - B)*u, C + (F - C)*u>

Где <A,B,C> - одна из ваших точек, а <D,E,F> - другая точка.u - неопределенный скаляр, который используется для вычисления точек вдоль этой линии.

Поскольку вы пересекаете эту линию с плоскостью Y=0, вам просто нужно найти точку на линии, гдеСегмент «Y» равен 0.

В частности, решите для u в B + (E - B)*u = 0, а затем верните это обратно в исходное уравнение линии, чтобы найти компоненты X и Z.

2 голосов
/ 08 декабря 2010

Уравнение для линии:

(x–x1)/(x2–x1)  = (y–y1)/(y2–y1) = (z–z1)/(z2–z1)  

Таким образом, установив y = 0, вы получите координаты для пересечения.

x = -y1 * (x2-x1)/(y2-y1) + x1 

и

z = -y1 * (z2-z1) /(y2-y1) + z1 
...