24
Кривые и поверхности высших порядков Астана 2004 Лекция 12

Кривые и поверхности высших порядков

Embed Size (px)

DESCRIPTION

Кривые и поверхности высших порядков. Лекция 12. Астана 2004. Кривые высших порядков : постановка задачи. Задача : построить параметрическую кривую “ повторяющую ” заданную ломаную (на плоскости или в пространстве). - контрольные точки. - PowerPoint PPT Presentation

Citation preview

Page 1: Кривые и поверхности высших порядков

Кривые и поверхности высших порядков

Кривые и поверхности высших порядков

Астана 2004

Лекция 12Лекция 12

Page 2: Кривые и поверхности высших порядков

Кривые высших порядков: постановка задачиКривые высших порядков: постановка задачи Задача: построить параметрическую кривую “повторяющую” заданную ломаную (на плоскости или в пространстве)

0P

1P

2P

3P

4P

.1,...,1,0, NiPi

.),()(1

0

N

imaxminii ttttBPtQ

- контрольные точки

RtBi )(

Для рисования кривая обычно разбивается на M точек

432 ,, RRRPi

- базисные функции (обычно полиномы некоторой степени)

.1,...,1,0,...),( 110min MjuuutuQQ Mjj

Page 3: Кривые и поверхности высших порядков

Кривые высших порядков: примеры базисовКривые высших порядков: примеры базисов Базис первого порядка для 5 контрольных точек

0P

1P

2P

3P

4P

Кривые Безье. Степень кривой = N - 1

10,)1( 11

tttCB iNiiNi

Любая контрольная точка Pi оказывает влияние на форму всей кривой Для большого количества точек степень кривой окажется тоже высокой.

mint maxt

1

)(2 tB

- полиномы Бернштейна

Page 4: Кривые и поверхности высших порядков

Кривые высших порядков: B-сплайныКривые высших порядков: B-сплайны Задача: построить параметрическую кривую, форма которой изменяется локально при изменении одной из контрольных точек.

.12,),()(1

0,

NpttttBPtQN

imaxminpii

Базисные функции рассчитываются по рекуррентным формулам Кокса-де Бура.

.,...,1,0,.,0

,,1)( 1

0, pNiслучаепротивномв

ttttB ii

i

p - степень B-сплайна.

.,...,1,0,)()()()(

1

1,1

1

1,)(, kpNi

tt

tBtt

tt

tBttB

iki

kiki

iki

kiitki

Page 5: Кривые и поверхности высших порядков

Открытый узловой векторОткрытый узловой вектор

Равномерный вектор: t = [ 0 0 0 0 0.25 0.75 1 1 1 1 ]

p+1 p+1

N + p + 1

N = 4, p = 3 N = 7, p = 3 t = [0 0 0 0 0.25 0.75 0.875 1 1 1 1]

Page 6: Кривые и поверхности высших порядков

Периодический узловой векторПериодический узловой вектор Равномерный вектор:

t = [ -0.75 -0.5 -0.25 0 0.25 0.75 1.0 1.25 1.5 1.75]p+1 p+1

N + p + 1

N = 4, p = 3 N = 7, p = 3

Page 7: Кривые и поверхности высших порядков

Повторяющиеся узлыПовторяющиеся узлыt = [ 0 0 0 0 0.5 0.5 0.5 1 1 1 1 ]

N = 7, p = 3

Page 8: Кривые и поверхности высших порядков

Расчет производныхРасчет производных Коэффициенты при степенях постоянны на каждом из интервалов узлового вектора:

Формулы для вычисления получаются из формул Кокса-де-Бура

Page 9: Кривые и поверхности высших порядков

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

w > 0 является веcом вершины. Чем больше вес, тем большее влияние вершина оказывает на форму кривой.

]',','[]/,/,/[],,,[ zyxwzwywxwzyx

.)(

)(')( 1

0,

1

0,

N

ipii

N

ipiii

tBw

tBPwtQ

Формулы для пересчета нормалей оказываются неверными.

Page 10: Кривые и поверхности высших порядков

B-Spline поверхностиB-Spline поверхности Поверхность строится на основе двух наборов базисных функций

.)()(),(1

0

1

0,,

1 2

N

i

N

jijpjpi PvBuBvuQ

.)()(),( 1

0

1

0,

,1 2

N

i

N

jijpj

pi PvBdu

udB

u

vuQ

.)(

)(),( 1

0

1

0

,,

1 2

N

i

N

jij

pjpi P

dv

vdBuB

v

vuQ

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

.)()()0(),0(1

0,0,

1

0

1

0,,

21 2

N

jjpj

N

i

N

jijpjpi PvBPvBBvQ

Page 11: Кривые и поверхности высших порядков

ЛитератураЛитература Роджерс Д., Адамc Дж. Математические основы машинной графики.

vprat. ifrance.com - статься про NURBS

Копия этой статьи на сайте cg.cs.msu.su

www.google.com :)

Page 12: Кривые и поверхности высших порядков

Вспомогательная библиотека GLUВспомогательная библиотека GLU Входит в состав OpenGL и основана на командах OpenGL

Функции GLU можно разделить на четыре класса

Вспомогательные функции (gluPerspective, gluLookAt, …)

Функции для рисования базовых геометрических объектов: сферы, цилиндра, круга и сектора круга.

Функции для разбиения невыпуклых многоугольников

Функции для работы с кривыми и поверхностями NURBS

Page 13: Кривые и поверхности высших порядков

Рисование геометрических объектов (1/2) Рисование геометрических объектов (1/2) Перед началом рисования необходимо создать объект GLUQuadricObj, хранящий режимы рисования объектов GLU

GLUquadricObj *obj = gluNewQuadric();

Для управления режимами рисования предназначены следующие функции:

gluQuadricDrawStyle Каркасный или сплошной режим рисования

gluQuadricOrientation Направление нормалей

gluQuadricNormals Режим расчета нормалей

gluQuadricTexture Рассчитывать или нет текстурные координаты

gluQuadricNormals(obj, GL_FLAT);

Page 14: Кривые и поверхности высших порядков

Рисование геометрических объектов (2/2) Рисование геометрических объектов (2/2)

diskpartial disk

sphere

Для рисования объектов предназначены функции gluSphere, gluCylinder, gluDisk и gluPartialDisk.

gluSphere(obj, 1.0, 20, 10);

Когда объект не нужен, память можно освободить

gluDeleteQuadric(obj);

Page 15: Кривые и поверхности высших порядков

Рисование кривых и поверхностей NURBS (1/2) Рисование кривых и поверхностей NURBS (1/2) Перед началом рисования кривой или поверхности NURBS необходимо создать объект для хранения режимов построения NURBS

GLUnurbsObj *obj = new gluNewNurbsRenderer();

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

Предусмотрены следующие режимы разбиения кривых и поверхностей:

1. Постоянный шаг по параметрам u и v

2. Адаптивное разбиение в зависимости от длины кривой/площади поверхности на экране.

3. Адаптивное разбиение в зависимости от ошибки аппроксимации

Page 16: Кривые и поверхности высших порядков

Рисование кривых и поверхностей NURBS (2/2) Рисование кривых и поверхностей NURBS (2/2)

Рисование кривой NURBS

Между командами gluBeginCurve и gluEndCurve вызываются команды gluNurbsCurve для задания массивов контрольных точек, а также нормалей, цветов и текстурных координат вершин.

Рисование поверхности NURBS

Между командами gluBeginSurface и gluEndSurface вызываются команды gluNurbsSurface для задания массивов контрольных точек, а также нормалей, цветов и текстурных координат вершин.

Page 17: Кривые и поверхности высших порядков

Алгоритм Брезенхема (1/4) Алгоритм Брезенхема (1/4)

Отрезок, соединяющий P(x1, y1) и Q(x2, y2)

21112

121 ,),( xxxxx

xxyy

yy

Page 18: Кривые и поверхности высших порядков

Алгоритм Брезенхема (2/4) Алгоритм Брезенхема (2/4)

F(x,y) = 0 -- точка на отрезке

F(x,y) < 0 -- точка выше

F(x,y) > 0 -- точка нижеТочка P определена, тогда

координаты срединной точки

и значение функции в этой точке

12

12

11 )()(),(

yydy

xxdx

dxyydyxxyxF

)2/1,1( pp yx

)2/1,1( pp yxFd

Page 19: Кривые и поверхности высших порядков

Алгоритм Брезенхема (3/4) Алгоритм Брезенхема (3/4)

Если d < 0, то выбирается Е и

Если d 0, то выбирается NE

В начальной точке

12

)2

1,1()

2

1,2(

),2( 21

yydydd

yxFyxFdd

yxFd

oldnewE

ppppoldnew

ppnew

)()(

)23

,2(

1212 xxyydxdy

yxFd

NE

ppnew

2/

)2/1()1(

)2/1,1(

1111

1 1

dxdy

dxyydyxx

yxFd start

Page 20: Кривые и поверхности высших порядков

Алгоритм Брезенхема (4/4) Алгоритм Брезенхема (4/4) Одна неприятность -- деление на 2

Чтобы избежать вещественной арифметики, сделаем преобразование dd

dxdyd

dd

yxFyxF

start

2

2

2

),(2),(

'

'

'

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)

10;4;32 ENEstart dddxdyd

Page 21: Кривые и поверхности высших порядков

Алгоритм Брезенхема (1/4) (окружность)

Неявное и явное представление

Параметрическое представление

22

222

xRy

Ryx

sin

cos

Ry

Rx

Page 22: Кривые и поверхности высших порядков

Алгоритм Брезенхема (2/4) (окружность)

Page 23: Кривые и поверхности высших порядков

Алгоритм Брезенхема (3/4) (окружность)

Для точки P c коорд.

Для пиксела Е:

Для пиксела SE:

222),( RyxyxF ),( pp yx

),1( 21 ppold yxFd

)32(

)32()21

,2(

pE

poldppnew

xd

xdyxfd

)522(

)522(

ppSE

ppoldnew

yxd

yxdd

Page 24: Кривые и поверхности высших порядков

Алгоритм Брезенхема (4/4) (окружность)

В начальной точке5 (0, R)

И опять нужно исключить вещественные операции.

Сделав замену h = d-1/4, получим h = 1-R.

Тогда необходимо сравнивать h с -1/4, но так как приращения d – целые числа, то сравнивать можно с нулем.

Rd

RRRRRF

45

45

)41

(1)21

,1(

0

22