如何找到大于180º的多边形内角数, 只有多边形的顶点?
对于每个顶点,我总是想要内部角度,而不是外部角度。
感谢巴西。
答案 0 :(得分:4)
您可以通过采用标量积(点积)来确定两个向量的角度。一个有用的特性是,如果向量是正交的,它们的标量积为零;如果它们的角度是钝的,则产品为负,否则为正。因此,要采取的步骤是:
(x y)
转换为(-y x)
)(x1 * x2) + (y1 * y2)
)编辑:您可以通过使用以下公式计算多边形的区域来查找顶点是逆时针还是顺时针排序:
1 n-1 A = --- SUM( x(i)*y(i+1) - x(i+1)*y(i) ) 2 i=0
其中n
是顶点数。 x(n)
和y(n)
与x(0)
和y(0)
相同(关闭多边形)。
如果是正数,则顶点按逆时针顺序排列,否则顺时针排列。
编辑:当您简化旋转和标量产品的步骤时,您会得到二维交叉产品x1*y2 - x2*y1
的公式。这简化了上面的第一步:
((x1 * y2) - (x2 * y1))
对于复杂的第一种方法感到抱歉。
答案 1 :(得分:2)
答案 2 :(得分:0)
我假设这是一个不规则的多边形,因为正多边形的内角大于180度是非常困难的。
对于每个顶点,您还需要知道两个相邻顶点。然后,您可以将其转换为三角函数问题,在此问题中,您可以找到从主顶点到左顶点的角度,并将其添加到从主顶点到右顶点的角度。
例如,
tan(angle_to_left) = (v.y-left.x)/(v.y-left.y) tan(angle_to_right) = (v.y-right.x)/(v.y-right.y)
然后将角度加在一起。
最后,对于大于180的所有角度,增加计数器。在遍历所有顶点后,您的计数器将告诉您有多少内角大于180。
答案 3 :(得分:0)
切线问题是x == 0时。如果您只知道多边形的顶点,除非它是三角形,否则您不了解它,因为它们可以具有任何类型的连接。
假设你知道连通性,那么你需要计算绕线顺序(即,点在多边形周围的方向?)。通过绕线顺序,您可以获取每个点与其相邻点的交叉乘积,并采用相反的正弦值来获得该角度。
答案 4 :(得分:0)
找到最后两个向量的内角(作为一个例子),我们需要为多边形的最后两个向量实现这个等式:
angleRadians = Math.acos((vx1 * vx2 + vy1 * vy2)/(Math.sqrt(vx1 * vx1 + vy1 * vy1)* Math.sqrt(vx2 * vx2 + vy2 * vy2)));
这是使用载体的Dot产品。如果您对此有疑问,here's a tutorial
但是这并没有考虑到'绕线方向',首先你必须得到交叉产品,如果交叉产品为正,那么它是左转,如果是负的 - 右转(我们将通过从360减去(ext)角度来补偿。
我在这里包含了我的JS代码,作为要点:https://gist.github.com/3741816。
:d
答案 5 :(得分:-1)
这是一个与几何有关的问题,而不是与编程相关的问题。
如果你有顶点,你可以通过三角函数找到内角,类似于你找到三角形的角度。
使用三个相邻的顶点,想象一个三角形,然后找到内角。
例如,查看多边形:
我们可以构建一个三角形: