2009-06-13 109 views
2

我搜索最快或最简单的方法来计算凸多边形任意点处的外角。这意味着,始终是更大的角度,而所讨论的两个角度总共可达360度。在两条线的角处的角度

这里是一个例证:

illustration http://fopref.meinungsverstaerker.de/div_priv/crap.png

现在我知道我可以计算两个向量A-B和C-B涉及的点积,归一化和余弦之间的角度。然后,我仍然必须确定两个角度中的哪一个(第二个是180度减去第一个角度),我想要两次加入另一个角度。

但是,我认为可能会有一个更简单,更简单的解决方案,可能使用强大的atan2()函数。我被卡住了,并询问你:-)

更新: 我被问到我需要什么角度。我需要计算B周围该特定圆的面积,但只计算由A,B,C ...描述的多边形的面积。所以要计算面积,我需要使用公式0.5*angle*r*r的角度。

回答

5

使用描述线的矢量的内积(点积)来获得内角并从360度减去?


效果最好,如果你已经在点向量形式的线条,但你可以很容易地得到点,以点的形式载体(即通过减法)。

.以成为点积,我们有

v . w = |v| * |w| * cos(theta) 

其中vw的载体和theta是线之间的角度。点积可以通过矢量的分量计算得到:

v . w = SUM(v_i * w_i : i=0..3) // 3 for three dimensions. Use more or fewer as needed 

这里下标表示组件。


已经实际上问题:

  • 的角度从反转点积将总是小于180度返回,所以它总是内角。
1

如果您需要角度,则无法围绕矢量进行标准化并做点或叉积。如果您想通过asin,acos或atan计算角度,但最终对执行速度没有影响,您通常可以选择。

但是,如果您可以告诉我们您要存档的内容,那将会很好。如果我们对自己在做什么有了更好的了解,我们可能会给你一些提示,如何在不首先计算角度的情况下解决问题。

很多几何算法都可以重写,只能用于交叉和点积。欧拉角很少需要。

3

使用此公式:

beta = 360° - arccos(<BA,BC>/|BA||BC|) 

<,>是标量积和BABC)是矢量从BABC)。

2

我需要计算由A,B,C,描述的多边形外的圆的面积......

这听起来像你采取错误的做法,然后。您需要计算circumcircle的面积,然后减去多边形的面积。

+0

谢谢您的回答,但这是一个误解。我只有这个顶点有一个圆。我的意思是说,我需要计算它的面积,但只能在由这个顶点和其他顶点定义的多边形之外。而且我知道多边形的其他部分在这里并不重要。 – ypnos 2009-06-13 23:09:18