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

时间:2016-03-17 21:41:51

标签: 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_longitude=-121.95 degree, maximum_longitude=-120.85 degree

如何在c ++中检查Polygon A是否与Polygon B相交(或包含在内)?

我的纬度和经度都是度数。我是否需要将它们转换为弧度以检查多边形是否相交?

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

有一个很棒的Polygon Collision算法可能正是您所寻找的: 基本上,你检查多边形之间的最短距离。

答案 2 :(得分:2)

不需要任何外部库等。

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

    这是最简单,最快捷的方式。如果您希望通过使用排序数据或八叉树等进行多次优化。