Максимальная фигура вписанная в многогранник

В этом разделе представлены функции, которые вписывают максимальную по размеру фигуру ( чаще всего в этом качестве используется объём ) в выпуклый многогранник:

• Сфера.

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

• Фиксированный цилиндр.

Def<Cylinder3d> maxFixCylinderInConvexPolyhedron ( const Polyhedron & poly, double ext );

Параметр ext задаёт отношение высоты цилиндра к его диаметру.

• Фиксированный конус.

Def<Cone3d> maxFixConeInConvexPolyhedron ( const Polyhedron & poly, double ext );

Параметр ext задаёт отношение высоты конуса к его диаметру.

• Фиксированный сфероид ( эллипсоид у которого две оси равны ).

Def<Ellipsoid3d> maxFixSpheroidInConvexPolyhedron ( const Polyhedron & poly, double ext );

Параметр ext задаёт удлиннение. Для ext близкого к 1 ( 0.9 - 1.1 ) этот алгоритм требует больших ресурсов по времени и памяти. На этот случай имеются ограничения и при превышении их в результате возвращается неопределённый эллипсоид ( поле isDef равно false ).

Для трёх последних функций параметр ext может быть равен нулю ( тогда будет вписан диск нулевой толщины ) или быть очень большим ( тогда будет вписан отрезок практически нулевой толщины ).

• Цилиндр.

Def<Cylinder3d> maxCylinderInConvexPolyhedronV ( const Polyhedron & poly );

• Конус.

Def<Cone3d> maxConeInConvexPolyhedronV ( const Polyhedron & poly );

• Сфероид.

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

• Эллипсоид вписанный в тетраэдр.

Ellipsoid3d maxEllipsoidInTetrahedronV ( Vector3d v1, Vector3d v2, Vector3d v3, Vector3d v4 );
• Эллипсоид.

Def<Ellipsoid3d> maxEllipsoidInConvexPolyhedronV ( const Polyhedron & poly );
• Тетраэдр.

Def<Tetrahedron> maxTetrahedronInConvexPolyhedronV ( const Polyhedron & poly );
Эта функция делает полный перебор четвёрок вершин многогранника.

• Кубоид ( прямоугольный параллелепипед ) без вращения.

Def<Conform3d> maxCuboidInConvexPolyhedronNR ( const Polyhedron & poly, 
                                               const Spin3d & spin = Spin3d() );

• Многогранник без вращения.

Def<Conform3d> maxPolyhedronInConvexPolyhedronNR ( const Polyhedron & inner, 
                                                   const Polyhedron & outer );
Здесь inner - это внутренний многогранник, outer - внешний выпуклый многогранник. Функция возвращает преобразование ( сдвиг и масштаб ), которое вписывает inner в outer.

• Многогранник с вращением вокруг заданной оси.

Def<Conform3d> maxPolyhedronInConvexPolyhedron1R ( const Polyhedron & inner, 
                                                   const Vector3d & az, nat sym,
                                                   const Polyhedron & outer );
Здесь inner - это внутренний многогранник, az - направление оси вращения, sym - коэффициент вращения ( к-во переходов фигуры в себя при вращении на 360 градусов ), outer - внешний выпуклый многогранник. Функция возвращает пребразование, которое вписывает inner в outer.

• Многогранник с произвольным вращением.

Def<Conform3d> maxPolyhedronInConvexPolyhedron ( const Polyhedron & inner, const Polyhedron & outer );

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

Описание классов Sphere3d, Cylinder3d, Cone3d и Ellipsoid3d находится здесь.
Описание шаблона классов Def находится здесь.
Описание класса Polyhedron находится здесь.
Описание класса Conform3d находится здесь.
Исходники находятся в файле opti3d_2.cpp.

Наверх