use*_*641 2 python math geometry trigonometry angle
这看起来应该很简单,但我遇到了麻烦.基本上,我有三个不断变化的点(让我们称之为p1,p2和p3).另外,让我们将p2定义为顶点.
基本上,我需要做的是计算三点之间的角度.一个很好的例子是,如果三个角度形成179度角,那么这些点变为形成181度角.所以我真正需要的是确定角度是否大于180度的好方法.我尝试使用余弦定律,但它并没有给我一个很好的答案,因为当这些点形成一个181度角时,它只是将它解释为一个不同方向的179度角.此外,我在Python中这样做,如果这有帮助.谢谢!
你想要决定的是(p3-p2)是左转还是右转(p2-p1).这实际上是Graham Scan的核心部分,用于计算凸壳(https://en.wikipedia.org/wiki/Graham_scan).通过轻微编辑引用维基百科:
...确定三个点是构成"左转"还是"右转"不需要计算两个线段之间的实际角度,并且实际上可以仅通过简单的算术来实现.对于三个点P1 =(x1,y1),P2 =(x2,y2)和P3 =(x3,y3),只需计算两个向量(p2-p1)和(p3)的叉积的z坐标-p1),由表达式给出
(x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1).如果结果为0,则点是共线的; 如果是正的,则三个点构成"左转"或逆时针方向,否则构成"右转"或顺时针方向(对于逆时针方向编号的点).