我正在编写一个函数,使用 boost::geometry 库给出先前定义的多边形的直径。
该直径定义为其两个点之间的最大距离。因此,我正在编写一个双循环,计算每对点的每个距离,但我不知道如何访问多边形内的点坐标,甚至是点对象,然后使用两个点之间的距离函数通过图书馆(顺便说一句,哪个应该更快?)。
在查看了多边形上的 Boost 文档后,我尝试了 my_polygon.PointList 没有成功......
最后我的解决方案是使用 Barend 提案的修改版本:
for(auto it1 = boost::begin(boost::geometry::exterior_ring(poly));
it1 != boost::end(boost::geometry::exterior_ring(poly));
++it1)
{
for(auto it2 = it1+1;
it2 != boost::end(boost::geometry::exterior_ring(poly));
++it2)
{
double distance = boost::geometry::distance(*it1, *it2);
if(my_diameter < distance){my_diameter = distance;}
}
}
我只是抑制了计算两次相同距离的冗余;