如何在给定这些点的坐标的情况下找到二维空间中三个点的方向?

am_*_*ick 2 math geometry

其实我找到了这个公式,但我不知道它是如何工作的.

p,qr是三个点,

k=(q.y - p.y)*(r.x - q.x)-(q.x - p.x) * (r.y - q.y);

if(k==0): They are all colinear
if(k>0) : They are all clockwise
if(k<0) : They are counter clockwise
Run Code Online (Sandbox Code Playgroud)

如果有人解释它是如何工作的,我会很高兴的.

MBo*_*MBo 10

该公式用于计算向量qpqr的叉积.你可以看到在几何意义甲| |交叉积值C = A X B =部*| B |*SIN(西塔),其中θ为这些向量(点对点的方向)之间的角度.对于平行向量,Sin(Theta)= 0,当Theta <180时为正,否则为负.

例:

顺时针三重ABC:AB和AC矢量的交叉乘积> 0

逆时针三联体ACD:AC和AD的交叉产物为阴性.

在此输入图像描述


met*_*ker 8

我们分三点来说:

声明1

考虑一下我们将按顺序遍历它们P -> Q -> R。我们必须确定我们的遍历是顺时针、逆时针还是所有三个点都在同一条线上。

众所周知,向量的叉积可用于计算它们在 3D 空间中的方向https://math.stackexchange.com/questions/285346/why-does-cross-product-tell-us-about-clocking -或逆时针旋转)。我们可以使用这个属性通过将我们的点和相应的向量扩展到 3D 空间来计算 2D 空间中的遍历。因此,让我们定义与上面选择的方向相对应的向量并将它们扩展到 3D 情况:

然后我们计算这些向量的叉积:

根据 Z 坐标的值,原始点逆时针(如果为负)、顺时针(如果为正)遍历或者它们在同一直线上(如果值为 0)。

您还可以回忆一下右手定则(https://en.wikipedia.org/wiki/Right-hand_rule#Cross_products),该定则通常在小学物理课程中教授,以确定向量方向。


让我们检查!

测试用例#1:考虑我们有 点P = (0, 0), Q = (1, 0), R = (1, 1)。将它们画在纸上画箭头P->QQ->R。您会看到我们逆时针遍历这些点。

代入上面的方程,我们有:

((0 - 0) * (1 - 1) - (1 - 0) * (1 - 0)) = -2 < 0,

所以这些点是逆时针方向的。

测试用例 #2:让我们用P = (0, 0), Q = (1, 0), R = (1, -1). 显然,我们顺时针遍历这些点。

代入上面的方程,我们有:

((0 - 0) * (1 - 1) - (1 - 0) * (-1 - 0)) = 2 > 0,

所以这些点是顺时针方向的。

测试用例 #3:最后,让我们用P = (0, 0), Q = (1, 0), R = (2, 0). 点在同一条线上y = 0

代入上面的方程,我们有:

((0 - 0) * (2 - 1) - (1 - 0) * (0 - 0)) = 0 == 0,

所以这些点在同一条线上。

希望这可以帮助!