В этом разделе представлены функции, которые вписывают максимальную по размеру фигуру ( чаще всего в этом качестве используется объём ) в выпуклый многогранник: • Сфера. 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<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. Примеры использования всех этих функций можно посмотреть в приложении DEMO. Описание классов Sphere3d, Cylinder3d, Cone3d и Ellipsoid3d находится здесь.
|