Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Поверхности Безье и Кунса.doc
Скачиваний:
76
Добавлен:
01.05.2014
Размер:
325 Кб
Скачать

Министерство образования РФ

С АНКТ-ПЕТЕРБУРГСКИЙГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ»

Факультет КТИ

Кафедра МО ЭВМ

Реферат

по дисциплине «Компьютерная графика»

На тему

« Поверхность Кунса, Безье »

Выполнил: Куени Н.Л.

Факультет: КТИ

Группа: 1305

Руководитель:

Герасимова Т.В.

Санкт-Петербург

2005

Содержания

Содержания………………………………………………………………………..2

Поверхности Кунса………………………………………………………………..3

Формирование поверхностей на уровне МК…………………………………….4

Поверхности Безье………………………………………………………………………………6

Описание функий glMap2[fd], glMapGrid2[fd], glEvalMesh2…………………..7

Метод булевой суммы (поверхности Кунса)……………………………………9

Основные свойства рациональных поверхностей Безье………………………..10

Поверхности, построенные с использованием сплайнов………………..11

Примитивы описания поверхностей ( Open GL )……………………………….14

Синтаксис команд OpenGL……………………………………………………….15

Моделирование поверхностей свободной формы………………………………16

Методы создания поверхностей и методы деформации………………………..18

Методы Деформации поверхностей……………………………………………...18

Список литературы………………………………………………………………..21 Поверхности Кунса:

Из приведенной программы можно заметить, что прямая рi-рj "пробегает" своим концами по боковым  направляющим линиям, а точка К, в свою очередь, по этим линиям и зависит от образующих р00-р01 и р10-р11.  Причем, решение будет адекватным, если направляющие и образующие поменять местами.

Этим понятием воспользовался Кунс, при задании поверхности при  произвольно заданных 4-х линиях контура, сформулировав определение, что поверхность на 4-линиях контура определяется суммой двух линейчатых (заданных на противоположных линиях), минус косая плоскость общая для той и другой поверхности, т.е.

r(u,v)= r1(u,v)+r2(u,v) - rkp(u,v) где r1(u,v) - вектор на линейчатой поверхности u0-u1 r2(u,v) - вектор на линейчатая поверхности v0-v1 rkp(u,v) - вектор любой точки на косой плоскости.

Задание линейчатой поверхности по двум импортируемым линиям в системе "Вектор"  можно выполнить с помощью МК.

Аналогично можно создать вторую линейчатую поверхность и косую плоскость. Поверхность по 4-м линиям контура (поверхность Кунса) будет состоять из суммы двух линейчатых, минус косая плоскость.

Итак, поверхность Кунса (МК ) получается следующим образом:     +     -    = 

В системе "Вектор" можно создать МК, которая будет работать с полилиниям, заданными в структуре, что позволяет генерировать поверхность Кунса по любым заданным линиям (задавать линии непосредственно внутри системы, импортировать линии, (их преобразовывать). Однако импортируемые линии являются все равно плоскими. В этом случае предлагается другой подход формирования поверхностей - квадратичный: через 4 линии контура, и характеристическую точку и параметр управления. Можно пойти еще дальше - задание кубической поверхности, также через 4 линии контура и 4 характеристические точки. Характеристические точки,  в принципе тоже самое, что при задании в CorelDraw кривых Безье.

Формирование поверхностей на уровне мк

Формирование поверхности Кунса: <test.vbs> Import "E:\OXK\Poverh1.dxf",1 ' импортирование всех 4-х линий CurrObjNmb = 0                         ' делаем первую линию u0 - активной Set P00= Polyline.P (0) Set P01= Polyline.P (1) CurrObjNmb = 1                         ' делаем линию u1 - активной Set P10= Polyline.P (0) Set P11= Polyline.P (1)

' Формирования сетки сечений в направлении v

For v=0 To 1 Step 0.1  CurrObjNmb = 2       Set Pb= Polyline.P (v)  xb=Pb.x  yb=Pb.y  zb=Pb.z  For u=0 To 1 Step 0.1  Pov_Kuns u,v,x,y,z '     Ngpoint.s x,y,z  Otrezok.s xb,yb,zb,x,y,z  xb=x  yb=y  zb=z  Next Next  

' Формирования сетки сечений в направлении u

For u=0 To 1 Step 0.1  CurrObjNmb = 0       Set Pb= Polyline.P (u)  xb=Pb.x  yb=Pb.y  zb=Pb.z  For v=0 To 1 Step 0.1  Pov_Kuns u,v,x,y,z '      Ngpoint.s x,y,z  Otrezok.s xb,yb,zb,x,y,z  xb=x  yb=y  zb=z  Next Next     ' Вычисление вектора точки от u,v

Sub Pov_Kuns (u,v,x,y,z) ' Линейчатая u0-u1  CurrObjNmb = 0         ' делаем первую линию u0 - активной  Set pi = Polyline.P (u)  CurrObjNmb = 1          ' делаем первую линию u1 - активной  Set pj = Polyline.P (u)  xu=(1-v)*pi.x+v*pj.x  yu=(1-v)*pi.y+v*pj.y  zu=(1-v)*pi.z+v*pj.z ' Линейчатая v0-v1  CurrObjNmb = 2          ' делаем  v0 - активной  Set pi = Polyline.P (v)  CurrObjNmb = 3  Set pj = Polyline.P (v)  xv=(1-u)*pi.x+u*pj.x  yv=(1-u)*pi.y+u*pj.y  zv=(1-u)*pi.z+u*pj.z ' Косая плоскость   xi=(1-v)*p00.x+v*p10.x  yi=(1-v)*p00.y+v*p10.y  zi=(1-v)*p00.z+v*p10.z  xj=(1-v)*p01.x+v*p11.x  yj=(1-v)*p01.y+v*p11.y  zj=(1-v)*p01.z+v*p11.z  xkp=(1-u)*xi+u*xj  ykp=(1-u)*yi+u*yj  zkp=(1-u)*zi+u*zj ' суммарная  x=xv+xu-xkp  y=yv+yu-ykp  z=zv+zu-zkp End Sub

____________________________________________________________

Поверхности Безье:

Поверхности Безье - это один из способов визуализации гладких поверхностей.

Рис.1. Поверхность Безье.

Если у нас есть совокупность точек (прямоугольная сетка) в пространстве, то можно построить гладкую поверхность, которая будет "повторять" многогранную поверхность (Рис.1.)

Рис.2. Зеленые точки - это контрольные точки, по которым строится поверхность. Желтые линии их соединяют. Сетка белого цвета - это аппроксимирующая сетка поверхности Безье.

Обязательная часть:

  • Нужно создать одну поверхность Безье, заданную как минимум 16-ю контрольными точками, используя функции из библиотеки GL (glMap2[fd], glMapGrid2[fd], glEvalMesh2). За сложность и оригинальность поверхности будут добавляться баллы. За неинтересную поверхность быллы могут вычитаться. Источник света присутствует.