close

Вход

Забыли?

вход по аккаунту

?

Что такoе .NET?

код для вставкиСкачать
Кривые и поверхности
высших порядков
Лекция 12
Астана 2004
Кривые высших порядков: постановка задачи
Задача: построить параметрическую кривую “повторяющую”
заданную ломаную (на плоскости или в пространстве)
Pi , i 0,1,..., N 1.
P3
P1
P2
P0
N 1
P4
Q(t ) Pi Bi (t ), t min t t max .
i 0
Pi R2 , R3 , R4 - контрольные точки
Bi (t ) R - базисные функции (обычно полиномы некоторой степени)
Для рисования кривая обычно разбивается на M точек
Q j Q(u j ), t min u0 u1 ... uM 1 , j 0,1,..., M 1.
Кривые высших порядков: примеры базисов
Базис первого порядка для 5 контрольных точек
B2 (t )
P3
P1
1
P2
P4
P0
t min
Кривые Безье. Степень кривой = N - 1
Bi C N 1t (1 t )
i
i
N 1i
, 0 t 1 - полиномы Бернштейна
Любая контрольная точка Pi оказывает влияние на форму всей
кривой
Для большого количества точек степень кривой окажется тоже
высокой.
t max
Кривые высших порядков: B-сплайны
Задача: построить параметрическую кривую, форма которой
изменяется локально при изменении одной из контрольных точек.
N 1
Q (t ) Pi Bi , p (t ), tmin t tmax , 2 p N 1.
p - степень B-сплайна.
i 0
Базисные функции рассчитываются по рекуррентным формулам
Кокса-де Бура.
1, ti t ti 1 ,
Bi , 0 (t ) , i 0,1,..., N p.
0, в противном случае.
Bi ,k ( t ) (t ti ) Bi ,k 1 (t )
ti k 1 ti
(ti k t ) Bi 1,k 1 (t )
ti k ti 1
, i 0,1,..., N p k .
Открытый узловой вектор
N+p+1
Равномерный вектор:
t = [ 0 0 0 0 0.25 0.75 1 1 1 1 ]
p+1
N = 4, p = 3
N = 7, p = 3
p+1
t = [0 0 0 0 0.25 0.75 0.875 1 1 1 1]
Периодический узловой вектор
Равномерный вектор:
N+p+1
t = [ -0.75 -0.5 -0.25 0 0.25 0.75 1.0 1.25 1.5 1.75]
p+1
N = 4, p = 3
p+1
N = 7, p = 3
Повторяющиеся узлы
t = [ 0 0 0 0 0.5 0.5 0.5 1 1 1 1 ]
N = 7, p = 3
Расчет производных
Коэффициенты при степенях постоянны на каждом из
интервалов узлового вектора:
Формулы для вычисления получаются из формул Кокса-де-Бура
Рациональные сплайны
Рациональный сплайн является проекцией обычного сплайна из
пространства более высокой размерности (см. однородные
координаты)
[ x, y, z, w] [ x / w, y / w, z / w] [ x' , y ' , z ' ]
N 1
w P'B
i
Q(t ) i
i, p
(t )
i 0
N 1
.
w B
i
i, p
(t )
i 0
Формулы для пересчета нормалей оказываются неверными.
w > 0 является веcом вершины. Чем больше вес, тем большее
влияние вершина оказывает на форму кривой.
B-Spline поверхности
Поверхность строится на основе двух наборов базисных функций
N1 1 N 2 1
Q(u, v) B
i, p
i 0
Q(u, v)
u
Q(u, v)
v
j 0
N1 1 N 2 1
(u ) B j , p (v) Pij .
i 0
dBi , p (u )
du
j 0
N1 1 N 2 1
B
i, p
i 0
(u )
B j , p (v) Pij .
dB j , p (v)
dv
j 0
Pij .
Край поверхности является В-сплайном, который определяют
граничные контрольные точки (для открытого базиса)
N1 1
Q(0, v) B
i, p
i 0
N 2 1
(0) B j , p (v) Pij j 0
N 2 1
B
j 0
j, p
(v) P0 , j .
Литература
Роджерс
Д., Адамc Дж. Математические основы
машинной графики.
vprat.
ifrance.com - статься про NURBS
Копия этой статьи на сайте cg.cs.msu.su
www.google.com
:)
Вспомогательная библиотека GLU
Входит в состав OpenGL и основана на командах
OpenGL
Функции GLU можно разделить на четыре класса
Вспомогательные функции (gluPerspective,
gluLookAt, …)
Функции для рисования базовых геометрических
объектов: сферы, цилиндра, круга и сектора круга.
Функции для разбиения невыпуклых
многоугольников
Функции для работы с кривыми и поверхностями
NURBS
Рисование геометрических объектов (1/2)
Перед началом рисования необходимо создать объект
GLUQuadricObj, хранящий режимы рисования объектов GLU
GLUquadricObj *obj = gluNewQuadric();
Для управления режимами рисования предназначены следующие
функции:
gluQuadricDrawStyle
Каркасный или сплошной режим
рисования
gluQuadricOrientation
Направление нормалей
gluQuadricNormals
Режим расчета нормалей
gluQuadricTexture
Рассчитывать или нет текстурные
координаты
gluQuadricNormals(obj, GL_FLAT);
Рисование геометрических объектов (2/2)
partial disk
disk
sphere
Для рисования объектов предназначены функции gluSphere,
gluCylinder, gluDisk и gluPartialDisk.
gluSphere(obj, 1.0, 20, 10);
Когда объект не нужен, память можно освободить
gluDeleteQuadric(obj);
Рисование кривых и поверхностей NURBS (1/2)
Перед началом рисования кривой или поверхности NURBS
необходимо создать объект для хранения режимов построения
NURBS
GLUnurbsObj *obj = new gluNewNurbsRenderer();
При помощи функции gluNurbsProperty можно задать режим
разбиения, режим рисования и режимы отсечения кривых и
поверхностей.
Предусмотрены следующие режимы разбиения кривых и
поверхностей:
1. Постоянный шаг по параметрам u и v
2. Адаптивное разбиение в зависимости от длины кривой/площади
поверхности на экране.
3. Адаптивное разбиение в зависимости от ошибки аппроксимации
Рисование кривых и поверхностей NURBS (2/2)
Рисование кривой NURBS
Между командами gluBeginCurve и gluEndCurve
вызываются команды gluNurbsCurve для задания
массивов контрольных точек, а также нормалей, цветов и
текстурных координат вершин.
Рисование поверхности NURBS
Между командами gluBeginSurface и gluEndSurface
вызываются команды gluNurbsSurface для задания
массивов контрольных точек, а также нормалей, цветов и
текстурных координат вершин.
Алгоритм Брезенхема (1/4)
Отрезок, соединяющий
P(x1, y1) и Q(x2, y2)
y y1 y2 y1
x2 x1
( x x1 ), x x1 , x2 Алгоритм Брезенхема (2/4)
F ( x, y ) ( x x1 ) dy ( y y1 ) dx
dx x2 x1
dy y2 y1
F(x,y) = 0 -- точка на отрезке
F(x,y) < 0 -- точка выше
F(x,y) > 0 -- точка ниже
Точка P определена, тогда
координаты срединной точки
( x p 1, y p 1 / 2)
и значение функции в этой точке
d F ( x p 1, y p 1 / 2)
Алгоритм Брезенхема (3/4)
Если d < 0, то выбирается Е и
d new F ( x p 2, y p 12 )
d new d old F ( x p 2, y p 1
2
) F ( x p 1, y p 1
2
)
E d new d old dy y 2 y1
Если d 0, то выбирается NE
3
d new F ( x p 2, y p )
2
NE dy dx ( y2 y1 ) ( x2 x1 )
В начальной точке
d start F ( x1 1, y 1 1 / 2) ( x1 1 x1 ) dy ( y1 1 / 2 y1 ) dx dy dx / 2
Алгоритм Брезенхема (4/4)
'
F ( x, y ) 2 F ( x, y )
Одна неприятность -- деление на 2
'
Чтобы избежать вещественной
арифметики, сделаем
преобразование
d 2d
d start 2dy dx
'
d 2d
dstart 2dy dx 3; dNE 4; dE 10
d0 = 10 - 7 = 3 > 0
(NE)
d1 = 3 - 4 = -1 < 0
(E)
d2 = -1 + 10 = 9
(NE)
d3 = 9 - 4 = 5
(NE)
d4 = 5 - 4 = 1
(NE)
d5 = 1 - 4 = -3
(E)
d6 = -3 + 10 = 7
(NE)
Алгоритм Брезенхема (1/4)
(окружность)
Неявное и явное представление
2
2
x y R
2
2
y R x
2
Параметрическое представление
x R cos y R sin Алгоритм Брезенхема (2/4)
(окружность)
Алгоритм Брезенхема (3/4)
(окружность)
2
2
F ( x, y ) x y R
2
Для точки P c коорд. ( x , y )
p
p
d old F ( x p 1, y p 12 )
Для пиксела Е:
d new f ( x p 2, y p 1
2
) d old (2 x p 3)
d E (2 x p 3)
Для пиксела SE:
d new d old (2 x p 2 y p 5)
d SE (2 x p 2 y p 5)
Алгоритм Брезенхема (4/4)
(окружность)
В начальной точке5 (0, R)
1
1
5
2
2
F (1, R ) 1 ( R R ) R R
2
4
4
5
d0 R
4
И опять нужно исключить вещественные операции.
Сделав замену h = d-1/4, получим h = 1-R.
Тогда необходимо сравнивать h с -1/4, но так как
приращения d – целые числа, то сравнивать
можно с нулем.
Документ
Категория
Презентации
Просмотров
2
Размер файла
496 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа