我正在使用 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/