有没有办法计算一组触摸多边形之间的空白区域?

时间:2014-03-13 21:45:34

标签: algorithm geometry computational-geometry

鉴于一堆凸起的多边形像一个房屋桁架一样,是否有办法计算空白区域,或者为每个洞穴中的每一个获得一个多边形"多边形之间?

enter image description here

我尝试从任何给定的多边形开始,然后找到多边形的某些线之间的交叉点,并且我不知道如何正确选择要用于交叉点的线。

然后我试图验证该区域的顺时针检测,但似乎我确定两条线的CW / CCW的算法不起作用,我认为,它的行为就像线条具有相同的原点而不是按顺序排列"来自彼此。

2 个答案:

答案 0 :(得分:1)

根据评论,解决方案非常简单

1.prepare data

  • 将网格表示为点表并删除冗余点(point = x,y,z ... + int cnt = 0;)
  • 和行表(行= 2 *点表的索引+ bool删除= false)
  • 为每个使用点创建行表时增加其cnt计数器

2.删除冗余线(粗线之间的连接边界)

  • 找到所有重叠且位于同一行的行
  • 他们有相同或相反的方向
  • 删除较短的一个并解剖较大的一个并相应地更新所有表格(也指向cnt !!!)
  • 之后发现所有点之间的所有线路都使用了两次以上
  • 删除它们......

enter image description here

3.查找所有闭环

  • 这样的事情:

    1.创建多边形列表

    • polygon是点索引列表

    2.使用任何未删除的行

    • 如果找到,则将新多边形添加到列表和
    • 将其点复制到多边形
    • 标记为已删除的行
    • 如果没有找到停止

    3.找到与最后一个多边形点匹配的点

    • 将另一个点添加到polygon
    • 标记为已删除的行
    • 重复子弹2,直到找不到这样的行

    4.goto 1

4.现在找到了带有最大边界框的多边形

  • 此多边形是外围
  • 所以删除它
  • 你也可以用不同颜色绘制它以进行调试

5.现在总结其余的

  • 所有剩余的多边形都是洞
  • 所以三角测量他们
  • 并按基本数学公式对所有三角形区域求和...
  • 您也可以使用其他不同颜色绘制它们以进行调试

答案 1 :(得分:0)

这不是一个简单的问题,因为需要使用一些交叉点和/或倒角/修剪规则逐步计算完整的几何体。

我想象两种方法:

1)自己构建一个所需几何操作的工具箱(使用解析几何),其中包括段/段交叉,可能还有其他一些(将映射到桁架设计规则);使用此工具箱,根据图片“手动”构造所有必需的多边形顶点;最后,使用通用公式http://en.wikipedia.org/wiki/Polygon#Area_and_centroid计算多边形孔的面积。

2)使用现成的多边形操作库,如Clipper(http://www.angusj.com/delphi/clipper.php),这将允许您绘制日志而不必太在意端点处的修剪(您将执行矩形的并集并得到一个带孔的多边形)。

在我理解你的问题后,第一种方法更好。

更新:

如果您拥有的是与每个日志对应的一组多边形,则答案是不同的:

如果您只关心空隙的总面积,请计算外部轮廓的面积并推导出每个日志的面积。

如果您需要单个孔的区域,则使用第二种方法:执行多边形的并集并查询孔。