找出多边形的内角数,大于180º

luc*_*ls1 5 algorithm geometry polygon

如何找到多边形的内角数,大于180º,只有多边形的顶点?

对于每个顶点,我总是想要内部角度,而不是外部角度.

感谢巴西.

Sva*_*nte 4

您可以简单地通过标量积(点积)来确定两个向量的角度。一个有用的属性是,如果向量正交,则它们的标量积为零;反之,则它们的标量积为零。如果它们的角度是钝角,则乘积为负,否则为正。因此,要采取的步骤是:

  • 找到从 V0 到 V1 的第一条边(作为向量,通过减去坐标得到),然后将其向左旋转 90 度(这只是转换(x y)(-y x)
  • 找到从 V1 到 V2 的第二条边(未旋转)
  • 取标量积(这只是(x1 * x2) + (y1 * y2)
  • 如果标量积为负,则右转,否则左转
  • 下一个边缘...
  • 如果逆时针穿过顶点,则数右转次数,否则数左转次数
  • 对于最后一个顶点,您必须返回到第一个顶点(即使用边 Vn 到 V0 和 V0 到 V1)

编辑:您可以通过使用以下公式计算多边形的面积来确定顶点是逆时针还是顺时针排列:

     1n-1
A = --- SUM( x(i)*y(i+1) - x(i+1)*y(i) )
     2 我=0

其中n是顶点数。x(n)和与和y(n)相同(闭合多边形)。x(0)y(0)

如果为正,则顶点按逆时针顺序排列,否则按顺时针顺序排列。

编辑:当您简化旋转和标量积的步骤时,您会得到二维叉积的公式x1*y2 - x2*y1。这简化了上面的第一步:

  • 找到从 V0 到 V1 的第一条边(作为向量,通过减去坐标)
  • dito 用于从 V1 到 V2 的第二条边
  • 取叉积((x1 * y2) - (x2 * y1))
  • 如果叉积为正,则左转

对于第一种方法的复杂性感到抱歉。