哪个点在逆时针方向

which point is at anti clockwise direction

我给出了一组以 p0 为中心点的点。

在这里我想找到关于 p0p3 行的内容,其中 p0p1 或 p0p2 行是逆时针的。 or 在逆时针旋转时首先被分析。

二维叉积

您可以使用两个向量的叉积来找到方向(顺时针或逆时针)。

例如 3 个点 [p1, p2, p3] 定义 2 行 {p1, p2}{p1, p3}...

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

获取 p1p2p1p3 的两个向量...

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)

如果 cross 为正,则点 p3 为顺时针,如果 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(-90 度)到 Pi/2(90 度)范围内的角度,正 CW 和负 CCW

angle = asin(vx1 * vy2 - vy1 * vx2)