我正在尝试创建一个方法,它将接收两个任意节点列表,一个主题和一个剪切多边形,并输出:
a)重叠区域
b)生成(剪切)多边形的节点列表,以便我可以计算面积
我发现很多使用矩形窗口剪切任意多边形的例子(图形中相当标准),但这不是我需要的。我知道它相当复杂,特别是当你得到洞,凸多边形等时。我可以做的唯一简化假设是任意多边形不包含任何孔。
我不是这个领域的专家,那么Sutherland-Hodgman算法会起作用吗?是否有任何已经执行此操作的库,或者我最好的选择是简单地实现Wikipedia上伪代码中描述的算法?
感谢您的帮助!
答案 0 :(得分:5)
那里有没有已经存在的库......
多边形裁剪是一项复杂的任务。除非你想花上很多个月,否则我不建议你自己动手。 维基百科列出了许多剪辑库(和该列表中的IIRC只有Clipper可以在商业应用程序中免费使用): http://en.wikipedia.org/wiki/Boolean_operations_on_polygons#External_links
ps:我承认Clipper的个人偏见,因为我是作者:) 更多信息:http://angusj.com/delphi/clipper.php
答案 1 :(得分:1)
您需要Weiler-Atherton之类的声音:
该算法需要多边形 顺时针而不是可重入(自我 交叉)。算法可以 支撑孔(逆时针方向) 多边形完全在其父级内部 polygon),但需要额外的 算法来决定哪些多边形 是洞。
你的多边形符合这些标准,对吧? 我不知道实现,但是如果你的任何一个多边形都是凹的话,听起来你最好不要用S-H来实现W-A。
答案 2 :(得分:1)
尝试gpc。
答案 3 :(得分:1)
我发现使用JavaGeom库非常有效。它集成了GPC Java端口的代码(不再可用),因此允许任意多边形操作。使用SimplePolygon2D和Polygon2DUtils.intersection()我能够获得所需的操作。
答案 4 :(得分:0)
我尝试过很多不同的库,最好用的是JTS Topological Suite纯Java和LGPL2许可。