ISSN 0321-2653 ИЗВЕСТИЯ ВУЗОВ. СЕВЕРО-КАВКАЗСКИЙ РЕГИОН.
ТЕХНИЧЕСКИЕ НАУКИ. 2010. № 6
УДК 515.681.3
АЛГОРИТМЫ ВИЗУАЛИЗАЦИИ НЕЛИНЕЙЧАТЫХ ПОВЕРХНОСТЕЙ © 2010 г. А.В. Замятин, В.В. Сухомлинова
Ростовский государственный Rostov State Building
строительный университет University
Рассмотрены вопросы визуализации нелинейчатых поверхностей, не имеющих аналитических описаний. Разработаны алгоритмы визуализации поверхностей сетью и полигональной моделью. Такое представление поверхностей делает их более наглядными и удобными в применении.
Ключевые слова: нелинейчатая поверхность; пространственная линия; сплайн, сеть; грань.
In article visualisation questions not the linear surfaces which do not have analytical descriptions are considered. Algorithms of visualisation of surfaces are developed by a mesh and polygonal model. Such representation of surfaces does their more evident and convenient in application.
Keywords: not linear surface; spatial line; spline, mesh; side.
На практике часто приходится работать с нелинейчатыми поверхностями, не имеющими аналитических описаний. При решении ряда прикладных задач для таких поверхностей необходимо представлять эти поверхности в виде различных моделей. К этим задачам относятся визуализация их, построение разверток, построение точек пересечения с плоскостями и с другими поверхностями и т.д. В данной статье рассмотрены вопросы визуализации.
Наибольший эффект достигается, если алгоритмы решения перечисленных выше прикладных задач создаются в среде графической системы. Это значительно облегчает их разработку, так как есть возможность использовать в алгоритмах ресурсы графической системы, и делает более удобным их практическое применение, в связи с использованием стандартного интерфейса данной системы.
Приведенные в статье алгоритмы разрабатывались в среде ObjectABX для AutoCAD 2007 [1, 2]. Технология программирования Object ABX позволяет в полной мере использовать алгоритмические возможности среды программирования Visual C++ [3] и графические возможности системы AutoCAD [4].
Пусть поверхность задана в виде линейчатого каркаса. Линейчатый каркас представляет собой набор сплайнов, размещенный на уровне 0 (рис. 1).
Рис. 1. Поверхность, заданная сплайнами
Приведенный на рис. 1 способ задания поверхности удобен для применения, так как в системе AutoCAD есть команда « spline», позволяющая вводить их в чертеж, но приведенная поверхность имеет недоста-
точную наглядность. Выполним визуализацию этой поверхности моделью в виде сети, состоящей из n линий семейства u и m линий семейства v. Оба семейства линий изображаются сплайнами, точки, определяющие сплайны семейств u и v, совпадают. Доступ к базе рисунка осуществляется через итераторы. Промежуточные данные хранятся в списках с использованием шаблонов. Такие списки позволяют хранить данные любого типа [5].
Рассмотрим алгоритм функции Mesh, которая строит заданное число n сплайнов, пересекающих имеющиеся сплайны в базе рисунка на заданном уровне. В качестве входных параметров функция использует имя уровня с исходными сплайнами, хранящееся в строковой переменной LName 1, имя уровня для записи полученных сплайнов - LName2 и целое число n. Блок-схема функции приведена на рис. 2.
1. Открыть базу данных рисунка.
2. Создать итератор для доступа к объектам базы рисунка.
3. Установить итератор на начальный объект базы данных.
4. Условие: если достигнут конец базы, то вычисление ведется по ветви «Да», иначе по ветви «Нет».
5. Извлечь сплайн с уровня LName 1.
6. Поделить сплайн на n частей и полученный массив точек записать в список. Указатель на первый элемент списка присвоить переменной h.
7. Перевести итератор на следующий объект базы рисунка.
8. Присвоить i = 0.
9. Условие: если i < n, то вычисление ведется по ветви «Да», иначе по ветви «Нет».
10. Присвоить l = h.
11. Условие: если достигнут конец списка, то вычисление ведется по ветви «Да», иначе по ветви «Нет».
12. Полученный массив точек из элемента списка с указателем l записать в pts.
13. В массив точек pts1 добавить i-ю точку из массива pts.
14. l присвоить указатель на следующий элемент списка.
ISSN 0321-2653 ИЗВЕСТИЯ В УЗОВ. СЕВЕРО-КАВКАЗСКИМ РЕГИОН.
ТЕХНИЧЕСКИЕ НАУКИ. 2010. № 6
15. Изобразить сплайн на уровне LName1., проходящий через точки хранящиеся в массиве pts1.
16. Значение переменной i увеличить на 1.
17. Закрыть базу рисунка.
Рис. 2. Блок-схема функции Mesh
Для создания сети вызывается функция Mesh с именем уровня 0, на котором находятся сплайны, задающие исходную поверхность, и получаем сплайны семейства v на уровне с именем 1. Затем снова вызываем данную функцию с именем 1 и получаем сплайны второго семейства.
Пример работы функции приведен на рис. 3. Еще более наглядной моделью поверхности является полигональная модель. Она представляет поверхность в виде плоских треугольных отсеков (граней). Модели такого типа позволяют решать задачи освещенности поверхностей, собственных и падающих теней, удаления невидимых линий. Следующая функция Face, по построенной предыдущей функцией сети, создает полигональную модель поверхности. Она также использует объекты базы рисунка по тем же принципам, что и функции Mesh.
Рис. 3. Поверхность, заданная сетью Пример работы функции Face приведен на рис. 4.
Рис. 4. Полигональная модель поверхности
Описанные в данной статье функции встроены в стандартный интерфейс системы AutoCAD. Кроме того что они дают наиболее полное графическое представление нелинейчатых поверхностей, результаты их работы могут быть использованы в качестве входных параметров для решения других прикладных задач.
Литература
1. Сайт www.objectarx.com
2. Полищук Н.Н. AutoCAD. Разработка приложений, настройка и адаптация. БХВ - Петербург. СПб., 2006.
3. Полищук Н.Н. AutoCAD 2007. БХВ - Петербург. СПб., 2008.
4. Секунов Н.Ю. Visual C++ Визуальная среда программирования. Bhv. М., 1999.
5. Труб И.И. Моделирование на С++. Питер. СПб., 2006.
Поступила в редакцию 30 сентября 2010 г.
Замятин Александр Витальевич - канд. техн. наук, доцент, кафедра «Начертательная геометрия и черчение», Ростовский государственный строительный университет. Тел. (863)263-57-31, 227-75-90. E-mail: [email protected]
Сухомлинова Виктория Викторовна - ассистент, кафедра «Начертательная геометрия и черчение», Ростовский государственный строительный университет. Тел. (863)263-57-31, 227-75-90. E-mail: [email protected]
Zamyatin Aleksandr Vitalievich - Candidate of Technical Sciences, assistant professor, department «Descriptive Geometry and Sketching», Rostov State Building University. Ph. (863)263-57-31, 227-75-90. E-mail: [email protected]
Suhomlinova Victoria Viktorovna - assistant, department «Descriptive Geometry and Sketching», Rostov State Building University. Ph. (863)263-57-31, 227-75-90. E-mail: [email protected]