Научная статья на тему 'Алгоритм построения точек пересечения нелинейчатых поверхностей'

Алгоритм построения точек пересечения нелинейчатых поверхностей Текст научной статьи по специальности «Строительство и архитектура»

CC BY
864
86
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
НЕЛИНЕЙЧАТАЯ ПОВЕРХНОСТЬ / ПРЯМАЯ / СПЛАЙН / СЕТЬ / ТОЧКА ПЕРЕСЕЧЕНИЯ

Аннотация научной статьи по строительству и архитектуре, автор научной работы — Замятин Александр Витальевич

В статье описан алгоритм построения точки пересечения прямой с нелинейчатой поверхностью. Алгоритм реализован в среде ObjectARX для AutoCAD. Это дают возможность использовать в качестве входных данных объекты автоматизированной системы AutoCADи применять при проектировании полученные результаты. Алгоритм может быть использован в качестве самостоятельной программы или являться модулем более сложного программного комплекса.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по строительству и архитектуре , автор научной работы — Замятин Александр Витальевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Алгоритм построения точек пересечения нелинейчатых поверхностей»

Алгоритм построения точек пересечения нелинейчатых поверхностей с прямыми в среде ObjectARX для AutoCAD

А.В. Замятин РГСУ, г. Ростов-на-Дону

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

В данной статье рассмотрены алгоритм построения точек пересечения прямых с нелинейчатыми поверхностями и касательных к поверхностям в найденных точках.

В настоящее время проектирование зданий и сооружений выполняется с использованием автоматизированных систем. Поэтому представляет интерес разработка соответствующих алгоритмов в среде используемой при проектировании автоматизированной системы. Это позволяет значительно облегчить их разработку, так как дает возможность использовать в алгоритмах ресурсы автоматизированной системы, и делает более удобным их практическое применение, в связи с использованием стандартного интерфейса данной системы.

Приведенные в статье алгоритмы разрабатывались в среде ObjectARX для AutoCAD 2007 [1]. Технология программирования Object ARX позволяет в полной мере использовать алгоритмические возможности среды программирования Visual C++ [2] и графические возможности автоматизированной системы AutoCAD [3].

Пусть поверхность задана сетью, представляющей собой два пересекающихся семейства сплайнов mi и n (рис. 1). Сплайны, определяющие сеть, являются объектами класса AcDbSpline [1] (здесь и далее указаны классы системы AutoCAD). Определяющие точки сплайнов обоих семейств находятся в узлах сети, на рис. 1 они обозначены через Mj. Количество определяющих точек на сплайнах каждого семейства одинаково. Прямая

Рис. 1. Заданные поверхность и прямая

Д точку пересечения которой с поверхностью надо определить, задана точками Ll и L2.

Первым этапом алгоритма (пункт 1 на рис. 2) является выполнение функции ListSpl,

определяющей необходимые для дальнейших расчетов, параметры заданной поверхности. Начальные данные функция извлекает из базы данных чертежа системы AutoCAD. К параметрам, определяемым функцией относятся: координаты узловых точек сети и первые производные в этих точках к сплайнам mi и nj. Координаты узловых точек Mj известны, производные в этих точках находятся с помощью стандартной функции GetFirstDeriv. Параметры поверхности хранятся в списке, каждый элемент которого содержит следующие переменные:

• pts, тип AcGePoint3dArray -динамический массив точек трехмерного пространства, содержит координаты точек М, взятые по сплайну тг-;

• vsm, тип AcGeVector3dArray -динамический массив векторов трехмерного пространства, содержит производные в точках Mj к сплайну тг-;

• vsn, тип AcGeVector3dArray, содержит производные в точках Mj к сплайну и,;

• l, содержит указатель на следующий элемент списка, если данный элемент является последним, то значение этой переменной равно NULL.

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

На следующем этапе алгоритма функция Pr_t_per производит приближенное вычисление точки пересечения прямой с поверхностью (пункт 2 на рис.

2). Целью данного этапа является определение пространственного четырехугольника поверхности, в пределах которого находится точка пересечения. Входными данными является указатель на начальный элемент списка параметров поверхности, созданный предыдущей функцией.

Для каждого пространственного четырехугольника поверхности, граничные отрезки сплайнов Mi, Mij+i, Mij+i M1+Ij+I, Mi+1J+1 Ml+lj, M+j Ml} заменяем хордами и проводим диагональ Mi+1j Mij+1 (рис. 3). Аппроксимируем четырехугольник поверхности двумя треугольными отсеками плоскости AM, Mij+1Mi+1j+1 Mi+ij и A Mj+1 Mi+1+1j Mi+1jMi+1j

Необходимо построить точки пересечения заданной прямой с плоскостью каждого треугольника, для этого решаем следующую систему линейных уравнений Ax + By + Cz + D = 0;

где

Рис. 2. Блок-схема алгоритма

_У-Уг_ z - zi

A = y4 - y3 Z4 - Z3 , B = - x4 - x3 z4 - z3 , c = X4 - X3 y4 - y3

y5 - y3 Z5 - Z3 3 N - 5 N 5-T - 5-T 3 y3 - 5 y5 5-T - 5-T

X2 X1 y 2 yi

Z2- Z1

Mj+i

Рис. 4. Аппроксимация отсека поверхности

& — — АХ3 — ВУ3 — Czз,

х}, у], zl и Х2, У2, Z2 координаты точек Ь] и Ь2, определяющих прямую I, Х3, Уз, Z3, Х4, у4, z4, х5, у5, z5 координаты точек, определяющих соответствующий треугольный отсек плоскости. При решении этой системы получим координаты точки пересечения прямой с плоскостью, обозначим их через Хп,

уп-, Zп.

Определим, попадает ли найденная точка пересечения в пределы треугольного отсека. Приведем плоскость треугольника в положение параллельное одной из координатных плоскостей, например х^.

Найдем направляющие косинусы вектора нормали плоскости:

AB

C

cos аХ = ■

I------------ ; C0S^y ' I----------- ; COS^Z I----------- .

л/л2 + В2 + С2 л/л2 + В2 + С2 л1л2 + В2 + С2

Угол, составляемый горизонтальной проекцией вектора нормали плоскости с осью Оу равен:

у = arctg

( \ cos а

V cos ау у

п

Определим угол, составляемый вектором нормали с плоскостью хОу: 3 = — — аг.

Повернем систему координат вокруг оси Ог на угол у. В новой системе координат вектор нормали плоскости будет лежать в плоскости уОг. Матрица этого преобразования имеет вид:

(

АУ) =

cos у sin у

— sin у cos у 0

0

0

1

V ~ у

Следующим поворотом системы координат вокруг оси Ох на угол 3 приведем ось Оу в положение, параллельное нормали плоскости. Матрица этого преобразования имеет вид:

(10 0 ^

В(З) =

0 cosЗ — sin З v0 sin З cos З у

В(З)

Получим матрицу суммарного преобразования Г(у,З), умножив матрицу А(у) на

Г(у, З) = А(у) хВ(З) =

cos у

sin у

- sin ycosS cosycosS - sinS

- sin ysinS cos^sinS cosS

Координаты точки пересечения и точек, определяющих треугольный отсек, в новой системе координат вычислим по следующему соотношению:

( y z)=(x y z)хГ(/,$) .

Проведем прямую z = !п и определим точки ее пересечения со сторонами треугольника. Если число точек пересечения с абсциссой меньше Хп , равно 0 или 2, то точка находится вне треугольника, если равно 1, то она попадает в треугольный отсек плоскости.

Проделав, описанные выше действия для каждого четырехугольника заданной поверхности, получим приближенные значения координат точек ее пересечения с прямой.

Функции Рг^_рег возвращает динамический массив точек pts (тип ЛсОеРоШЗёЛггау) содержащий точки пересечения и два динамических массива целых чисел is и js (тип ЛсОеЫЫггау) содержащие индексы г и ] определяющие четырехугольник поверхности, в котором находится точка пересечения.

Следующая функция Ы8р1 (пункт 3 на рис. 2), строит сплайны вокруг четырехугольника поверхности, в который попала точка пересечения (рис. 4). Обозначим их через т’к и п’1. Эти сплайны строятся по начальной и конечной точкам и значениям производных в них. Для большей точности берутся по два сплайна с каждой стороны отсека. Они являются частями исходных сплайнов, определяющих поверхность и применяются для ускорения процесса вычисления, так как исходные сплайны имеют значительное число определяющих точек, следовательно, на работу с ними будет затрачено много времени. В качестве входных параметров функция использует указатель на список, содержащий параметры поверхности, индексы г и j определяющие четырехугольник поверхности, в котором находится точка пересечения. Функция возвращает два указателя на массивы, содержащие т’к и п’1 (объекты типа ЛсВЪ$>р11пё).

Далее (пункт 4 на рис.2) функция Ы8р1 строит через средние точки т’к и п’1 два сплайна т и п (рис. 4) и аналогично функции Рг^_рег определяет в каком, из четырех полученных четырехугольников, находится точка пересечения и рассчитывает расстояние ё до ближайшей точки этого четырехугольника.

В пункте 5 алгоритма (рис. 2) производится проверка: если ё>е где е заданная точность вычисления, то процесс повторяется для того четырехугольника, в котором находится точка пересечения, если заданная точность достигнута, то по следующей формуле (пункт 6 на рис. 2) вычисляется вектор нормали к поверхности

N — ги х Г, где

ги и Г направляющие векторы касательных в точке пересечения, координаты которых

равны первым производным к сплайнам тг и щ.

Приведенный алгоритм может быть использован самостоятельно в виде встроенной команды системы ЛЫоСЛБ, или входить, в качестве модуля, в более сложные программные комплексы, в тех задачах, где необходимо находить точки пересечения прямых с поверхностями и вычислять в них векторы нормалей.

Литература

1. Полищук Н.Н. AutoCAD Разработка приложений, настройка и адаптация. БХВ -Петербург. Санкт-Петербург, 200б.

2. Секунов Н.Ю. Visual C++ Визуальная среда программирования. Bhv. Москва, 1999.

3. Полищук Н.Н. AutoCAD 2007. БХВ - Петербург. Санкт-Петербург, 2008.

i Надоели баннеры? Вы всегда можете отключить рекламу.