Если многоугольник надо аппроксимировать кругом, то можно построить круг у которого центр масс и площадь будут такие же, как у многоугольника. Если многоугольник надо аппроксимировать эллипсом ( прямоугольником ), то можно воспользоваться моментами 2-го порядка и построить эллипс ( прямоугольник ), у которого центр масс и моменты 2-го порядка будут такие же, как у многоугольника: Def<Circle2d> getCirclePlg ( CArrRef<Vector2d> poly ); Def<Ellipse2d> getEllipsePlg ( CArrRef<Vector2d> poly ); Def<Rectangle2d> getRectanglePlg ( CArrRef<Vector2d> poly ); Исходными данными для всех трёх функций является массив вершин многоугольника poly. Направление обхода вершин многоугольника произвольно. Описание классов Circle2d, Ellipse2d и Rectangle2d находится здесь.
Исходники находятся в approx2d.cpp Примеры использования всех этих функций можно посмотреть в приложении DEMO. Наверх |