Минимальный перпендикулярный вектор между точкой и линией - PullRequest
7 голосов
/ 08 марта 2011

Хорошо, я пытаюсь заставить работать алгоритм теоремы о разделении осей (для обнаружения столкновений), и мне нужно найти минимальный перпендикулярный вектор между точкой и линией.Я не спрашиваю о минимальном перпендикулярном расстоянии (которое я знаю, как найти), а о векторе, который будет иметь такую ​​же величину, как это расстояние, и который идет из произвольной точки и точки на линии.Я знаю местоположение точки, точки на линии и единичного вектора, указывающего направление линии.

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

Следующая часть сбивает с толку, но я: 1) нашел вектор между точкой и точкой на линии, которую я знаю 2) нашел вектор между точкой на линии и точкой на линии плюс единица измерениявектор, дающий направление линии 3) Взял перекрестное произведение этих двух векторов (я назову это перекрестным произведением A) 4) Взял перекрестное произведение единичного вектора, дающего направление линии и вектора из перекрестного произведения A(Я назову это перекрестное произведение B) 5) Нормализованное перекрестное произведение B 6) Масштабированное перекрестное произведение B на минимальное расстояние

В любом случае, вся эта попытка провалилась с треском.Может кто-нибудь сказать мне, как я должен найти этот вектор?

Ответы [ 2 ]

28 голосов
/ 08 марта 2011

Если я правильно понял ваш вопрос, я считаю, что это то, что вы ищете:

P - point
D - direction of line (unit length)
A - point in line

X - base of the perpendicular line

    P
   /|
  / |
 /  v
A---X----->D

(P-A).D == |X-A|

X == A + ((P-A).D)D
Desired perpendicular: X-P

, где точка представляет собой скалярное произведение и | XA |означает величину.

3 голосов
/ 08 марта 2011

enter image description here

Из приведенного выше рисунка у вас есть:

q = p + s --> s = q - p = q - (p2-p1) = q + p1 - p2

==> s^ = |q - p2 - p1| / |s|   (unitary vector)

Also:   |s| = |q| sin c = |q|sin(b-a)

b = arcsin (qy / |q|); a = arcsin( p1y / |p1| )

where: |q| = (qx^2 + qy^2)^1/2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...