Algorithm 有没有办法计算一组接触多边形之间的空白区域?
给定一组像屋架一样排列的凸多边形,有没有办法计算空面积,或者为多边形之间的每个“孔”获得一个多边形 我试着从任何给定的多边形开始,然后找到多边形的一些线之间的交点,不知怎的,我被困在如何正确选择用于交点的线上Algorithm 有没有办法计算一组接触多边形之间的空白区域?,algorithm,geometry,computational-geometry,Algorithm,Geometry,Computational Geometry,给定一组像屋架一样排列的凸多边形,有没有办法计算空面积,或者为多边形之间的每个“孔”获得一个多边形 我试着从任何给定的多边形开始,然后找到多边形的一些线之间的交点,不知怎的,我被困在如何正确选择用于交点的线上 然后,我尝试验证是否对该区域进行了顺时针检测,但我确定两条直线的CW/CCW的算法似乎不起作用,因为我认为,它的作用似乎是两条直线具有相同的原点,而不是彼此“按顺序”排列。根据评论,解决方案相当简单 1.准备数据 将网格表示为点表,并删除冗余点(点=x,y,z..+int cnt=0;
然后,我尝试验证是否对该区域进行了顺时针检测,但我确定两条直线的CW/CCW的算法似乎不起作用,因为我认为,它的作用似乎是两条直线具有相同的原点,而不是彼此“按顺序”排列。根据评论,解决方案相当简单 1.准备数据
- 将网格表示为点表,并删除冗余点(点=x,y,z..+int cnt=0;)
- 和线表(线=2*点表中点的索引+布尔删除=假)
- 为每个使用的点创建线表时,增加其cnt计数器
- 找到所有重叠且位于同一直线上的直线
- 它们有相同或相反的方向
- 删除较短的表格,解剖较大的表格,并相应地更新所有表格(同时指向cnt!!!)
- 在此之后,查找超过两次使用的点之间的所有线
- 删除它们
- 大概是这样的:
1.创建多边形列表
- 多边形是点索引的列表
- 如果找到,请将新多边形添加到列表中并
- 将其点复制到多边形
- 将行标记为已删除
- 如果没有找到,请停止
- 将另一个点添加到多边形
- 将行标记为已删除
- 重复项目符号2,直到没有找到这样的线
- 这个多边形是外周长
- 所以删除它
- 也可以使用不同的颜色绘制,以进行调试
- 所有剩余的多边形都是孔
- 所以把它们三角化
- 用基本数学公式求所有三角形面积的和
- 也可以使用其他不同的颜色绘制它们,以进行调试
如果您需要单个孔的面积,则使用第二种方法:执行多边形的并集并查询孔。您对如何处理该问题有什么想法吗?另外,您的输入是什么。你说“凸面多边形像房子的屋顶一样排列”。我发现这几乎不够精确,无法得出任何结论。有帮助吗?我假设你的线条有一定的厚度,在这种情况下,你需要把所有的线条内外分开。你可能已经在你的网格中有了它们,如果没有的话,你需要找到轮廓,然后多边形化所有的内线(找到所有闭合的不可分离的环),然后三角化,然后简单地求和所有三角形区域together@Spektre乘以什么谢谢你详细的回答。如果我理解正确,我需要考虑所有的多边形作为一个点列表,然后从那里开始?这会导致丢失每个多边形的内部位置吗?此外,在第2点中,您提到了粗线。我对此感到困惑。你什么意思?子弹2是最有问题的。。。正确地调试它。必须在所有解剖后进行管线移除!!!此外,如果您的“四边形”未对齐,则线可能仅部分重叠,因此您需要记住,在这种情况下,粗线是输入中的单个多边形(木条)整个bullet 2删除了图像上的所有连接线蓝色线在这里您可以找到闭环查找示例