Java 两个多边形之间的重叠检查

Java 两个多边形之间的重叠检查,java,geometry,Java,Geometry,我有一个使用HTML5画布(GWT)绘制的两个多边形形状。我有两个多边形形状的所有点。意味着我有绘制这种多边形的点列表 下图显示两个多边形相交或重叠。现在我正在寻找一个解决方案,如何使用java找到两个多边形“相交或不相交”?我使用纯java编程,没有使用任何第三个库 我还有一个问题。为了解释这个问题,我在下面附上另一张图片 这是另一种情况,即一个多边形位于另一个多边形的内部。在这种情况下,如何计算负多边形之间的最小距离?使用Postgis Api,您可以获得两个多边形是否相交的信息。查找以

我有一个使用HTML5画布(GWT)绘制的两个多边形形状。我有两个多边形形状的所有点。意味着我有绘制这种多边形的点列表

下图显示两个多边形相交或重叠。现在我正在寻找一个解决方案,如何使用java找到两个多边形“相交或不相交”?我使用纯java编程,没有使用任何第三个库

我还有一个问题。为了解释这个问题,我在下面附上另一张图片


这是另一种情况,即一个多边形位于另一个多边形的内部。在这种情况下,如何计算负多边形之间的最小距离?

使用Postgis Api,您可以获得两个多边形是否相交的信息。查找以下链接作为参考

您可以使用扫描线范例

考虑穿过任一多边形顶点的水平线。两条连续线切割板(梯形)

由于板是简单的凸多边形,检查它们的相交非常简单:它足以检测基底的重叠(注意它们形成X交叉的情况)

现在整个过程可以分解为

  • 通过增加纵坐标对两个多边形的顶点进行排序;对于每个顶点,记住它属于哪个多边形,以及它的坐标较高的邻居是什么(无、一个或两个)

  • 通过增加纵坐标扫描顶点,同时保持相交边列表(称为活动列表)。每次移动到另一个顶点时,更新活动列表

  • 测试板的交叉点