Manifold Geometry // Многообразная Геометрия

Архивы

К построению эквидистант на поверхностях свободной формы

Эквидистанта — один из базовых операторов любого геометрического ядра. Сегодня мы поговорим о некоторых аномалиях, индуцируемых данным оператором, а также о средствах борьбы с этими аномалиями. Эквидистантная поверхность в ядре OpenCascade представлена классом Geom_OffsetSurface. Функции моделирования, позволяющие строить такие поверхности и образованные ими тела, находятся в пакетах BRepOffset и BRepOffsetAPI.

Построение тела на оболочке и ее эквидистанте.

Треугольная сингулярность

NURBS-поверхности имеют прямоугольную топологию в собственном параметрическом пространстве. Для того, чтобы с их помощью представить треугольный лоскут, существует две возможности: сделать обрезку прямоугольной поверхности треугольным контуром, либо использовать натуральные границы поверхности, но свести крайний столбец контрольных точек в одну вершину.

С точки зрения дифференциальных свойств поверхности, стянутый уголок — это особая (читай «нехорошая») точка, так как параметризация в ней получается локально вырожденной.

Рассмотрим в качестве примера треугольный лоскут B-поверхности. Допустим, что контрольные точки «стянуты» в одну с небольшой погрешностью, то есть координаты точек не тождественны, хотя и близки. После использования оператора эквидистанты, эта погрешность усиливается как, например, на рисунке ниже.

Усиление дефекта формы оператором эквидистанты.

Слева показана исходная B-поверхность треугольной формы, а справа — ее эквидистанта. Погрешность сингулярности дает паразитный «всплеск» формы. Для борьбы с этим эффектом в ядре OpenCascade была реализована функция BRepOffset::CollapseSingularities(), которая используется в операторе BRepOffset_MakeSimpleOffset.

Для построения эквидистанты можно использовать команду offset-shell программы Анализ Положения. Направление сдвига эквидистанты соответствует ориентациям граней. Чтобы включить режим подавления сингулярностей, используйте ключ -toler. Пример:


offset-shell 100 -simple -keep -toler 1

Паразитные грани

Допустим теперь, что базовая модель содержала самопересекающиеся грани.

Усиление дефекта формы оператором эквидистанты.

В результате построения эквидистанты мелкие артефакты геометрии могут чудовищно преобразиться.

Усиление дефекта формы оператором эквидистанты.

То есть оператор эквидистанты снова отработал в качестве «усилителя» дефекта. Для борьбы с такого рода аномалиями уже не обойтись без «радикального лечения». Аномальные грани следует удалить, а образовавшийся зазор — закрыть. В случае, если удаляемые грани пренебрежимо малы, можно увеличить геометрический допуск модели и «сшить» соседние грани с новым допуском. Если геометрическое ядро позволяет стянуть соседние лоскуты, либо «заштопать» зазор новой поверхностью, то этот вариант предпочтительней, поскольку он не ведет к деградации точности. К сожалению, такое «латание дыр» не всегда возможно из-за взаимного расположения лоскутов.

Борьба с усилением дефекта формы путем подавления паразитных граней.

Словом, простейшие геометрические операторы преподносят немало сюрпризов, если их применять на базовой геометрии с неустраненными дефектами формы. Такова суровая реальность, в которой существуют индустриальные геометрические ядра.

Некоторые теоретические сведения о способах работы с сингулярностями можно найти, например, в докладе [Du, Wen-Hui & J. M. Schmitt, Francis. (1991). A General Method of Treating Degenerate Bézier Patches. 161-164].