c++ - 提高内点的几何多边形距离
问题描述
我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);
}
推荐阅读
- ssl-certificate - Moodle:当我激活 Web 服务时,SSL 证书显示已过期
- wordpress - Gravity Forms 前进现在导致页面加载
- python-3.x - aiohttp-session - 重定向时无法从会话中检索值
- php - WKHTMLTOPDF 找不到 BrowserUpdate.exe
- html - 使用 CSS 在垂直线上居中对齐“圆”
- python - 从 Python 中的列表中随机选择一个而不重复
- python - Python 请求没有“表单数据”的登录网站
- python - Python:整洁的数据,我怎样才能随心所欲地转换这个表?
- entity-framework-migrations - Entity Framework Core 在初始创建后添加新迁移
- node.js - 无法将节点 js 应用程序连接到在 docker swarm 中运行的 mongodb