проекция точки на линию в 3D - PullRequest
       28

проекция точки на линию в 3D

0 голосов
/ 11 августа 2011

У меня есть точка с x, y, z

и направление линии x, y, z

как получить точечную проекцию на этой линии

Я попробовал этот код

http://www.zshare.net/download/93560594d8f74429/

например, когда используется пересечение функций в коде, который я получил направление линии равно (1,0,0) и точка (2,3,3) будет иметь проекцию (значение в x, 0, 0), и это неправильное значение

любое предложение С наилучшими пожеланиями

Ответы [ 2 ]

6 голосов
/ 11 августа 2011

Вы хотите спроецировать вектор (x, y, z) на линию с направлением (a, b, c).

Если (a, b, c) является единичным вектором, то результатом будет просто (x, y, z). (A, b, c) (a, b, c) = (ax + by + cz) (а, б, в)

Если это не единичный вектор, сделайте его единым, разделив его на норму.

enter image description here


РЕДАКТИРОВАТЬ: немного теории:

Пусть E будет вашим векторным пространством размерности N:

пусть F - линия, направленная вектором a. Гиперплан, ортогональный к F: enter image description here

Теперь давайте выберем вектор x в E, x можно записать как: enter image description here, где xF - это координата x в направлении F, x, ортогональный - это координата на ортогональном гиперплане.

Вы хотите найти xF: (это точно такая же формула, как та, которую я написал выше)

enter image description here

Вам следует внимательно изучить статью в Википедии о ортогональных проекциях и попытаться найти больше материалов в Интернете.

Вы можете обобщить это на любой F, если это уже не линия, а план, тогда возьмите F ортогонально и разложите x таким же образом ... и т.д.

4 голосов
/ 19 марта 2013

Эта тема явно старая, и я думаю, что оригинальный постер означал вектор, а не линию. Но для целей Google:

Линия, в отличие от вектора, не (обязательно) имеет свое начало в (0,0,0). Поэтому не может быть описано только направлением, оно также нуждается в происхождении. Это нулевая точка линии; линия может простираться за пределы и до этой точки, но когда вы говорите, что вдоль линии ноль метров, это то, что вы имеете в виду.

Таким образом, чтобы получить проекцию точки на линию, вам сначала нужно преобразовать точку в локальную систему координат, что вы делаете, вычитая исходную точку из точки (например, если столб забора является «линией»). Вы переходите от координат GPS к «5 метрам к северу и метру над дном ограждения»). Теперь в этом локальном координатном фрейме линия - это просто вектор, поэтому мы можем получить проекцию точки, используя метод нормального точечного произведения.

pointLocalFrame = point– origin

projection = dotProduct(lineDirection, pointLocalFrame)

ПРИМЕЧАНИЕ: при этом предполагается, что длина линии бесконечна, если проекция больше фактической длины линии, то проекция отсутствует

ПРИМЕЧАНИЕ: lineDirection должно быть нормализовано; то есть его длина должна быть 1

Примечание: скалярное произведение двух векторов (x1, y1, z1) и (x2, y2, z2) равно x1 * x2 + y1 * y2 + z1 * z2

...