Аппроксимация многоугольника

Если многоугольник надо аппроксимировать кругом, то можно построить круг у которого центр масс и площадь будут такие же, как у многоугольника. Если многоугольник надо аппроксимировать эллипсом ( прямоугольником ), то можно воспользоваться моментами 2-го порядка и построить эллипс ( прямоугольник ), у которого центр масс и моменты 2-го порядка будут такие же, как у многоугольника:

Def<Circle2d>    getCirclePlg    ( CArrRef<Vector2d> poly );
Def<Ellipse2d>   getEllipsePlg   ( CArrRef<Vector2d> poly );
Def<Rectangle2d> getRectanglePlg ( CArrRef<Vector2d> poly );

Исходными данными для всех трёх функций является массив вершин многоугольника poly. Направление обхода вершин многоугольника произвольно.

Описание классов Circle2d, Ellipse2d и Rectangle2d находится здесь.
Описание шаблона классов CArrRef находится здесь.
Описание шаблона классов Def находится здесь.
Описание класса Vector2d находится здесь.

Исходники находятся в approx2d.cpp

Примеры использования всех этих функций можно посмотреть в приложении DEMO.

Наверх