Java 如何根据X,Y的集合确定多边形的周长

Java 如何根据X,Y的集合确定多边形的周长,java,math,polygon,Java,Math,Polygon,我有一个布尔[],其中真正的索引组成一个实心多边形。有了这些信息,我怎么能 A.确定构成周界的街区,以及 B.哪些点(按顺序)可以使用多边形类绘制多边形 我打算使用Polygon类来调用.contains,但我目前使用的代码给出的多边形点顺序不正确(因为我只是从左到右,从上到下扫描)。在此问题上的任何帮助都将不胜感激 您正在寻找一个新的算法。您需要一些算法 第一:将布尔值[]转换为一组X-Y坐标的方法 第二:将这些点转换为多边形的方法(阅读凸包算法) 第三:计算多边形周长的方法 现在去填空吧

我有一个布尔[],其中真正的索引组成一个实心多边形。有了这些信息,我怎么能

  • A.确定构成周界的街区,以及
  • B.哪些点(按顺序)可以使用多边形类绘制多边形

我打算使用Polygon类来调用.contains,但我目前使用的代码给出的多边形点顺序不正确(因为我只是从左到右,从上到下扫描)。在此问题上的任何帮助都将不胜感激

您正在寻找一个新的算法。

您需要一些算法

第一:将布尔值[]转换为一组X-Y坐标的方法

第二:将这些点转换为多边形的方法(阅读凸包算法)

第三:计算多边形周长的方法


现在去填空吧

因为多边形可能是凹的,所以听起来凸壳算法不够。您需要的是位图到矢量的算法。查看此链接以了解此类算法的说明:


一旦得到多边形点,就可以对每个线段进行距离计算。

我认为您只需要确定角点并连接它们。凸壳算法可能不起作用,因为多边形可能不是凸的。例如,左侧的第三个多边形(绿色多边形)不是凸多边形。同样,对于已经是凸面的多边形,凸面外壳算法可能会有过大的杀伤力

除非我弄错了,否则根据点的邻居的状态,布尔值列表中应该有四种类型的点。在规则网格中,索引i,j处的元素应该有8个邻居。基于这8个相邻点,假设多边形不接触区域的任何边,则应具有四种不同类型的点:

  • 内部点-所有8个相邻值均设置为真的点
  • 内部边点-值为true且8个相邻点中有5个设置为true的点。这些点位于多边形的远边上,但不在两个多边形边的交点处
  • 多边形边点-值为true且8个相邻点中少于5个设置为true的点。这些点是多边形的角点
  • 外部点-值为false的点
  • 您可以遍历布尔值并选择多边形的所有边点(当多边形接触区域的边时,您必须格外小心,例如,在最小的行和最小的列上有一个真值)。一旦有了边缘点,就可以通过反复试验来确定哪些点连接到哪些点。尝试连接两个点并查看边是否有效。如果边是有效的,那么它将在一边有所有真值,在另一边有所有假值,直到一个合理的余量或误差。如果它没有此属性,则它不能是多边形的边