java - 计算多边形顶点的外角

标签 java math vector polygon

嘿,伙计们,这是我正在做的一个家庭作业难题,我的三角肌不太强,所以请耐心等待。

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

目前,我连续拔出三个顶点,然后计算到我想要角度的顶点的边,然后得到该点 vector 积的 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 度减去内角来获取外角,但这是一个健全性检查,以确保多边形有效(顶点按逆时针顺序排列)。

我得到的注释是为了确保顶点处 vector 积的正弦值是正的,但我已经在纸上研究了一段时间,但我并没有真正幸运地让它发挥作用。

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

最佳答案

这里有一些注释。

首先,通常定义的外角为 180 度 - 内角,或 pi - 内角,具体取决于您的单位。请参阅here 。快速的完整性检查是将外角加在一起,以确保得到一个圆。

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

第三,请注意,余弦无法区分凸角和凹角,这意味着您的内角方法仅对凸多边形有效。使用叉积可能会更好,它会给出角度的正弦值。

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

关于java - 计算多边形顶点的外角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969393/

相关文章:

java - java中值重复时清理对象

java - 如何将数学工作拆分为工作线程 Java

c++ - 100% 确定性的快速素数测试?

sql - 我可以使用加法来更新记录值吗?

c++ - 读入 vector 时排序

C++:vector 和 random_shuffle 的问题

c++ - 查找 vector 中最接近的值

java - 将 php 正则表达式转换为 java 正则表达式

java - Maven 项目在 IntelliJ 中构建得很好,但在 Maven 命令行中则不行

java - PaintComponent 中的 while 语句