Перекрестное произведение 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)