代码之家  ›  专栏  ›  技术社区  ›  ypnos

两条线角的角度

  •  2
  • ypnos  · 技术社区  · 15 年前

    我寻找最快或最简单的方法来计算凸多边形任意点的外角。这意味着,总有更大的角度,而这两个角度加起来是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 .

    4 回复  |  直到 15 年前
        1
  •  5
  •   dmckee --- ex-moderator kitten    15 年前

    使用描述线条的向量的内积(点积)得到内角并从360度减去?


    如果你已经有点向量形式的线,那么效果最好,但是你可以很容易地从点到点的形式得到向量(即通过减法)。

    . 成为我们的网络产品

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

    哪里 v w 向量和 theta 是线条之间的角度。点积可以由向量的分量计算出来。

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

    下标表示组件。


    事实上 阅读 问题:

    • 由点积反转返回的角度总是小于180度,所以它总是内角。
        2
  •  3
  •   Christoph    15 年前

    使用此公式:

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

    在哪里? <,> 是标量积,并且 BA ( BC )向量来自 B A ( C )

        3
  •  2
  •   P Daddy    15 年前

    我需要计算由a,b,c,…描述的多边形外的圆的面积。

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

        4
  •  1
  •   Nils Pipenbrinck    15 年前

    如果你需要这个角度,就没有办法规范化向量,做一个点或叉积。如果您想通过asin、acos或atan计算角度,通常有一个选择,但最终不会影响执行速度。

    不过,如果你能告诉我们你想归档什么,那就太好了。如果我们对你正在做的事情有一个更好的了解,我们可以给你一些提示,如何解决这个问题,而不需要首先计算角度。

    许多几何算法可以重写为只使用交叉和点积。很少需要欧拉角。