Нахождение ориентации точки относительно другой точки в плоскости xy - PullRequest
2 голосов
/ 27 января 2012

У меня есть проблема (и решение тоже). Я хочу знать, как прийти к такому решению. «Это» решение идеально подходит и отлично работает для всех возможных комбинаций.

Предположим, что у вас есть 3 точки в системе координат XY: P1(x1, y1), P2(x2, y2) и P3(x3, y3).

Теперь соедините точку P2 с P3. Это приведет к «лучу», исходящему из точки P2 и проходящему через точку P3. Я использовал слово ray , потому что я хочу, чтобы оно было только в одном направлении, то есть от P2 до P3.

Теперь, относительно точки P1, луч P2 --> P3 в направлении по часовой стрелке или против часовой стрелки?


Решение:

Используйте следующие формулы, чтобы найти значение z1:

z1 = (x3 - x1)(y2 - y1) - (y3 - y1)(x2 - x1)

Если z1 положительно, P2 --> P3 по часовой стрелке. Если z1 отрицательно, P2 --> P3 против часовой стрелки. И если оно равно 0, точки находятся на одной воображаемой линии, простирающейся от P1.

Может кто-нибудь помочь мне, как прийти к этому решению?

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Формула, которую вы написали, очень похожа на формулу перекрестного произведения двух векторов.Поскольку направление перекрестного продукта зависит от конфигурации CW / CCW, вы можете легко использовать его для своей задачи.

Вы можете построить два луча P1->P2 и P1->P3.Тогда вы можете взять их кросс-произведение.Если компонент произведения вдоль оси Z положителен, то P2 и P3 расположены в направлении против часовой стрелки, и наоборот.

Если вы попытаетесь это сделать, то результатом будет коэффициент k (единичный вектор вдоль оси Z) в перекрестном произведении будет точно таким же, как и упомянутый вами ответ.

0 голосов
/ 26 апреля 2012

Я не уверен, что это работает.Я попробовал, но он продолжает давать мне один и тот же ответ для обоих.Попробуйте эти координаты:

Start point 0, 90, 0
Center point 0, 0, 0
End point 90, 0, 0
.....
directional vector 1, 0, 0
inverse directional vector -1, 0, 0
...