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

标签 java math polygon

我有一个 boolean 值[][],其中真实索引构成一个实心多边形。有了这些信息我该如何

  • A.确定哪些方 block 构成了周长,并且
  • B.哪些点(按顺序)可以使用多边形类绘制多边形。

我打算使用 Polygon 类来调用 .contains,但我当前的代码给出的多边形点无序(因为我只是从左到右、从上到下扫描)。任何有关该主题的帮助都将受到赞赏。

最佳答案

我认为您只需要确定角点并将它们连接起来。凸包算法可能不起作用,因为多边形可能不是凸的。例如,wikipedia page for polygons 上从左数第三个多边形(绿色多边形)不是凸的。此外,对于已经是凸的多边形,凸包算法可能会显得有些过分。

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

  1. 内部点 - 8 个相邻值全部设置为 true 的点
  2. 内部边缘点 - 值为 true 且 8 个邻居中有 5 个设置为 true 的点。这些点位于多边形的远边上,但不在两个多边形边的交点处
  3. 多边形边缘点 - 值为 true 且 8 个邻居中设置为 true 的点少于 5 个的点。这些点是多边形的角点。
  4. 外部点 - 值为 false 的点

您可以检查 boolean 值并挑选出多边形的所有边缘点(当多边形接触区域边缘时,您必须格外小心,例如存在一个真值)在最小的行和最小的列)。获得边缘点后,您可以通过反复试验来确定哪些点连接到哪些点。尝试连接两个点并查看边是否有效。如果边缘有效,那么它将在一侧具有所有真值,在另一侧具有所有假值,直至合理的边际或误差。如果它不具有此属性,那么它一定不是多边形的边。

关于java - 如何根据 X,Y 的集合确定多边形的周长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085143/

相关文章:

java - 在java中的for循环中初始化对象?

java - jdk 7 中使用 SHA256ECDSA 进行 XML 签名 - 可能吗?

math - 一种简单的多边形相交算法

java - 使用 proguard 混淆时使用 Retrofit 的自定义错误处理给出 java.lang.reflect.UndeclaredThrowableException

java - 我应该在单元测试时从正在测试的类中调用方法吗?

c++ - 在执行点积之前对 vector 进行归一化?

python - 使用 SymPy 求解方程的 2 条边

JavaScript:高效的整数运算

google-maps-api-3 - 如何使用 Google 的第 3 版 API 设置多边形的可见性?

python - Python 中的 3D 多边形