首页 > 解决方案 > 提高内点的几何多边形距离

问题描述

boost::geometry用来处理一些几何任务。我有两个要求需要满足:

我尝试尝试内部/外部的东西,并想知道是否有可能获得多边形内部和外部点的距离。

标签: c++boostboost-geometry

解决方案


comparable_distance如果点在多边形内,您可以使用而不是distance算法来加速您的代码。您不需要计算每个段点对的确切距离。使用算法找到距给定点最近的多边形段,comparable_distance然后使用distance算法计算实际距离。

auto distance = std::numeric_limits<float>::max();
if(boost::geometry::within(pt, mPolygon)) 
{
  Segment nearestSegment;
  boost::geometry::for_each_segment(mPolygon, 
    [&distance, &pt, &nearestSegment](const auto& segment) 
     {
        double cmpDst = boost::geometry::comparable_distance(segment,pt);
        if (cmpDst < distance)
        {
          distance = cmpDst;
          nearestSegment = segment; // UPDATE NEAREST SEGMENT
        }
      });
      // CALCULATE EXACT DST
      distance = boost::geometry::distance(nearestSegment,pt);
} else {
  distance = boost::geometry::distance(pt, mPolygon);
}

推荐阅读