【问题标题】:Computing the exterior angle at a vertex in a polygon计算多边形顶点的外角
【发布时间】:2012-04-01 23:49:57
【问题描述】:

大家好,这是我正在做的一个家庭作业拼图,我的三角不太强,所以请耐心等待。

我有一个包含三个顶点的列表,并且我已经弄清楚了如何计算它们相遇的内角(我正在使用它来测试以确保它们具有有效的角度,因此多边形是有效的多边形) .

目前我连续取出三个顶点,然后计算到我想要角度的顶点的边,然后得到该点向量积的acos:

            double dx21 = one.x - two.x;
            double dx31 = three.x - two.x;
            double dy21 = one.y - two.y;
            double dy31 = three.y - two.y;
            double m12 = Math.sqrt(dx21*dx21 + dy21*dy21);
            double m13 = Math.sqrt(dx31*dx31 + dy31*dy31);
            double theta = Math.acos((dx21*dx31 + dy21*dy31)/ (m12 * m13));

我知道名义上我可以通过从 360 度中减去内角来获取外角,但这是为了确保多边形有效(顶点按逆时针顺序)的完整性检查。

给我的说明是确保顶点处矢量积的 sin 是正的,但我已经在纸上玩了一段时间了,我真的没有运气让它工作。

我知道这主要是一道数学题,但任何建议都会非常有用。

【问题讨论】:

  • 请记住,这些都是二维向量,按逆时针顺序排列。

标签: java math vector polygon


【解决方案1】:

这里有一些注意事项。

首先,通常定义的外角是 180 度 - 内角,或 pi - 内角,具体取决于您的单位。见here。快速的健全性检查是将外角相加以确保得到一个圆。

其次,您可能知道这一点,但我应该指出,Math.acos 返回一个以弧度为单位的角度,而不是度数。

第三,注意余弦不能区分凸角和凹角,也就是说你的内角法只对凸多边形有效。使用叉积可能会更好,这将为您提供角度的正弦值。

最后,回答您的问题,这里有一个提示:您查看来自 p2->p1 和 p2->p3 的向量;当我读到这个问题时,我描绘了来自 p1->p2 和 p2->p3 的每个向量。任何一个都是解决问题的完全有效的方法,但请考虑这些向量对之间的角度有何不同,以及这与您的问题有何关系。

【讨论】:

  • 我最终还是糊里糊涂地解决了这个问题,并没有真正让它发挥作用,无论如何感谢您的帮助。
猜你喜欢
  • 2015-03-26
  • 1970-01-01
  • 2016-02-16
  • 2011-03-27
  • 1970-01-01
  • 2012-09-19
  • 2012-04-06
  • 2011-04-01
  • 2020-02-11
相关资源
最近更新 更多