C++ 检查多边形是否在c+中相交+;

C++ 检查多边形是否在c+中相交+;,c++,geospatial,C++,Geospatial,我有两个多边形,其最小值和最大值、纬度和经度如下所示: Polygon A: minimum_latitude=2.089 degree, maximum_latitude=2.93 degree, minimum_longitude=-122.95 degree, maximum_longitude=-122.85 degree Polygon B: minimum_latitude=2.1 degree, maximum_latitude=2.83 degree, minimum_long

我有两个多边形,其最小值和最大值、纬度和经度如下所示:

Polygon A: minimum_latitude=2.089 degree, maximum_latitude=2.93 degree, minimum_longitude=-122.95 degree, maximum_longitude=-122.85 degree

Polygon B: minimum_latitude=2.1 degree, maximum_latitude=2.83 degree, minimum_longitude=-121.95 degree, maximum_longitude=-120.85 degree
< >我如何检查C++中多边形是否与多边形B相交(或是否包含在多边形B中)?< /P> 我的纬度和经度是以度为单位的。我是否需要将它们转换为弧度以检查多边形是否相交


检查交点的一种方法是检查多边形B的最小纬度是否位于多边形A的最小纬度和最大纬度之间,反之亦然?这是正确的检查方法吗。我是否需要将纬度和经度转换为弧度以执行相交测试。

如果多边形不相交,可以使用最小/最大值作为快速检查;如果边界矩形重叠,则封闭多边形可能相交。。。但是你需要进一步的检查来确定。除非使用多边形仅存储简单的矩形;)

有一个很好的算法,可能正是您想要的:
基本上,您可以检查多边形之间的最短距离。

无需任何外部库等

  • 按照Constantin的建议,通过范围检查排除不相交的多边形
  • 通过再次在两个方向上进行简单的范围检查,检查poly1的任何点是否位于poly2的内部。如果它们相交,如果全部相交,则包含它们
  • 控制另一组2
  • 使用2和3的结果准备候选线,然后将光线从一个多边形发送到另一个多边形的线。如果有任何命中,它们是相交的
  • 就这样


    这是最简单、最快捷的方法。如果您希望通过使用排序数据或八叉树等进行多种优化,则可以使用多边形进行优化。

    我可以想到多边形,这会使您在上一段中给出的解决此问题的想法不起作用;)@好的。那么你能提出一些解决方案吗:)这不是两个轴对齐的矩形的交点吗?@DieterLücking是的,交点在两个轴对齐的矩形之间。我想你可以使用扫描线算法。在空间上扫掠直线,并沿直线为每个多边形创建边列表。对于一半普通多边形(是的,也有有趣的多边形,如自相交多边形),这会产生非相交线段或相交线段,这反过来又很容易处理。[A1;A2;B1;B2][A1;B1;A2;B2]非常感谢您的回复。我使用多边形来存储简单的矩形。还有一个问题:我应该在检查相交之前将度转换为弧度吗?只要所有东西都使用相同的单位,你就可以了。谢谢:)有时我还需要将多边形展开一定距离d=10公里。那么,你认为弧度更适合扩展多边形吗?弧度是一个旋转测量单位。扩展多边形是一些矩形线的平移,所以弧度或其他与扩展多边形无关。这对相交但没有点位于另一个多边形内的两个多边形仍然有效吗?例如,两个矩形形成一个十字形状。然后,您将需要直线交点。以上答案将提供快速和适当的过滤