Boost :: geometry: вычисление центроида многоугольника

Я работал с геометрией Boost, в основном для манипулирования полигонами; Я использовал встроенный метод центроида (http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/reference/algorithms/centroid/centroid_2.html) для расчета геометрический (барический) центр моих многоугольников, но недавно после вывода координат моих точек (составления определенного многоугольника) (и анализа их сбоку с помощью некоторых скриптов Python) я понял, что координаты центроида, которые давал мне предыдущий метод, не соответствуют среднему геометрическому точек многоугольника.

Я нахожусь в двух измерениях и складываю это в уравнения, у меня должно получиться:

x_centroid = \frac{1}{number of points composing the polygon} \sum{point i} x_i

и то же самое для координат y. Теперь я подозреваю, что это могло быть связано с тем фактом, что библиотека ускоренной геометрии не просто смотрит на точки на краю многоугольника (его внешнее кольцо), но рассматривает его как заполненный объект.

Есть ли у кого-нибудь из вас опыт работы с этими функциями?

Кстати, я использую:

point my_center(0,0);
bg::centroid(my_polygon,my_center);

для вычисления центроида.

Спасибо.


person Learning is a mess    schedule 24.04.2014    source источник


Ответы (3)


В Boost.Geometry алгоритм, предложенный Bashein и Detmer [1], по умолчанию используется для вычисления центроида площадных геометрий.

Причина в том, что метод простого среднего не работает в случае, когда много близко расположенных вершин размещено на одной стороне многоугольника.


[1] Джерард Башейн и Пол Р. Детмер. «Центроид многоугольника». Graphics Gems IV, Academic Press, 1994, стр. 3–6.

person Adam Wulkiewicz    schedule 24.04.2014
comment
Действительно, вы правы для вершин действительно разной длины, барицентр вершин может быть далеко от центра тяжести (залитого) многоугольника. В моем случае все вершины имеют одинаковую длину, поэтому я никогда не думал об этом. Я буду использовать свой собственный метод вычислений исключительно для вершин. Спасибо за актуальный и поучительный вклад;) - person Learning is a mess; 28.04.2014

Вот что такое центроид - среднее значение бесконечного числа точек, составляющих заполненный многоугольник. Похоже, что вам нужен не центроид, а просто среднее значение вершин.

Между прочим, «среднее геометрическое» имеет другое определение, чем вы думаете, и никоим образом не применимо к этой ситуации.

person Sneftel    schedule 24.04.2014
comment
Да, действительно, «среднее геометрическое» уже используется, я забыл об этом. То, что я имел в виду, было «геометрическим средним / средним», и похоже, вы все еще поняли мою точку зрения;) Спасибо за ваш вклад. - person Learning is a mess; 28.04.2014

Центроид многоугольника считается центром масс плоской фигуры (например, листа бумаги), а не только центром вершин.

person MBo    schedule 24.04.2014