какая точка находится в направлении против часовой стрелки - PullRequest
0 голосов
/ 07 января 2020

Я дал группу поз, где p0 - центральная точка.

enter image description here

Вот что я хочу найти по отношению к линии p0p3, какая из линий p0p1 или p0p2 против часовой стрелки , или анализируется первым при повороте против часовой стрелки.

1 Ответ

0 голосов
/ 07 января 2020

Перекрестное произведение 2D

Вы можете использовать перекрестное произведение двух векторов, чтобы найти направление (CW или CCW).

Например, 3 точки [p1, p2, p3], определяющие 2 линии {p1, p2} и {p1, p3} ...

P1 = {x:?, y:?}
P2 = {x:?, y:?}
P3 = {x:?, y:?}

Получите два вектора для p1 до p2 и p1 до p3 ...

vx1 = p2.x - p1.x
vy1 = p2.y - p1.y

vx2 = p3.x - p1.x
vy2 = p3.y - p1.y

Получить крест произведение векторов ...

cross = vx1 * vy2 - vy1 * vx2

ИЛИ за один шаг ...

cross = (p2.x - p1.x) * (p3.y - p1.y) - (p2.y - p1.y) * (p3.x - p1.x)

Точка p3 равна CW, если cross положительная, параллельная, если cross равно нулю и против часовой стрелки, если cross отрицательно

if cross > 0 
   dir = "clockwise"
else if cross == 0
   dir = "parallel"
else 
   dir = "counter-clockwise"

Перекрестное произведение для получения угла

Вы также можете получить угол между векторами, если вы нормализуете векторы

length1 = sqrt(vx1 * vx1 + vy1 * vy1)
vx1 /= length1
vy1 /= length1

length2 = sqrt(vx2 * vx2 + vy2 * vy2)
vx2 /= length2
vy2 /= length2

Обратным грехом перекрестного произведения является угол в диапазоне от -Pi / 2 (-90deg) до Pi / 2 (90deg) с положительным CW и отрицательным CCW

angle = asin(vx1 * vy2 - vy1 * vx2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...