Я кодирую функцию, дающую диаметр ранее определенного многоугольника, используя библиотеку boost :: geometry.
Этот диаметр определяется как максимальное расстояние между двумя его точками. Таким образом, я кодирую двойной цикл, вычисляющий каждое расстояние каждой пары точек, но я не знаю, как получить доступ к координатам точки внутри многоугольника или даже к точечным объектам, а затем использовать функцию расстояния между двумя приведенными точками. библиотекой (кстати, какая должна быть быстрее?).
После просмотра документов по ускорению на многоугольнике Я безуспешно пробовал my_polygon.PointList ...
В конце концов, я решил использовать модифицированную версию предложения Баренда:
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;}
}
}
Я просто подавил избыточность вычисления двух одинаковых расстояний;