Билинейные поверхности

Автор работы: Пользователь скрыл имя, 08 Апреля 2013 в 21:00, курсовая работа

Краткое описание

Область прикладной математики, называемая геометрическим моделированием (компьютерная геометрия, Computer Aided Geometrie Design, CAGD), активно развивается с середины 20-го века, В этой области изучаются способы построения кривых, поверхностей и тел, а также компьютерная реализация различных операций, производимых с ними. Геометрическому моделированию посвящены несколько книг и монографий. Поверхность в геометрическом моделировании определяется вектор-функцией от двух параметров, заданных на прямоугольной или треугольной области.

Содержание работы

Введение…………………………………………………………………….….….…3
1. Определение билинейной поверхности……………………………….……......4
2. Построение билинейной поверхности………………………………….…….…6
2. 1. Билинейная интерполяция. Единичный квадрат…………………..……....6
2. 2. Билинейная поверхность в объектном пространстве…………….….…….8
3. Поверхность Кунса……………………………………………………………....11
4. Машинное моделирование поверхности……………………………………....14
4. 1. Историческая справка…………………………………………………........14
4. 2. Построение билинейной поверхности на компьютере…………………...16
4. 2. 1. Алгоритмы построения участка билинейной поверхности и
поверхности Кунса…………………………………………………..23
Заключение………………………………………………………………………….25
Список использованной литературы………………………………………...……26

Содержимое работы - 1 файл

1.doc

— 813.50 Кб (Скачать файл)

Легко проверить, что вектор r(u, 0) описывает участок кривой а(tа), вектор r(u, 1) описывает участок кривой d(td), вектор r(0, v) описывает участок кри- вой b(tb), вектор г(1, v) описывает участок кривой c(tc). Совсем не обязательно, чтобы tk min было меньше tk max, k = a, b, с, d. Для того чтобы предыдущая формула легче воспринималась, переобозначим кривые и точки, входящие в структуру данных описываемой ею поверхности: кривую а(tа) обозначим через r(u, 0), кривую d(td) обозначим через r(u, 1), кривую b(tb) обозначим через r(0, v), кривую c(tc) обозначим через г(1, v), точку p1обозначим через г(0, 0), точку р2 обозначим через г(1, 0), точку р3 обозначим через г(0, 1), точку р4 обозначим через г(1, 1), и будем считать, что для кривых выполнен переход к параметрам u и v соответствии с предыдущей формулой. Для коэффициентов, с которыми граничные кривые входят эту формулу, введем обозначение

 

В результате векторная функция

r(u, v) = (1 - v)a(u) + vd(u) + (1 - u)(p1(l - v) + p3v + u(p2(1-v) +

+ p4v – (1 - u)(1 - v)p1- u(1 - v)p2 –(1 - u)vp3 – uvp4 = (1 - v)a(u) + vd(u) +

+ (1 - u)b(v) + uc(v) –  (1 - u)(1 - v)p1 – u(1 - v)p2 – (1 - u)vp3 – uvp4,

0 ≤ u ≤ 1, 0 ≤ v ≤ 1.

примет вид

Поверхность построена  на четырех граничных кривых, коэффициенты при которых являются линейными  функциями параметров u и v. Такое линейное объединение четырех кривых называется линейной поверхностью Кунса. Функции ai(u) и aj(v) называются функциями смещения. Если граничные линии являются, отрезками прямых линий, то формула выше даст билинейную поверхность.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Машинное моделирование поверхности.

4. 1. Историческая  справка.

Хорошо известно, что научные исследования в области трехмерного геометрического моделирования начались вовсе не в рамках CAD(проектирования с помощью компьютера), а со стороны CAM (производства с помощью компьютера). Изобретение в начале 1950-х гг. станка с ЧПУ (числовым программным управлением) в MIT (Массачусетском технологическом институте, США) породило потребность в цифровой модели детали, необходимой для создания управляющей программы для станка. Изучением принципов моделирования трехмерных объектов занялись различные исследовательские группы, а основными заказчиками этих исследований стали крупнейшие предприятия аэрокосмической и автомобильной отраслей промышленности.

Фото1.  Citroёn DS

Можно посмотреть на фотографию модели Citroёn DS (годы выпуска 1955-1975), ставшей автомобильной иконой на все времена. Точное изготовление таких сложных «скульптурных» поверхностей требует использования продвинутого математического аппарата, и совершенно не случайно одно из первых исследований в этой области было проведено французским математиком Полем де Кастельжо (Paul de Casteljau), работавшим на Citroёn. Он предложил способ построения гладкой поверхности по набору контрольных точек, задающих ее геометрические свойства.

Результаты  его работы были опубликованы только в 1974 г., но само исследование было проведено  еще в 1959 г., что дает основания  именно его считать автором кривых и поверхностей, получивших имя совсем другого француза – Пьера Безье (Pierre Bézier).

Как можно конструктивно (не в виде абстрактного алгебраического  уравнения, а путем геометрических построений) задать гладкую поверхность, обладающую требуемой эстетической формой? Простейшим способом задания  является указание четырех точек в трехмерном пространстве, которые формируют так называемый билинейный лоскут (bilinear patch). (Рис. 1.)

Рис. 1. Билинейный лоскут.

Билинейный  лоскут является разновидностью линейчатой поверхности (ruled surface), которая целиком  состоит из отрезков, соединяющих две кривые. (Рис. 2.)

Рис. 2. Линейчатая поверхность.

 

Стивен Кунс (Steven Coons), профессор MIT, обобщил такой  способ задания на поверхности с  двойной кривизной, получившие его  имя (Coons patch)(Рис. 3.)

Рис. 3. Лоскут Кунса.

Опубликованный им в 1967 г. препринт “Surfaces for Computer-Aided Design in Space Form” [Coons 1967] получил широкую известность как «Малая красная книга». Предложенный им аппарат граничных кривых и функций сопряжения дал основу для всех дальнейших исследований в этой области. Именно Кунс первым из исследователей предложил использовать рациональные полиномы для моделирования конических сечений.

 

4. 2. Построение билинейной поверхности на компьютере.

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

Функция, которая  вычисляет произвольную точку поверхности, определяется по формулам линейной интерполяции: 
 
(1) Q(U,V) = P(0,0)(1-U)(1-V) + P(0,1)(1-U)V + P(1,0)U(1-V) + P(1,1)UV 
 
Для для углов единичного квадрата получаемые значения совпадают с исходными точками 
 
Q(0,0) = P(0,0) 
Q(0,1) = P(0,1) 
Q(1,0) = P(1,0) 
Q(1,1) = P(1,1), 
а точка в центре квадрата (U=0.5,V=0.5) вычисляется равновзвешиванием угловых точек 
 
(2) Q(0.5,0.5) = [P(0,0) + P(0,1) + P(1,0) + P(1,1)] / 4. 
 
Точки поверхности с фиксированным параметром U или V лежат на одной прямой, поэтому участок билинейной поверхности можно построить отрезками прямых (рис. 1). 
 
 
Рис. 1. Билинейный лоскут. 

Для выполнения работы требуется,  к примеру, интерфейс GREEN,  шаблон задания GRA206.( вспомогательные элементы управления, предназначенные для выполнения практических работ при изучении математических основ машинной графики). 

 
Работа выполняется в два этапа. На первом этапе строится участок  поверхности, заданной в виде функции  двух переменных Z = F(X,Y), вычислением Z в  узлах сетки, заданной на плоскости XY, и соединении полученных точек поверхности отрезками прямых. Для функции 
 
(3) Z = cos(x2 + y2) / (x2 + y2 + 1) 
 
на участке (-2,-2)..(2,2) и числе ячеек вдоль осей X и Y, равном 12, поверхность имеет вид, приведенный на рис. 1. 
 

 

Рис. 2. 
 
В шаблоне функция поверхности - Surf(X,Y). Построение поверхности заключается в вычислении всех точек сетки и добавлении векторов положения этих точек в матрицу M1. Далее производится вычисление ребер, видовое преобразование матрицы M1 в матрицу M2, и вывод ребер на устройство вывода GRAD. 
 
На втором этапе каждая из ячеек полученной сетки интерполируется с получением дополнительных внутренних точек (и линий). 
 
Все действия выполняются в процедуре Draw. В начале этой процедуры считываются параметры поверхности (координаты двух угловых точек X1, X2, Y1, Y2, задающих область построения поверхности, число ячеек поверхности N, число ячеек интерполяции M, углы точки наблюдения (ZAngle, XYAngle) и масштаб изображения Zoom) и выясняется, строится поверхность с интерполированием ячеек или без него, в зависимости от значения флажка "Интерполяция". Значение этого флажка считывается в логическую переменную S.

Построение  сетки поверхности

Выполняется при  значении флага S, равном False. Прежде всего  определяется число точек сетки  и значение присваивается переменной L: 
 
L = N + 1 
Далее строится матрица M1 размером L * L при помощи метода Rebuild: 
 
M1.Rebuild L * L 
 
Далее нужно понять, как соотносятся точки в линейной матрице с точками квадратной сетки. Предположим, что точке сетки сопоставлены два номера I и J. Номер I задает положение точки сетки вдоль оси Y, а номер J - вдоль оси X. Значения номеров I и J лежат в диапазоне от 0 до N. Если принять нумерацию точек сетки в матрице в соответствии с рисунком: 
 

Рис. 3. 
 
то номер K узла сетки в матрице можно вычислить по формуле 
 
(4) K = 1 + J + I * L, 
 
а значения X и Y узла сетки определяются по формулам линейной интерполяции: 
 
(5) Y = Y1 * (1 - Ty) + Y2 * Ty 
(8) X = X1 * (1 - Tx) + X2 * Tx; 
 
Здесь Tx и Ty - параметры интерполяции по осям X и Y: 
 
(6) Tx = J / N 
(7) Ty = I / N 
 
В целом алгоритм вычисления точек представляет собой двухкратный цикл:

 

Изменяя I от 0 до N

Вычислить Y

Изменяя J от 0 до N

Вычислить X

Вычислить K

Записать X, Y, Z точки K в матрицу M1

Следующее J

Следующее I

 
Для записи точки в ячейку следует использовать метод SetValues вектора: 
 
M1(K).SetValues X, Y, Surf(X, Y)

Вычисление  ребер

Эта работа с  полным правом может называться работой  о вычислении индексов. Обратимся  к рис. 4. На нем показана сетка  из 16 ячеек, параметр L = 5, по горизонтали обозначены значения J, по вертикали I: 
 

Рис. 4. 
 
Предположим, что I = 1 и J изменяется от 0 до L - 1 = 4. Можно вычислить точки 6-7-8-9-10: 
 
(9) K = 1 + J + I * L, 
 
и добавить L вертикальных ребер (1-6), (2-7), (3-8), (4-9), (5-10), то есть ребро задается номерами вершин (K-L, K). 
 
С другой стороны, можно вычислить точки 2-7-12-17-22 по формуле 
 
(10) K = 1 + I + J * L, 
 
и добавить L горизонтальных ребер (1-2), (6-7), (11-12), (16-17), (21-22), то есть задать ребра номерами вершин (K-1, K). 
 
Изменяя теперь I от 1 до L - 1, мы получим все ребра поверхности. В целом алгоритм вычисления ребер представляет собой двухкратный цикл:

 

Положить N = L - 1

Изменяя I от 1 до N

Изменяя J от 0 до N

Вычислить K по формуле (9)

Добавить ребро (K - L, K)

Вычислить K по формуле (10)

Добавить ребро (K - 1, K)

Следующее J

Следующее I

 
Для лобавления ребра следует использовать методы Add и SetDirect, например: 
 
E.Add.SetDirect K - L, K 

Интерполяция  в ячейке сетки

Заключительная  часть работы состоит в определении  функции Bilinear, которая вычисляет точку поверхности по формуле (1) 
 
Q(U,V) = P(0,0)(1-U)(1-V) + P(0,1)(1-U)V + P(1,0)U(1-V) + P(1,1)UV, 
 
и использовании этой функции для интерполяции внутри ячейки сетки. 
 
Функция Bilinear имеет три аргумента: параметры точки U и V и матрицу из четырех угловых точек ячейки сетки. Для вычисления вектора положения точки разложим формулу (1) на 4 слагаемых и для каждого из них вычислим вектор. Далее просуммируем эти векторы и получим требуетмый результат. 
 
Объявим в функции Bilinear 4 переменных типа GREENVector и вычислим их, например, так: 
 
Set D1 = M(1).Copy.MulBy(1 - U).MulBy(1 - V) 
 
Результат возвращается как значение функции: 
 
Set Bilinear = D1.Summ(D2.Summ(D3.Summ(D4))) 
 
При интерполяции число точек поверхности больше за счет дополнительных внутренних точек ячейки. Вычисления точек производятся при значение флага S, равном True. 
 
На каждой итерации определяется ячейка поверхности, которая интерполируется по формуле (1) M интервалами по U и V координатным осям.  
 
Координаты углов ячейки вычисляются в переменные XA, YA, XB, YB и заносятся в дополнительную матрицу MP с вычислением координаты Z при помощи функции поверхности Surf. Координаты вычисляются по формулам: 
 
(12) YA = Y1 * (1 - Ty) + Y2 * Ty, при Ty = (I - 1) / N 
(13) YB = Y1 * (1 - Ty) + Y2 * Ty, при Ty = I / N 
(14) XA = X1 * (1 - Tx) + X2 * Tx, при Tx = (J - 1) / N 
(15) XB = X1 * (1 - Tx) + X2 * Tx, при Tx = J / N 
 
Здесь учитывается тот факт, что индексы I и J изменяются от 1 до N с тем, чтобы получить правильное число ячеек. 
 
Далее для вычисления интерполяционных точек (которые и являются точками поверхности) используются два дополнительных цикла по переменным A и B, представляющих собой индексы параметров U и V. С их помощью вычисляются текущие значения параметров Tu и Tv: 
 
(16) Tv = A / M 
(17) Tu = B / M 
 
Вычисление точек в значительной мере повторяет код, который был разработан на первом этапе, поэтому его можно скопировать и изменить в соответствии с алгоритмом:

Положить L = N * M + 1

Перестроить матрицу M1 размерностью L * L

Изменяя I от 1 до N

Вычислить YA по формуле (12)

Вычислить YB по формуле (13)

Изменяя J от 1 до N

Вычислить XA по формуле (14)

Вычислить XB по формуле (15)

Записать вектор MP(1) с координатами XA, YA, Surf(XA,YA)

Записать вектор MP(2) с координатами XA, YB, Surf(XA,YB)

Записать вектор MP(3) с координатами XB, YA, Surf(XB,YA)

Записать вектор MP(4) с координатами XB, YB, Surf(XB,YB)

Изменяя A от 0 до M

Вычислить Tv по формуле (16)

Изменяя B от 0 до M

Вычислить Tu по формуле (17)

Вычислить индекс точки K по формуле (18)

Вычислить точку P при помощи функции Bilinear

Записать вектор M1(K) с координатами P.X, P.Y, P.Z

Следующее B

Следующее A

Следующее J

Следующее I

 
Вычисление индекса K точки здесь  несколько сложнее и производится в соответствии с нумерацией точек, показанной на рис. 5. 1, 2 в 3-4 четвертях- J, 1 напротив B, 2 в 1 и 4 четвертях - индекс I, по горизонтали - A и по вертикали - B. 
 

Рис. 5.

(N = 2, M = 2, L = 5) 
 
Несложно установить, что вычислить черный номер точки K можно по формуле 
 
(18) K = 1 + (J - 1) * M + B + L * ((I - 1) * M + A). 
 
Замечение: некоторые граничные точки ячеек вычисляются дважды. 

 

4. 2. 1. Алгоритмы построения участка билинейной поверхности и поверхности Кунса.

 

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

приведен в виде подпрограммы на языке бейсик

Рис.1. Алгоритм построения участка билинейной поверхности.

Также алгоритм, используемый для построения линейной поверхности Кунса, описываемой  уравнением

При этом предполагается, что граничная кривая может быть описана равномерно расположенными (по значению параметра) точками.

Рис. 2. Алгоритм построения поверхности Кунса.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение.

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

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

Информация о работе Билинейные поверхности