c++ - boost 内点的几何多边形距离

标签 c++ boost boost-geometry

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

  • 处理点 -> 多边形交点(在内部或外部)。这对 boost::geometry::within 非常有用,所以很好
  • 获取任意点到多边形最近边的距离。虽然 boost::geometry::distance 可以正确处理多边形之外的点,但它似乎认为多边形是实体的。所以多边形内的每个点显然与多边形的距离为 0。

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

最佳答案

如果点在多边形内部,您可以使用 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);
}

关于c++ - boost 内点的几何多边形距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267577/

相关文章:

c++ - 从 csv 文件中获取不同类型的数据并将其放入 C++ 中的 typedef 结构中

c++ - 没有找到接受类型为 'B' 的右手操作数的运算符(或者没有可接受的转换)

c++ - s.compare 成员函数在下面的 C++ 代码中的行为如何?

python - 带有 boost/dll 的 pybind - 双重使用 DLL?

c++ - 内存中 Boost r-tree 与映射文件中的性能差异

c++ - boost rtree.bounds() : getting more boxes and/or accessing to its structure

c++ - 在 C++ 中读取由 Java + 结构对齐打开的套接字

c++ - boost::archive::binary_iarchive 签名无效

c++ - 关于 Boost Signals2,没有名为 'apply' 的类模板

c++ - 在 Boost.Geometry rtree 中存储 OGRPoint