Если многогранник надо аппроксимировать сферой, то можно построить сферу, у которой центр масс и объём будут такие же, как у многогранника: 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 находится здесь.
Исходники находятся в approx3d.cpp Наверх |