Актуальность темы. Бесспорно,
геометрическое моделирование является одним из наиболее важных областей
человеческой деятельности, поскольку оно часто используется при
проектировании. Например, при проектировании архитектурных строений,
механических узлов, нового дизайна изделий бытового назначения и
других предметов. Основой точного геометрического моделирования
является прикладная геометрия. Однако в силу возрастающей мощности
компьютерных систем эта область пополнилась новыми технологиями,
такими как твердотельное моделирование, В-сплайны, лофтинг, скиннинг
и др. Они успешно применяются на практике. Однако не смотря на большие
успехи в этом направлении, вопросы синтеза моделей геометрических
объектов все еще остаются актулаьными. Основные из них это:
- повышение быстодействия выполнения операций с геометрическими
моделями;
- разработка технологий, упрощающих построение сложных геометрических
объектов;
- интеграция разнородных геометрических моделей.
Цели и задачи исследования. Целью
магистерской работы является исследование способов представления
моделей геометрических объектов и алгоритмов их синтеза.
Научная новизна состоит в разработке
метода построения моделей геометрических объектов по произвольному
параметрическому описанию образующих их частей (кривых или поверхностей).
Практическая ценность состоит
в разработке библиотеки функций, обслуживающих основные этапы построения
моделей геометрических объектов по их произвольному параметрическому
описанию.
Реализация результатов работы.
Результат работы составляет библиотека функций, построенной по COM
технологии. Библиотека включает:
- подсистему создания наращиваемой библиотеки символьных функций
и компилятор функций;
- функции для работы с B-сплайнами;
- подсистему синтеза тверотельных моделей геометрических объектов
в базисе B-сплайнов, описанных средствами библиотеки символьных
функций.
СОДЕРЖАНИЕ РАБОТЫ
1 Способы представления
моделей геометрических объектов
В общем случае в любой геометрической модели можно выделить две
составляющие ее части (уровни):
набор структурных элементов. Например, в полигональной модели
это вершины, ребра и грани.
топология, т.е. собственно структура, определяющая способ взаимосвязи
элементов.
Структурный элемент как геометрический объект, вообще говоря, можно
представить одним из способов:
1) параметрически (функциональная зависимость координат от переменных
параметров):
2) неявно
где
m – размерность пространства (1 – одномерное, 2 – двумерное,
3 – трехмерное);
n – размерность элемента (0 – нульмерный, определяет точку; 1
– одномерный, определяет линию; 2 – определяет поверхность);
- m-мерная вектор-функция,
определяющая форму параметрического элемента;
- m-мерная вектор-функция,
задающая пределы изменения параметров ui;
- m-мерная вектор-функция,
определяющая неявное уравнение геометрического элемента;
- m-мерный нулевой вектор.
Как видно неявное задание геометрического объекта более компактное.
Тем не менее, параметрическому заданию отдается предпочтение в силу
его удобства для решения задач нахождения:
- точки, принадлежащей объекту (вычисляется по параметру);
- нормали к кривой или поверхности;
- осуществления мэппинга поверхности;
- и др.
В зависимости от значений m и n сведем геометрические объекты для
параметрического их представления в следующую таблицу.
Таблица 1 Классификация элементов геометрических объектов
m\n
0
1
2
1
точка прямой
отрезок прямой
-
2
точка плоскости
линия на плоскости
область на плоскости
3
точка в пространстве
пространственная линия
область в пространстве
Из таблицы видно, что m <= n. Будем ссылаться на данные элементы
обозначением (m\n)-элемент. Например, (2\1) – это линия на плоскости.
Имея данные структурные элементы можем конструировать из них различную
топологию, выражающую отношения между структурными элементами, например,
с помощью таблиц или с использованием теории множеств. Так ломаную
можно представить двумя множествами:
V – множество вершин ((2\0)-элементов)
Е = {vi, vj}– множество ребер.
Рассмотрим распространенную классификацию существующих способов
представления трехмерных геометрических объектов (моделей) [1]:
- простейшие способы;
- граничное задание;
- объемное задание.
К простейшим способы задания трехмерных объектов относятся точечное
и проволочное (каркасное) представления.
В точечном представлении объект задан совокупностью вершин, принадлежащих
поверхности объекта V = {V1,…,Vn}.
Проволочная модель является расширением предыдущего способа. Объекты
задаются совокупностью вершин и соединяющих их ребер (отрезков прямой
или кривой):
V = {v1,…,vn}, Е = {vi, vj [, fk(u)]},
где fk(u) – это (3\1)-элемент, используемый, если ребро не является
отрезком прямой, соединяющей вершины vi, vj. Как правило для одной
модели fk является вектор-функцией одного и того же типа.
Основное преимущество этих способов - простота представления. Потому
они применяются на промежуточных стадиях работы с геометрическим
объектом: предварительная визуализация и как исходные модели, для
синтеза более сложных моделей.
Поверхностное (граничное) задание моделей. Поверхностное представление
объекта подразумевает точное математическое описание. Исходя из
вышеприведенной классификации существует два основных способа описания
поверхности: явное параметрическое и виде неявных функций. Общий
вид параметрической поверхности следующий:
,
где, для параметров u и v, как правило, определяют область определения
либо прямоугольного (ua < u < ub, va < v < vb) либо
треугольного (ua < u < ub, va < u + v < vb) вида.
Можно выделить два основных типа поверхностных параметрических
моделей:
- полигональная модель, которая представлена набором плоских граней;
- патч-модель, или лоскутная модель. В данном случае гранями служат
части поверхностей одного типа (билинейные, поверхности Кунса, бикубические
поверхности, поверхности Безье, поверхности на основе B-сплайнов).
Поверхностное задание трехмерных объектов является наиболее распространенным
и для него сформировались следующие разновидности топологий:
список вершин. В этой топологии грань выражается через вершины:
V = {vi } – вершины |V| = n;
F = {(vj1, vj2,…, vjk [, fj(u,v)]) } – грань (или патч fj), состоящая
из k вершин (k >= 3)
список ребер. Здесь грань выражена через ребра:
V = {vi } – вершины |V| = n;
Е = { ek = (vi, vj [, fk(u)]) } – ребро. fk – уравнение линии;
F = { (ej1, ej2,…, ejk [, fj(u,v)]) } – грань (или патч fj), состоящая
из k ребер (k >= 3).
"крылатое" представление. Эта модель является развитием
модели, основанной на информации о ребрах. Отличие состоит в том,
что в структуру, описывающую ребра, добавляется информация о взаимном
расположении граней. Она включает:
V = {vi } – вершины |V| = n;
E = { ek = (vstart, vend, ncw, nccw, [, fk(u)]) } – ребро, где
vstart – начало ребра, vend – конец ребра, ncw – следующее (предыдущее)
ребро в той грани, где ek встречается в положительном направлении
обхода вершин, nccw – следующее (предыдущее) ребро в другой грани
(где ek встречается в отрицательном направлении).
F = { (first_edge, sign [, fj(u,v)]) } – грань (или патч fj),
где first_edge – первое ребро в цепочке представления грани, sign
– знак (+/-), определяющий, в каком направлении встречается ребро
first_edge в данной грани.
"Крылатое" представление является наиболее удобным для
реализации важнейших алгоритмов над геометрическими объектами:
- проверка правильности задания;
- алгоритмы для полигональных моделей, связанные с обходом ребер
(выделение плоских контуров, упрощение модели путем удаления граней
и другие).
Кроме того, не более, чем за линейное время можно восстановить
любую другую топологию, следуя по цепочкам связей между элементами.
В объемном представлении базовыми являются (3\2)-элементы или неявно
представленные примитивы. Наиболее известны:
- воксели;
- метаболы [2];
- сплошные конструктивы.
Основой воксельного представления служит так называемый воксель
(или ячейка), представляющий собой кубическую область пространства.
Трехмерный объект определяется как массив вокселей. Можно выделить
следующие топологии воксельного объекта:
простейшая – набор одинаковых вокселей, аппроксимирующий область
пространства, занимаемую объектом;
V = { ({L} x {M} x {N}, {1,0}) } – элементу трехмерного массива
вокселей размером L x M x N ставится в соответствие его заполненность
(принадлежность объекту);
октальное дерево – рекурсивное разбиение пространства на 8 частей.
При этом устанавливается некоторый минимальный размер вокселя.
Лист дерева помечается заполненным, если он полностью принадлежит
объекту. Т.о. топология представлена в виде дерева;
PM-октальные деревья – это гибрид октального дерева и полигональной
модели для уменьшения погрешности аппроксимации при достижении
минимального размера вокселя в рекурсивном разбиении пространства.
Воксельное представление является очень удобным для реализации
пространственных алгоритмов и теоретико-множественных операций над
объектами (объединение, вычитание, пересечение), но обладает рядом
недостатков, которые ограничивают область его применения:
- низкая точность для представления для большинства объектов;
- большой объем занимаемой памяти;
Метаболы [2] – это шары различного радиуса
(r), которые могут взаимодействовать в зависимости от близости и
радиуса взаимодействия (R): Сфера = (координаты, радиус, вещество).
Взаимодействие выражается через появление дополнительной «материи»
между ними (см. рис 1.1). Топология как таковая здесь отсутствует.
Рисунок 1.1 Взаимодействие двух метаболов
При представлении объекта в виде сплошных конструктивов используют
два набора:
- базовый набор примитивов (параллелепипед, сфера, конус, цилиндр,
тор, призма, пирамида и т.п.), являющихся структурными элементами
объекта;
- базовый набор теоретико-множественных операций: унарного аффинное
преобразование (T) и бинарных операций вычитания (-), пересечения
(*), объединения (+). Данный набор определяет топологию модели,
которая реализуется в виде формулы теории множеств.
Например, если мы имеем три примитива A, B, C и формулу (A + T(B))
* C, то это означает, что мы объединяем объект А с трансформацией
объекта В и пересекаем его с объектом С. Преимущество данного способа
представления заключается в том, что таким образом можно относительно
легко моделировать достаточно сложные объекты.
2 Синтез моделей геометрических объектов
Под синтезом модели геометрического объекта будем понимать преобразование
модели одного и того же геометрического объекта в другую модель.
Рисунок 2.1 Синтез как процесс преобразования
одной модели в другую
В настоящее время методы синтеза достигли такого многообразия благодаря
современным мощным системам геометрического моделирования (3DStudioMAX,
Autodesk AutoCAD, Autodesk Inventor, Rhino, Lightwave, Maya, “СПРУТ”,
комплекс программ фирмы IDEA и др.), что выполнить обобщенную классификацию
достаточно сложно. Поэтому составим ее по отдельным признакам.
Исходя из принятого выше разделения модели на два уровня можно
выполнить поуровневую классификацию методов синтеза:
элементные. Преобразованию подвергаются только структурные
элементы модели, но не затрагивается топология. Такое преобразование,
вообще говоря, является приближенным. Например, в поверхностной
модели – конвертирование Безье-патчей в NURBS-патчи;
топологические. Они преобразуют только топологию. Это однозначное
преобразование. Примером может служить приведение топологии «список
вершин» полигональной модели к топологии «крылатое представление»;
смешанные (элементно-топологические). Преобразованию подвергается
как структурные компоненты, так и топология. Например:
- аппроксимация патч-модели полигональной моделью;
- преобразование области, ограниченной неявно заданной поверхностью,
в воксельную модель.
В отдельный и наиболее широкий класс выделяют процедурные методы
синтеза. Они составляются из комбинации предварительно определенных
кривых, поверхностей, функциональных компонент и процедур, которые
соотносят их для получения новой кривой или поверхности. Сюда относятся:
- кинематические методы получения поверхностей лофтинга, скиннинга,
вращения, выдавливания, протягивания по кривым, используемым как
направляющие или как образующие поверхность;
- методы получения новой поверхности из имеющихся: константные и
функциональные поверхности смещения, теневые поверхности;
- получение поверхности с использованием кривой на другой поверхности:
перпендикулярная поверхность, касательная поверхность, обрезка (усечение)
поверхности кривыми;
- получение поверхности по кривым: поверхность по обозначающим ее
краям.
Эти методы являются математически точными и универсальными. А кинематические
методы используются для формирования базовых элементов твердотельного
моделирования (AutoCAD).
Одним из мощных средств синтеза являются пространственные искажения
(3D Studio MAX [2]), которые могут быть выражены
как:
3 Параметрическое заданние геометрических
объектов
Как упоминалось ранее, параметрическое задание подразумевает функциональную
зависимость координат точек объекта от некоторых параметров. Для
линий используются функция одной переменной:
p = F(u) = (Fx(u), Fy(u), Fz(u)),
а для поверхности – функция двух переменных:
p = F(u, v) = (Fx(u, v), Fy(u, v), Fz(u, v)).
Вообще говоря, вид функции F может произвольным. Но на практике
ограничивают набор функций, которые представляют наиболее часто
встречающиеся геометрические объекты, из которых затем составляют
более сложные. К ним относятся [3]:
Как видно их перечень невелик. А потому для моделирования кривых
и поверхностей, которые не вписываются в этот набор, используется
сплайны и патчи. Наиболее употребляемые виды сплайнов: сплайны Безье,
B-сплайны (NURBS). Среди патчей можно выделить: патчи NURBS, Безье-патчи,
N-патчи, билинейные патчи, патчи Кунса. Тем не менее, большинство
пакетов использует эти инструменты для аппроксимации вышеперечисленных
кривых и поверхностей и не имеют автоматических средств для аппроксимации
пользовательский кривых (параболы, гиперболы, синусоиды) и поверхностей
(параболоиды, конусы с образующей заданного вида и др.) с помощью
перечисленных сплайнов и патчей.
Данная работа как раз и посвящается изучению и разрешению данной
проблемы. Сформулируем основные задачи, которые должны быть при
этом решены:
1) гибкость и универсальность определения пользовательских функций
(расширяет область применения);
2) высокая скорость вычисления (обеспечивает возможность построения
интерактивных приложений);
3) контролируемая точность аппроксимации функций (обеспечивает адекватность
оценки полученных результатов);
4) минимизация результата аппроксимации (экономит память);
5) взаимодействие с другими системами;
6) универсализация механизма синтеза геометрических моделей.
В последующих разделах будут описаны пути решения поставленных
задач.
4 Библиотека произвольных символьных функций
Для построения любой сложной системы необходимы:
- набор базовых элементов;
- правила построения новых элементов из уже имеющихся.
Для построения пользовательских функций будем использовать математический
аппарат. В качестве базовых элементов будут выступать элементарные
функции: синус, косинус, тангенс, функций возведения в степень,
экспонента и др. По аналогии с языками программирования в качестве
построения новых функций целесообразно использовать привычные для
человека арифметические выражения, включающие:
операнды (числа и аргументы функции);
арифметические операции (+, -, *, /, ^);
скобки управления приоритетом операций;
функциональную зависимость выражений. И с целью сохранения общности
снимем ограничения на число аргументов функции.
Теперь определим тело произвольной функции, используюя формализм
Бекуса-Нура:
Определим для нее следующие операции, которые можно выразить тривиальными
операциями над множествами:
- добавить определения элементарных функции;
- добавить новое тело функции с заданным именем;
- удалить функцию по имени;
- очистить библиотеку.
Таким образом мы обеспечили решение первой поставленной задачи.
4.1 Синтаксический разбор и оптимизация
Приведенный выше синтаксис описания функции позволяет строить структуры
вычисления реализующий их арифметических выражений. Другими словами
для данного описания требуется механизм синтаксического разбора.
При этом известны два вида структур:
линейная (польская инверсная запись). После расчленения выражения
на операции и операнды оно преобразуется в список в префиксной
форме.
Например, a + (b * c – d / e) преобразуется в a b c * d e / -
+;
древовидная. В данном случае в узлах дерева окажутся операции,
а в листьях – операнды. Например, для выше приведенного выражения
получим дерево, изображенное на рисунке 1.
Рисунок 4.1 Дерево, представляющее арифметическое
выражение
Первая структура удобна для реализации чистых арифметических выражений.
Дерево – это более сложная структура, но она универсальнее по представимости
выражений, удобна для проведения их оптимизации и проведению символьных
вычислений. Поэтому целесообразно применять комбинацию этих структур,
и определим ее следующим образом:
При этом следует отметить, что элемент <ПОЛИЗ> - это польская
инверсная запись бесскобочного арифметического выражения. Арифметическое
выражение в скобках соответствует узлу, содержащему элемент <ПОЛИЗ>.
Теперь обратим внимание на один важный факт. Поскольку в определение
тела функции входят константы, то может оказаться, что функция содержит
ветви, все операнды которых прямо или косвенно зависят от констант
и могут быть предрасчитаны заранее. Например, для выражения
x + 5 * (3 + sqrt(4))
возможно следующее упрощение (sqrt – функция вычисления квадратного
корня):
x + 25.
Поэтому имеет смысл после построения дерева проводить проверку
на выявления и замену таких ветвей с целью оптимизации.
4.2 Вычисление функции и компиляция
Имея структуру, представляющую тело функции можно вычислять ее
значение по заданным значениям аргументов. Рекурсивный алгоритм
4.1 вычисления следует из определений (4.1), ( 4.2). Причем:
ВЫЧИСЛИТЬ_УЗЕЛ (<узел>) = ЕСЛИ <узел> == <ПОЛИЗ> ТО ВЕРНУТЬ ВЫЧИСЛИТЬ_ПОЛИЗ(<ПОЛИЗ>) ИНАЧЕ ЕСЛИ <узел> == <имя функции> ТО ДЛЯ i ОТ 1 ДО ЧИСЛО_АРГУМЕНТОВ(<имя функция>) pi = ВЫЧИСЛИТЬ_ПОЛИЗ(<ПОЛИЗ_i>) ВЕРНУТЬ <имя функции>(p1, p2, …)
ВЫЧИСЛИТЬ_ПОЛИЗ (<ПОЛИЗ>) = ДЛЯ i ОТ 1 ДО ЧИСЛО_ЭЛЕМЕНТОВ(<ПОЛИЗ>) ЕСЛИ <ПОЛИЗ> = <операнд> ТО В_СТЕК(<операнд>) ИНАЧЕ ЕСЛИ <ПОЛИЗ> = <операция> ТО x1 = ИЗ_СТЕКА() x2 = ИЗ_СТЕКА() В_СТЕК(<операция>(x1, x2)) ВЕРНУТЬ ИЗ_СТЕКА()
Данный алгоритм реализует интерпретатор. Однако интерпретатор выполняет
множество лишних манипуляций данными (копирование во вспомогательные
переменные, дополнительные проверки условий), которых можно избежать
при вычислении конкретной функции. Этого можно добиться путем генерации
(компиляции) ее исполнимого кода. Компиляция решает вторую из поставленных
задачу – высокая скорость вычислений.
Компиляции состоит в формировании кода их базовых наборов команд:
действия при входе в тело функции;
действия при выходе из тела функции;
возврат их функции;
помещения в стек аргумента функции;
помещение в стек константы;
удаления из стека заданного числа значений;
операции со стеком математического сопроцессора (копирование,
извлечение, дублирование, обмен значений и др.);
реализация операции математического сопроцессора (сложения,
вычитания, умножения, деления).
5 Аппроксимация произвольных функций с
помощью B-сплайнов
Как упоминалось ранее для параметрического описания геометрических
объектов в пространстве используются функции одной (линии) и двух
(поверхности) переменных. В виду некоторых принципиальных отличий
их аппроксимации рассмотрим каждый из этих видов функций по отдельности.
Выбор B-сплайнов (NURBS) в качестве аппроксимирующих функций обусловлен
следующими причинами:
они является наиболее общим видом сплайнов, благодаря наиболее
широкому набору полезных математических свойств (о которых будет
сказано в следующем пункте), чем у других видов, а, следовательно,
с их помощью можно наиболее точно приблизить функцию;
они являются стандартом для граничного представления SGM в современных
CAD-системах (Autodesk Inventor, Rhinoceros и др.), в т.ч. используемых
ими для обмена форматов файлов (IGES, PHIGS и др.).
5.1 Кривые и поверхности NURBS
Начнем с рассмотрения NURBS-кривых, поскольку это дает базовое
понимание В-сплайнов, а затем обобщим их на поверхности. В общем
случае В-сплайн состоит из нескольких сплайновых сегментов, каждый
из которых определен как набор управляющих точек. Поэтому коэффициенты
многочлена будут зависеть только от управляющих точек на рассматриваемом
сегменте кривой. Этот эффект называется локальным управлением, поскольку
перемещение управляющей точки будет влиять не на все сегменты кривой.
Рисунок 5.1 показывает, как управляющие точки влияют на форму кривой.
Рисунок 5.1 В-сплайн с управляющей точкой
Р4 в нескольких положениях.
В-сплайн интерполирует набор из р+1 управляющей точки:
и состоит из р-(n-1) сегментов кривой: .
Кроме того, мы можем определить общий параметр t, нежели отдельный
для каждого сегмента в интервале от 0 до 1. Таким образом, для каждого
сегмента кривой t будет
принадлежать интервалу .
Более того, на каждый сегмент
будет влиять ровно n управляющих точек: от
до .
Для каждого i >= n существует узел между
и для значения ti параметра
t. Для В-сплайна существует p-n-2 узлов. Отсюда исходит понятие
однородности: если узлы равномерно распределены на интервале от
0 до 1, т.е. , то говорят,
что В-сплайн равномерный. В противном случае – неравномерный. Стоит
также обратить внимание на факт, что эти определения касаются узлов,
возрастающих по значению, т.е. .
Теперь предположим, что координаты (x, y, z) точки кривой представлены
в виде рациональной дроби. В этом случае говорят, что В-сплайн рациональный,
иначе – нерациональный
Подводя итог, можно указать на существование 4 типов В-сплайнов:
- равномерные нерациональные;
- неравномерные нерациональные;
- равномерные рациональные;
- неравномерные рациональные.
Последний тип и представляет собой NURBS как наиболее общий случай
В-сплайнов.
Теперь рассмотрим математическое описание NURBS. NURBS кривая и
поверхность соответственно выражаются следующими двумя параметрическими
уравнениями:
(5.1)
(5.2)
где, Pi - управляющая точка, wi - ассоциированный с ней вес и
- базовая функция, определенная рекурсивно следующим образом:
(5.3)
Из формул видно, что точка кривой (поверхности) является средневзвешенных
управляющих точек, причем удельный вес каждой точки зависит от одного
(двух – для поверхности) параметра.
Как видно NURBS имеют явные преимущества по сравнению со всеми
описанными выше сплайнами. Следует также обратить внимание, что
сплайны Безье – это NURBS, у которого веса всех управляющих точек
равны 1 и который состоит из 1-го сплайнового сегмента.
Таким образом, NURBS имеет все преимущества Безье-сплайнов, а также
следующие:
- возможность локального управления кривизной сплайна;
- наличие весов для управляющих точек, делающих сплайны еще более
гибкими.
Единственный недостаток – это несколько более сложное математическое
описание NURBS по сравнению с Безье сплайнами, однако порядок этого
усложнения не высок.
Итак, NURBS предоставляет точность, гибкость и совместимость с
другими системами.
5.2 Аппроксимация функции одной переменной
В общем виде аппроксимацию функции F(t) можно представить следующим
образом:
(5.4)
где
gi – известные базовые функции
ai – неизвестные коэффициенты
Для простоты будем полагать, что параметр t лежит в пределах от
0 до 1.
Определение неизвестных сводится к заданию (p+1)-го ограничения
на значения функций или их производных для конкретных значений параметра
u и решению системы линейных алгебраических уравнений относительно
ai.
Для NURB сплайнов ситуация усложняется тем, что они имеют множество
неизвестных величин, которые можно менять в широких пределах. К
ним относятся:
1) количество управляющих точек p + 1 (p – порядок);
2) количество сегментов q;
3) n – степень базисных функций;
4) управляющие точки Pi;
5) значения весов wi;
6) значения узлов knoti.
Однако первые три величины связаны соотношением:
p + 1 = n + q.
(5.5)
Из (5.1) видно, что управляющие точки Pi являются определяющими,
поскольку только с помощью этих значений независимо от весовых коэффициентов
можно получить любое значение функции Q(t). Кроме того, использование
весов создает иррациональность при составлении системы алгебраических
уравнений, а также создает зависимость систем уравнений для отдельных
координат управляющих точек плоских и пространственных кривых NURBS
(для всех координат веса одинаковые). Эти проблемы легко устраняются,
если задать значения весов равными 1. Тогда NURBS-приближение для
функции одной переменной примет вид:
(5.6)
аналогичный (5.4).
В целях определенности в качестве ограничений будем использовать
ограничения на значения функции при заданных, а не ее производные,
параметрах со следующими оговорками для замкнутых кривых (F(0) =
F(1)):
1) Q'(0) = Q'(1), если F'(0) = F'(1)
2) Q'(0) = F'(0), если F'(0) <> F'(1)
Первое условие необходимо для сохранения непрерывности соединения
кривой, а второе только для обеспечения недостающего (n+1)-го ограничения.
Ограничения на значения функции примут вид:
(5.7)
Выбор и распределение ti должно определяться поведение функции.
Очевидно, что для уменьшения числа ti необходимо их расставить прежде
всего в точках резкого изменения функции F (экстремумах и точках
перегибов), т.е. для исходного набора ti имеем:
K = {ti} = {t: F'(t) = 0 v F''(t) = 0}
Задачи нахождения экстремумов и точек перегиба можно решить следующими
способами:
1) использование соответствующих численных методов непосредственно
(методы дихотомии, "золотого" сечения, наискорейшего спуска
и т.д.);
2) поэтапное вычисление:
найти производную в символьном виде, получив новую функцию (для
второй производной выполнить этот шаг два раза);
откомпилировать полученную функцию;
найти корни полученной функции на заданном интервале.
Второй способ является более приемлемым, поскольку:
численные методы решения задачи F'(t) = 0 не всегда дает все
решения;
задачу нахождения корней функции можно решать с использованием
символьного ее анализа – а, значит, более точно – если известны
характеристики базовых функций библиотеки (экстремумы, монотонность
и т.п.). Приведем методику получения корней функции, основанной
на методе "разделяй и властвуй".
Пусть
f(x), g(x) – функции с известными экстремумами;
f(ai) = 0, g(bj) = 0, где {ai} = A, {bj} = B.
Тогда:
для уравнений f(x) + g(x) = 0 и f(x) - g(x) = 0 корни можно
численно (например, методом Ньютона) на отрезках между экстремумами
обеих функций (можно показать, что на таких отрезках не более
одного корня);
для уравнения f(x) * g(x) = 0 {x} = A + B;
для уравнения f(x) / g(x) = 0 {x} = A;
для уравнения f(g(x)) = 0 {g(x)} = A, т.е. необходимо численно
решить |A| уравнений типа g(x) - a = 0.
Еще один момент, на который следует обратить внимание – это область
определения функции f (D(f)). D(f) необходимо учитывать в целях
надежности и контроля ошибок, которые может допустить пользователь
при составлении новых функций и использовании их для построения
геометрических объектов. В этом случае для аргумента функции f должно
выполняться: [0,1] Є D(f).
Нахождение D(f) может производится при составлении функции, исходя
из следующих очевидных утверждений:
для выражений f(x) + g(x), f(x) - g(x), f(x) * g(x) D = D(f)
* D(g);
для f(x) / g(x) D = D(f) * D(g) * {x: g(x) <> 0};
для f(g(x)) D = D(g) * {x: g(x) є D(f)}.
Узлы knoti NURB сплайнов играют роль точек соединения его сегментов
и как видно из (5.3) влияют на точность вычисления значений функций
между узлами: чем больше knot[[i+1]]-knot[[i]], тем точнее результат
вычисления на интервале [ knot[[i]], knot[[i+1]] ]. Поэтому узлы
можно распределить пропорционально расстоянию между точками (ti,
f(ti)) и (t[[i+1]], f(t[[i+1]])) графика функции f.
Поскольку возможен случай линейности функции f, то целесообразно
начинать процесс аппроксимации с NURB сплайна первой степени (n
= 1). Отсюда количество управляющих точек p+1 можно найти из (5.5):
p + 1 = n + q = n + |K|
Т.о. мы определили все неизвестные величины NURB. Далее, имея некоторую
допустимую погрешность error, для которой должно выполняться условие
аппроксимации
|f(t) – Q(t)| < error,
можно найти неизвестные Pi и степень n для функции Q(t) по алгоритму
2:
Алгоритма 4.2.
n = 1, |{Pi}| = p + 1;
решить систему уравнений (5.7) относительно Pi;
найти tm: dm = max|f(tm) – Q(tm)|, 0 < tm < 1;
если dm < error, то КОНЕЦ
иначе
K = K + {tm}
n = n + 1
p = p + 1
перейти к шагу 2
На шаге 3 алгоритма можно применить один из методов поиска максимума
функций.
При соблюдении всех вышеупомянутых условий данный алгоритм гарантирует
аппроксимацию функции с заданной точностью.
5.3 Аппроксимация функции двух переменных
По аналогии рассмотренной задачи аппроксимации в предыдущем пункте
сформулируем и рассмотрим пути ее решения для двумерного случая
(F(u,v)). NURB сплайн будет иметь вид:
Неизвестные величины:
1) количества управляющих точек pu + 1, pv + 1 (по направлениям
u и v соответственно);
2) количество сегментов qu, qv;
3) степени базисных функций nu, nv;
4) управляющие точки Pij;
5) значения весов wij = 1;
6) значения узлов knotij.
Область определения для функции нескольких переменных можно находить
аналогично с той разницей, что она должна определятся для каждой
переменной в отдельности.
Что касается нахождения экстремумов для определения узлов knotij,
то в общем случае эта задача может не иметь единственного решения,
поскольку количество экстремумов может оказаться бесконечно большим
(в случае линий экстремумов). Поэтому нужно определить критерий
оптимальности выбора количества и расположения точек графика функции,
соответствующих узлам knotij. Простейшим критерием количества может
быть выбор узлов только в точках, которые являются единственными
в сколь угодно малой их окрестности (на рис. 5.2 это точки 1 и 2).
Рисунок 5.2 Точки и линии экстремумов
функции
При аппроксимации по алгоритму, приведенном в предыдущем пункте
на шаге 3 потребуется использовать алгоритм поиска максимума функции
двух переменных. С увеличением узлов трудоемкость алгоритма будет
нелинейно возрастать, поскольку узлы появляются по обоим параметрам.
Поэтому построение параметрической поверхности в общем виде следует
по возможности избегать, используя различные процедурные методы
получения поверхности по кривым.
6 Синтез твердотельных моделей
Данный раздел не вносит никакой научной новизны в принципы построения
гранично заданных твердотельных моделей, однако он необходим для
выявления особенностей элементов, составляющих эти модели, поскольку
элементы синтезируются как аппроксимации произвольно заданных символьных
функций.
Вначале рассмотрим составляющие элементы и структуру твердотельной
модели, затем перейдем собственно к синтезу моделей по различным
наиболее распространенным их процедурным описаниям.
6.1 Структура твердотельной модели
Выбор структуры, или топологии, твердотельной модели определяется
способом дальнейшего использования синтезируемой модели. Для внешнего
использования (при экспорте в таких форматах обмена данными, как
dxf, iges, step и т.д.) топология определяется форматом файла, но
как правило это одна из реберных поверхностных модели. Для внутреннего
использования (приложениями, использующими данную библиотеку) наиболее
удобна топология "крылатого" представления (winged-edge
representation).
Как упоминалось в разделе 1 структурными элементами гранично заданные
модели являются вершины v, ребра e и грани f. Поскольку для представления
поверхности мы будем использовать NURBS поверхности, то, как показывает
практика [5] целесообразно использовать обрезанные
патчи как показано на рисунке 6.1.
Рисунок 6.1 Усеченный патч
Усекаемая часть патча задается цепочкой плоских кривых (c0-c7),
заданный в его области определения (по параметрам s, t). Эти цепочки
образуют циклы, направление обхода (по или против часовой стрелки)
которых определяет какая часть патча остается, а какая отсекается.
В некоторых системах [5] указанные плоские
кривые хранятся в двух видах: как алгебраическая и как параметрическая
сплайновая кривая. Алгебраическая кривая определяет точное ее уравнение
(прямая, дуга), а параметрическая – определяет аппроксимацию этой
кривой для единообразия при выполнении операций с моделью. В данной
работе аналогом алгебраической кривой является произвольная символьная
функция библиотеки. Поэтому двойственность представления будет иметь
смысл только для внутреннего использования.
Во многих системах кривые являются линиями пересечения патчей,
а вершины – точками пересечения кривых. Так, например, на рисунке
6.2 изображена твердотельная модель цилиндра. Патчи боковой его
грани являются полными (без усечения), а верхняя и нижняя грани
усеченны цепочками c8-c7-c6-c5 и c1-c2-c3-c4 соответственно.
Рисунок 6.2 Граничное представление твердотельной
модели цилиндра
В таблицах 4.1 и 4.2 для данной модели цилиндра приведены вершинное
и "крылатое" представления.
Таблица 6.1. Тверотельная модель цилиндра
в вершинном представлении
vertex
coordinates
edge
vertices
face
edges
v1
x1, y1, z1
e1
v1, v2
f1
e4, e9, e8, e10
v2
x2, y2, z2
e2
v2, v3
f2
e3, e12, e7, e9
v3
x3, y3, z3
e3
v3, v4
f3
e2, e11, e6, e12
v4
x4, y4, z4
e4
v1, v4
f4
e1, e10, e5, e11
v5
x5, y5, z5
e5
v6, v5
f5
e1, e2, e3, e4
v6
x6, y6, z6
e6
v7, v6
f6
e8, e7, e6, e5
v7
x7, y7, z7
e7
v8, v7
v8
x8, y8, z8
e8
v5, v8
e9
v4, v8
e10
v1, v5
e11
v2, v6
e12
v3, v7
Таблица 6.2. Твердотельная модель цилиндра
в "крылатом" представлении
edge
vstart
vend
ncw
nccw
vertex
coordinates
face
first edge
sign
v1
v1
v2
e2
e10
v1
x1, y1, z1
f1
e8
-
v2
v2
v3
e3
e11
v2
x2, y2, z2
f2
e3
-
v3
v3
v4
e4
e12
v3
x3, y3, z3
f3
e2
-
v4
v1
v4
e1
e9
v4
x4, y4, z4
f4
e1
-
v5
v6
v5
e8
e11
v5
x5, y5, z5
f5
e1
+
v6
v7
v6
e5
e12
v6
x6, y6, z6
f6
e5
+
v7
v8
v7
e6
e9
v7
x7, y7, z7
v8
v5
v8
e7
e10
v8
x8, y8, z8
v9
v4
v8
e8
e3
v10
v1
v5
e5
e4
v11
v2
v6
e6
e1
v12
v3
v7
e7
e2
6.2 Синтез твердого тела по процедурному
описанию
В современных системах геометрического моделирования сформировались
следующие способы синтеза твердотельных моделей:
за основу берется конкретный примитив (параллелепипед, цилиндр,
шар);
из других твердотельных моделей (операции булевых сочетаний,
модификация граней, фаски) и их частей (выдавливание, вращение
грани);
из кривых с помощью процедурных методов.
В данной работе имеет смысл использовать только последний способ.
Наиболее распространенными процедурными методами синтеза являются:
выдавливание плоской кривой по направлению;
вращение плоской кривой вокруг оси;
лофтинг интерполяция поверхности между плоскими замкнутыми кривыми
(профили, сечения, образующие);
протягивание плоской кривой (профиль, или образующая) вдоль
плоской или пространственной кривой (путь, или направляющая).
Рассмотрим принципы синтез твердотельных моделей на примере двух
первых, наиболее простых методах.
В каждом случае на кривые, участвующие в синтезе, налагаются определенные
ограничения во избежание получения топологически некорректных многосложных
моделей.
Тело выдавливания, как видно из рисунка 6.3, образуется из двух
усеченных плоских патчей (f1 и f2) и неусеченных патчей, составляющих
боковую поверхность тела. Отсюда очевидны два необходимых условия:
образующий контур c (цепочка кривых) не должен
иметь самопересечений;
образующий контур должен быть замкнут;
направление выдавливания d не должно быть параллельно
плоскости образующего контура c.
Рисунок 6.3 Тело выдавливания
Тело вращения можно построить двумя способами: путем полного обращения
образующей вокруг оси (рисунок 6.4а) и неполного обращения (рисунок
6.4б). В первом случае боковая поверхность может быть представлена
с помощью одного полного (неусеченного) патча и двух (верхний и
нижний) усеченных патчей. Во втором случае добавляется еще два усеченных
патча f3 и f4.
Рисунок 6.4 Тела вращения: а – полный оборот, б – неполный оборот
Поскольку при построении будут получены конические кривые (с1)
и поверхности (f2), то в целях точности целесообразно их построения
осуществлять по специальным алгоритмам с использованием весов NURBS
[6].
Для соблюдения правильности топологии должны выполняться следующие
условия:
- образующая не должна пересекать ось вращения;
- образующая не должна пересекать саму себя.
Пример использования произвольной параметрической поверхности для
построения твердотельной модели проиллюстрирован на рисунке 6.5.
Рисунок 6.5 Твердое тело как параллелепипед,
ограниченный параметрической поверхностью
Здесь твердотельная модель состоит из:
неусеченной поверхности f1 как NURBS-аппроксимация графика функции
двух переменных;
плоской прямоугольной неусеченной грани f2;
четырех боковых неусеченных граней f3-f6.
ВЫВОДЫ
В данной работе пранализированы и классифицированы
используемые в настоящее время модели геометрических моделей. Классификация
методов синтеза была проведена очень поверхностно, поскольку число
существующих систем, которые используют свои собственные методы
достаточно много, и они требуют отдельного изучения.
Подробно рассмотрены принципы реализации наращиваемой
библиотеки символьных функций и ее использование для аппроксимации
функции одной переменной. Проблема аппроксимация функции двух переменных
была рассмотрена неподробно и требует дополнительных исследований.
Освещены принципы синтеза твердотельных моделей
объектов по их процедурным описаниям с помощью кривых. Определены
основные условия возможности построения таких моделей.
S. Krishnan, M. Gopi, D. Manocha, M. Mine,
"Interactive Boundary Computation of Sculptured Solids",
Department of Computer Science University of North California
Chapel Hill, NC 27599-3175, 1997
Carole Blanc, Christophe Schlick, "More
Accurate Representation of Conics by NURBS ", LaBRI 1, 351
cours de la lib'eration, 33405 Talence (FRANCE), 1996
Кудря В.Н., Аппроксимация произвольных функций с помощью B-сплайнов, Сборник трудов магистрантов 2003 Донецкого национального технического университета. Выпуск 1. - Донецк, ДонНТУ Министерства образования и науки Украины, 2003.