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

Если многогранник надо аппроксимировать сферой, то можно построить сферу, у которой центр масс и объём будут такие же, как у многогранника:

Def<Sphere3d> getSpherePlg ( const Polyhedron & poly );

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

Def<Ellipsoid3d> getEllipsoidPlg ( const Polyhedron & poly );

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

Def<Cuboid3d> getCuboid ( const Polyhedron & poly );

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

Совмещение группы точек с выпуклым многогранником при помощи вращения вокруг оси Z и сдвига. Минимизация максимального расстояния от точек до границы многогранника:

Def<Conform3d> minMaxPointsConvexPolyhedron1R ( CCArrRef<Vector3d> & point, const Polyhedron & poly );

Совмещение двух выпуклых многогранников при помощи сдвига, без вращения. Определяется вектор сдвига для смещения первого многогранника:

Def<Vector3d> overlayConvexPolyhedronsNR ( const Polyhedron & poly1, const Polyhedron & poly2 );

Описание класса Polyhedron находится здесь.
Описание класса Conform3d находится здесь.
Описание классов Sphere3d, Ellipsoid3d и Cuboid3d находится здесь.
Описание шаблона классов Def находится здесь.
Описание шаблона классов CCArrRef находится здесь.

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

Наверх