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

Math 在给定三点坐标的情况下,如何在二维空间中找到三点的方向?,math,geometry,Math,Geometry,事实上,我找到了这个公式,但我不知道它是如何工作的 设p,q和r为三点 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 k=(q.y-p.y)*(r.x-q.x)-(q.x-p.x)*(r.y-q.y); 如果(k==0)

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

p,q
r
为三点

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
k=(q.y-p.y)*(r.x-q.x)-(q.x-p.x)*(r.y-q.y);
如果(k==0):它们都是共线的
如果(k>0):它们都是顺时针的

如果(k此公式用于计算向量q-pq-r。您可以在几何意义部分中看到叉积值 C=A x B=|A |*| B |*Sin(θ),其中θ是这些向量之间的角度(点对点方向)。对于平行向量,Sin(θ)=0,θ<180时为正,否则为负

例如:

顺时针三重态ABC:AB和AC矢量的叉积大于0

逆时针三重态ACD:AC和AD的叉积为负


这是从两条直线之间的角度得出的。(m1-m2)/1+m1*m2。设a,b,c,d四个点和,我们想知道c和d在ab线的同一侧或相反的一侧。如果ab,ac之间的角度和ab,ad之间的角度是相反的符号,那么它们在相反的一侧,否则它们在相同的一侧。使用上面的方程,我们可以得出你找到的公式。

让我们有三个点:

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

众所周知,向量的叉积可以用来计算它们在三维空间中的方向。我们可以使用此属性通过将点和对应向量扩展到3D情况来计算2D空间中的遍历。因此,让我们定义对应于上述所选方向的向量,并将其扩展到3D情况:

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

根据Z坐标的值,原始点按逆时针方向(如果为负)、顺时针方向(如果为正)或在同一条线上(如果值为0)进行遍历

你们还可以回忆一下右手法则(),它通常在小学物理课上教授,用来确定向量的方向


让我们检查一下

<强>测试用例>1:< /强>认为我们有点<代码> p=(0, 0),q=(1, 0),r=(1, 1)< /代码>。将它们画在一张纸绘制箭头<代码> p> > q>代码>和<代码> q-> 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

所以这些点在同一条线上


希望这有帮助!

你能解释一下为什么在叉积中加负号,因为i x j=k,而不是-k