Министерство образования РФ
С
АНКТ-ПЕТЕРБУРГСКИЙГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ»
Факультет КТИ
Кафедра МО ЭВМ
Реферат
по дисциплине «Компьютерная графика»
На тему
« Поверхность Кунса, Безье »
Выполнил: Куени Н.Л.
Факультет: КТИ
Группа: 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). За сложность и оригинальность поверхности будут добавляться баллы. За неинтересную поверхность быллы могут вычитаться. Источник света присутствует.
