Скачать презентацию Кривые высших порядков постановка задачи ü Задача построить Скачать презентацию Кривые высших порядков постановка задачи ü Задача построить

Nurbs.ppt

  • Количество слайдов: 17

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

Кривые Безье и B-сплайны ü Кривые Безье. Степень кривой = N - 1 • Кривые Безье и B-сплайны ü Кривые Безье. Степень кривой = N - 1 • Любая контрольная точка Pi оказывает влияние на форму всей кривой • Для большого количества точек степень кривой окажется тоже высокой. ü В-сплайн: параметрическая кривая, форма которой изменяется локально при изменении одной из контрольных точек. p - степень B-сплайна. - Базисная функция B-сплайна.

Формулы Кокса-де Бура ü Введем понятие узлового вектора – возрастающей последовательности узлов ti ü Формулы Кокса-де Бура ü Введем понятие узлового вектора – возрастающей последовательности узлов ti ü Базисные функции рассчитываются по рекуррентным формулам Кокса-де Бура. степень базисной функции. номер базисной функции.

Открытый узловой вектор (равномерный) N + p + 1 N+p+1 T=[00001111] p+1 N = Открытый узловой вектор (равномерный) N + p + 1 N+p+1 T=[00001111] p+1 N = 4, p = 3 T = [ 0 0 0. 25 0. 75 1 1 ] p+1 N = 7, p = 3

Открытый узловой вектор (неравномерный) N+p+1 ü Равномерный вектор: t = [ 0 0 0. Открытый узловой вектор (неравномерный) N+p+1 ü Равномерный вектор: t = [ 0 0 0. 25 0. 75 1 1 ] p+1 N = 4, p = 3 N = 7, p = 3 p+1 t = [0 0 0. 25 0. 75 0. 875 1 1]

Как нарисовать незамкнутую ломаную const int N = 50; . . . gl. Begin(GL_LINE_STRIP); Как нарисовать незамкнутую ломаную const int N = 50; . . . gl. Begin(GL_LINE_STRIP); for(int i = 0; i

y Как построить тело вращения (1/2) x const int N = 20; const int y Как построить тело вращения (1/2) x const int N = 20; const int M = 50; double dt = (tmax – tmin)/M; gl. Begin(GL_TRIANGLE_FAN); gl. Vertex 3 d(BSP(tmin). x, BSP(tmin). y, 0); double 2 p = BSP(tmin+dt); for(int i = 0; i=0; i--) { double phi = 2*PI*i/N; gl. Vertex(p. x, cos(phi)*p. y, sin(phi)*p. y); } gl. End();

y Как построить тело вращения (2/2) x for(int j = 1; <M-1; j++) { y Как построить тело вращения (2/2) x for(int j = 1;

Периодический узловой вектор ü Равномерный вектор: N+p+1 t = [ -0. 75 -0. 25 Периодический узловой вектор ü Равномерный вектор: N+p+1 t = [ -0. 75 -0. 25 0. 75 1. 0 1. 25 1. 75] p+1 N = 4, p = 3 p+1 N = 7, p = 3

Повторяющиеся узлы t = [ 0 0 0. 5 1 1 ] N = Повторяющиеся узлы t = [ 0 0 0. 5 1 1 ] N = 7, p = 3

Как построить объект методом протяжки y const int N 1 = 20; const int Как построить объект методом протяжки y const int N 1 = 20; const int N 2 = 50; double dt = (tmax – tmin)/M; x for(int j = 0; j

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

Рациональные сплайны ü Рациональный сплайн является проекцией обычного сплайна из пространства более высокой размерности Рациональные сплайны ü Рациональный сплайн является проекцией обычного сплайна из пространства более высокой размерности (см. однородные координаты) ü Формулы для пересчета нормалей оказываются неверными. ü w > 0 является веcом вершины. Чем больше вес, тем большее влияние вершина оказывает на форму кривой.

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

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

Немного об анимации. . . ü Сложный объект можно представить в виде иерархии (tree) Немного об анимации. . . ü Сложный объект можно представить в виде иерархии (tree) Торс Голова Лев. бедро Пр. плечо Пр. бедро Лев. плечо Пр. предплечье Лев. голень Пр. голень Лев. предплечье Лев. стопа Пр. кисть Лев. кисть

Рисуем иерархический объект void Draw. Body() { // Преобразование для торса gl. Rotate(…); gl. Рисуем иерархический объект void Draw. Body() { // Преобразование для торса gl. Rotate(…); gl. Translated(…); //. . . Рисуем торс gl. Push. Matrix(); // Преобразование для левого плеча gl. Rotate(…); gl. Translated(…); // … Рисуем левое плечо gl. Push. Matrix(); // Преобразование для левого предплечья gl. Rotate(…); gl. Translated(…); // … Рисуем левое предплечье gl. Push. Matrix(); // Преобразование для левой кисти gl. Rotate(…); gl. Translated(…); // … Рисуем левую кисть gl. Pop. Matrix(); }