Java 如何找到两个任意多边形之间的重叠区域

Java 如何找到两个任意多边形之间的重叠区域,java,graphics,computational-geometry,Java,Graphics,Computational Geometry,我正在尝试创建一个方法,该方法将接收两个任意的节点列表,一个主题和一个剪裁多边形,并输出: a) 重叠区域 b) 生成(剪裁)多边形的节点列表,以便计算面积 我发现了很多使用矩形窗口剪裁任意多边形的示例(这在图形中是相当标准的),但这不是我需要的。我知道这相当复杂,特别是当你有洞,凸多边形等。我能做的唯一简化假设是任意多边形不包含任何孔 我根本不是这个领域的专家,所以像Sutherland Hodgman算法这样的东西会起作用吗?是否有任何库已经做到了这一点,或者我的最佳选择是简单地实现上的伪代

我正在尝试创建一个方法,该方法将接收两个任意的节点列表,一个主题和一个剪裁多边形,并输出:

a) 重叠区域
b) 生成(剪裁)多边形的节点列表,以便计算面积

我发现了很多使用矩形窗口剪裁任意多边形的示例(这在图形中是相当标准的),但这不是我需要的。我知道这相当复杂,特别是当你有洞,凸多边形等。我能做的唯一简化假设是任意多边形不包含任何孔

我根本不是这个领域的专家,所以像Sutherland Hodgman算法这样的东西会起作用吗?是否有任何库已经做到了这一点,或者我的最佳选择是简单地实现上的伪代码中描述的算法

谢谢你的帮助

有没有图书馆已经这样做了

多边形裁剪是一项复杂的任务。我不建议你自己去做,除非你想花几个月的时间。 Wikipedia列出了许多剪辑库(IIRC在该列表中,只有Clipper可以免费用于商业应用程序):

ps:我承认我对克利伯有个人偏见,因为我是作者:) 此处的更多信息:

听起来像是您需要的:

该算法要求多边形是 顺时针且不可重入(自 交叉)。该算法可以 支撑孔(如逆时针方向 多边形完全位于其父对象内部 多边形),但需要额外的 确定哪些多边形的算法 都是洞

你的多边形符合这些标准,对吗?
我不知道如何实现,但听起来如果两个多边形中的任何一个都是凹的,那么实现W-A比实现S-H更好。

试试。

我发现使用该库效果很好。它集成了来自GPC的Java端口(不再可用)的代码,因此允许任意多边形操作。使用SimplePolygon2D和Polygon2DUtils.intersection()我能够获得所需的操作。

我尝试了许多不同的库,其中最有效的是纯Java和LGPL2许可的。。。该算法无法正确处理多个端口,对吗?这是我的理解,是的。我找到了GPC,但Java端口似乎已关闭(死链接)。Java端口链接现在似乎已打开: