2010-12-07 3 views
0

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

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

X = -43.54235 
Y = 95.2679138 
Z = -98.2120361 

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

X = -43.54235 
Y = 97.23531 
Z = -96.24464 

Эти точки считываемые из двух UnProjections от пользователей через нажмите и я пытаюсь целевой unprojection в Y=0.

(я нашел 3D line plane intersection, with simple plane, но не понял, принятый ответ, как это для 2D)

+0

возможно дубликат [3D Line-плоскости пересечения] (http://stackoverflow.com/questions/5666222/3d-line-plane-intersection) – ideasman42 2015-03-03 14:06:08

ответ

3

Я подозреваю, что два вектора, вы на самом деле означает две точки, и хотят, чтобы пересечь линию, соединяющую эти две точки с плоскости, определенной 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.

+0

я не Понимаю. Как определить линию, когда я еще не знаю? Кроме того, как бы применить этот скаляр на случай, если я его получу? – 2010-12-07 23:20:37

+0

`u` неизвестен; позвольте мне попытаться сказать так: линию можно рассматривать как просто кучу точек, которые «линии» вверх. Правильно? `u` - это способ найти какую-либо конкретную точку в строке, которую вы ищете. И вы пытаетесь найти единственную точку, лежащую на плоскости «Y = 0». Если у вас есть `u` (который можно найти, потому что вы знаете, что хотите, чтобы значение` u` делало ваше предложение Y = 0` истинным), просто замените его на `A + (D-A) * u`, чтобы получить X, или в `C + (F - C) * u`, чтобы получить Z. – 2010-12-07 23:26:30

2

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

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

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

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

и

z = -y1 * (z2-z1) /(y2-y1) + z1 
Смежные вопросы