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

Содержание

Слайд 2

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

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

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

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

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

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

Слайд 3

Кривые высших порядков: примеры базисов

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

Кривые высших порядков: примеры базисов Базис первого порядка для 5 контрольных точек
Кривые Безье. Степень кривой = N - 1

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

Для большого количества точек степень кривой окажется тоже высокой.

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

Слайд 4

Кривые высших порядков: B-сплайны

Задача: построить параметрическую кривую, форма которой изменяется локально

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

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

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

Слайд 5

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

Равномерный вектор:

t = [ 0 0 0 0 0.25

Открытый узловой вектор Равномерный вектор: t = [ 0 0 0 0
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]

Слайд 6

Периодический узловой вектор

Равномерный вектор:

t = [ -0.75 -0.5 -0.25 0 0.25

Периодический узловой вектор Равномерный вектор: t = [ -0.75 -0.5 -0.25 0
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

Слайд 7

Повторяющиеся узлы

t = [ 0 0 0 0 0.5 0.5 0.5 1

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

N = 7, p = 3

Слайд 8

Расчет производных

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

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

Слайд 9

Рациональные сплайны

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

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

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

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

Слайд 10

B-Spline поверхности

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

Край поверхности

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

Слайд 11

Литература

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

vprat. ifrance.com

Литература Роджерс Д., Адамc Дж. Математические основы машинной графики. vprat. ifrance.com -
- статься про NURBS

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

www.google.com :)

Слайд 12

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

Входит в состав OpenGL и основана на командах OpenGL

Вспомогательная библиотека GLU Входит в состав OpenGL и основана на командах OpenGL
Функции GLU можно разделить на четыре класса

Вспомогательные функции (gluPerspective, gluLookAt, …)
Функции для рисования базовых геометрических объектов: сферы, цилиндра, круга и сектора круга.
Функции для разбиения невыпуклых многоугольников
Функции для работы с кривыми и поверхностями NURBS

Слайд 13

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

Перед началом рисования необходимо создать объект GLUQuadricObj, хранящий

Рисование геометрических объектов (1/2) Перед началом рисования необходимо создать объект GLUQuadricObj, хранящий
режимы рисования объектов GLU
GLUquadricObj *obj = gluNewQuadric();
Для управления режимами рисования предназначены следующие функции:
gluQuadricDrawStyle Каркасный или сплошной режим рисования
gluQuadricOrientation Направление нормалей
gluQuadricNormals Режим расчета нормалей
gluQuadricTexture Рассчитывать или нет текстурные координаты
gluQuadricNormals(obj, GL_FLAT);

Слайд 14

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

disk

partial disk

sphere

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

Рисование геометрических объектов (2/2) disk partial disk sphere Для рисования объектов предназначены
gluDisk и gluPartialDisk.
gluSphere(obj, 1.0, 20, 10);
Когда объект не нужен, память можно освободить
gluDeleteQuadric(obj);

Слайд 15

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

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

Рисование кривых и поверхностей NURBS (1/2) Перед началом рисования кривой или поверхности
NURBS необходимо создать объект для хранения режимов построения NURBS
GLUnurbsObj *obj = new gluNewNurbsRenderer();
При помощи функции gluNurbsProperty можно задать режим разбиения, режим рисования и режимы отсечения кривых и поверхностей.
Предусмотрены следующие режимы разбиения кривых и поверхностей:
1. Постоянный шаг по параметрам u и v
2. Адаптивное разбиение в зависимости от длины кривой/площади поверхности на экране.
3. Адаптивное разбиение в зависимости от ошибки аппроксимации

Слайд 16

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

Рисование кривой NURBS
Между командами gluBeginCurve

Рисование кривых и поверхностей NURBS (2/2) Рисование кривой NURBS Между командами gluBeginCurve
и gluEndCurve вызываются команды gluNurbsCurve для задания массивов контрольных точек, а также нормалей, цветов и текстурных координат вершин.
Рисование поверхности NURBS
Между командами gluBeginSurface и gluEndSurface вызываются команды gluNurbsSurface для задания массивов контрольных точек, а также нормалей, цветов и текстурных координат вершин.

Слайд 17

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

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

Алгоритм Брезенхема (1/4) Отрезок, соединяющий P(x1, y1) и Q(x2, y2)

Слайд 18

Алгоритм Брезенхема (2/4)
F(x,y) = 0 -- точка на отрезке
F(x,y) < 0

Алгоритм Брезенхема (2/4) F(x,y) = 0 -- точка на отрезке F(x,y) F(x,y)
-- точка выше
F(x,y) > 0 -- точка ниже
Точка P определена, тогда координаты срединной точки
и значение функции в этой точке

Слайд 19

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

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

Алгоритм Брезенхема (3/4) Если d Если d ≥ 0, то выбирается NE В начальной точке
≥ 0, то выбирается NE
В начальной точке

Слайд 20

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

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

Алгоритм Брезенхема (4/4) Одна неприятность -- деление на 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)

Слайд 21

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

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

Алгоритм Брезенхема (1/4) (окружность) Неявное и явное представление Параметрическое представление

Слайд 22

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

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

Слайд 23

Алгоритм Брезенхема (3/4) (окружность)
Для точки P c коорд.
Для пиксела Е:
Для пиксела

Алгоритм Брезенхема (3/4) (окружность) Для точки P c коорд. Для пиксела Е: Для пиксела SE:
SE: