角线在两条线的角落

时间:2009-06-13 15:41:32

标签: c geometry

我搜索最快或最简单的方法来计算凸多边形任意点的外角。这意味着,总是更大的角度,而所讨论的两个角度加起来为360度。

以下是插图:

illustration

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

然而,我认为可能有一个更简单,更简单的解决方案,可能使用强大的atan2()函数。我卡住了,问你这个问题: - )

更新 有人问我需要什么角度。我需要计算B周围这个特定圆的面积,但只计算A,B,C,......所描述的多边形。 因此,为了计算面积,我需要角度来使用公式0.5*angle*r*r

4 个答案:

答案 0 :(得分: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 :(得分:3)

使用此公式:

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

<,>是标量积,而BABC)是从BAB到{{的向量1}})。

答案 2 :(得分:2)

  

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

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

答案 3 :(得分:1)

如果您需要角度,则无法对矢量进行标准化并执行点或交叉积。如果你想通过asin,acos或atan计算角度,但最终只能对执行速度产生影响,你可以选择。

但是,如果您能告诉我们您要归档的内容,那将会很好。如果我们能够更好地了解您正在做的事情,我们可能会给您一些提示,以便在不首先计算角度的情况下解决问题。

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