- •Параметрические Кривые: Обзор
- •Примеры
- •Касательный Вектор и Касательная
- •Примеры
- •Нормальный Вектор и Кривизна
- •Кривизна
- •Еще примеры
- •Почему Направляющая Тройка Важна?
- •Вопросы Непрерывности
- •Проблемы с Параметрическим Представлением
- •Параметризация По Длине Дуги
- •Геометрическая Непрерывность
- •Рациональные Кривые
- •Рациональные Формы Стандартных Кривых
- •Теоремы Объединения [Uniformization]
- •Построение Кривых Безье
- •Что, если область u не [0.1]?
- •Краткий Итог
- •Нахождение точки на Кривой Безье: Алгоритм De Casteljau's
- •Вычисления
- •Рекурсивное Представление
- •Кривые Безье Касательны к их Первому и Последнему Сегменту.
- •Объединение Двух Кривых Безье с соблюдением c1-Непрерывности
- •Соотношение Между Производной и Алгоритмом de Casteljau
- •Производные Высших Порядков [Higher Derivatives]
- •Разбиение Кривой Безье
- •Зачем Это Нужно, блин ? [Why Do We Need Curve Subdivision?]
- •Базисные Функции b-spline: Определение
- •Два Важных Замечания
- •Какое Значение Имеют Коэффициенты?
- •Базисные Функции b-spline: Важные Свойства
- •Ni,p(u) - это многочлен p-й степени от u
- •Неотрицательность -- Для всех I, p и u, Ni,p(u) неотрицательно
- •Влияние Множественных УзлоFf
- •Примеры Вычислений
- •Простые Узлы
- •Множественные Узлы
- •Кривые b-spline: Определение
- •Кривые b-spline: Важные Свойства
- •Преимущества Использования Кривых b-spline
- •Кривые b-spline: Вычисление Коэффициентов
- •Кривые b-spline: Перемещение Контрольных Точек
- •Некоторые Полезные Следствия Свойства Сильного Ограничивающего Многоугольника
- •Кривые b-spline: Изменение Узлов
- •Замечание о Множественных Узлах
- •Производные Кривой b-spline
- •Фиксированные Кривые b-spline
- •Производные Высших Порядков
- •Nurbs: Мотивация
- •Nurbs: Определение
- •Два Прмых Следствия [Two Immediate Results]
- •Геометрическая Интерпретация.
- •Nurbs: Важные Свойства
- •Важные Свойства Базисных Функций nurbs
- •Неотрицательность -- для всех I и p, Ri,p(u) неотрицательно
- •Важные Свойства Кривых nurbs
- •Кривая nurbs p(u) - это кусочная кривая, каждый компонент которой - это рациональная кривая степени p
- •Фиксированная кривая nurbs p(u) проходит через две крайние контр. Точки p0 и pn
- •Nurbs: Изменение Весов
- •Углубленное Рассуждение
- •Кривые b-spline/nurbs: Введение Узла
- •Введение Одиночного Узла
- •Пример 1: Введение Узла на Узловом Интервале
- •Пример 2: Введение Узла в Существующем Простом Узле
- •Пример 3: Введение Узла в Существующем Множественном Узле
- •Введение Узла для Кривых nurbs
- •Кривые b-spline/nurbs: Множественное Введение Узла
- •Замечание (Наблюдение) I: Коэффициенты для Вычисления Новых Контр. Точек
- •Замечание [Наблюдение] II: Вычисление Новых Контрольных Точек
- •Вычислить первый столбец, второй столбец, ... И h-ый столбец;
- •Новым набором контр. Точек будут те, что ограничены пунктирным многоугольником.
- •Отсечение Углов
- •Алгоритм De Boor
- •Алгоритм De Boor для Кривых nurbs
- •Основные Понятия
- •Параметрические Поверхности
- •Неявные Поверхности
- •Особенности
- •Поверхности Безье: Построение [Construction]
- •Базисные Функции
- •Поверхности [Tensor] Произведения
- •Поверхности Безье: Важные Свойства
- •Изопараметрические Кривые
- •Граничные [Boundary] Кривые
- •Направление u и направление V
- •Поверхности [Tensor] Произведения: Возвращаемся к теме
- •Поверхности b-spline: Построение
- •Базисные Функции
- •Фиксированные, Закрытые и Открытые Поверхности b-spline
- •Поверхности b-spline: Важные Свойства
- •Выбор Параметров : Обзор [Parameter Selection Overview]
- •Метод Длины Хорды
- •Центростремительный Метод
- •Получение Узлового Вектора
- •Универсальный Метод
- •Параметры и Узловые Векторы для Поверхностей
- •Глобальная Интерполяция Кривых
- •Нахождение Решения
- •Алгоритм
- •Влияние Параметров и Узлов
- •Влияние Степени
- •Почему Этот метод Назывется Глобальным?
- •Глобальная Аппроксимация Кривых
- •Значение Наименьшей Площади
- •Поиск Решения
- •Алгоритм
- •Влияние Степени и Количества Контрольных Точек
- •Почему Этот Метод Глобальный?
- •Глобальная Интерполяция Поверхностей
- •Поиск Решения
- •Почему Этот Метод Глобальный?
- •Глобальная Аппроксимация Поверхностей
- •Поиск Решения
- •Усовершенствование Алгоритма
- •Простое Сравнение
Примеры Вычислений
Два примера, один с простыми узлами, другой с множественными, будут довольно подробно рассмотрены на этой странице.
Простые Узлы
Допустим, узловой вектор равен U = { 0, 0.25, 0.5, 0.75, 1 }. Отсюда, m = 4 и u0 = 0, u1 = 0.25, u2 = 0.5, u3 = 0.75 и u4 = 1. Базисные функции 0 степени простые. Таких функций четыре: N0,0(u), N1,0(u), N2,0(u) и N3,0(u), определенные на узловых интервалах [0,0.25,), [0.25,0.5), [0.5,0.75) и [0.75,1), соответственно, как показано ниже.
Следующая таблица дает результат всех Ni,1(u):
Базисная Функция |
Границы |
Уравнение |
N0,1(u) |
[0, 0.25) |
4u |
[0.25, 0.5) |
2(1 - 2u) |
|
N1,1(u) |
[0.25, 0.5) |
4u - 1 |
[0.5, 0.75) |
3 - u |
|
N2,1(u) |
[0.5, 0.75) |
2(2u - 1) |
[0.75, 1) |
4(1 - u) |
Вот графики этих базисных функций.
Из функций Ni,1(u), можно вычислить базисные функции второй степени. Так как m = 4, p = 2, а m = n + p + 1, то n = 1 и есть всего две базисные функции второй степени N0,2(u) и N1,2(u). Следующая таблица - это результат:
Базисная Функция |
Границы |
Уравнение |
N0,2(u) |
[0, 0.25) |
8u2 |
[0.25, 0.5) |
-1.5 + 12u - 16 u2 |
|
[0.5, 0.75) |
4.5 - 12u + 8 u2 |
|
N1,2(u) |
[0.25, 0.5) |
0.5 - 4u + 8u2 |
[0.5, 0.75) |
-1.5 + 8u - 8u2 |
|
[0.75, 1) |
8(1 - u)2 |
Следующий рисунок показывает две базисные функции. Три вертикальные синие линии указывают положения узлов. Заметьте, что каждая базисная функция является составной кривой, состоящей из трех отрезков кривых 2 степени. Например, N0,2(u) это зеленая линия, являющаяся объединением трех парабол, построенных на отрезках [0,0.25), [0.25, 0.5) и [0.5,0.75). Три этих отрезка кривых объединяются вместе, образуя форму колокола. Как упоминалось на предыдущей странице, в узлах сложная кривая является C1-непрерывной.
Множественные Узлы
Если узловой вектор содержит множественные узлы, мы сталкиваемся с ситуацией 0/0, как будет видно позже. Таким образом, принимаем 0/0 равным 0. К счастью, это только для вычислений вручную. Для компьютерного представления существует эффективный алгоритм без такой проблемы. Кроме того, если ui - узел множественности k (т.e., ui = ui+1 = ... = ui+k-1), то узловые интервалы [ui,ui+1), [ui+1,ui+2), ..., [ui+k-2,ui+k-1) не существуют, и в итоге Ni,0(u), Ni+1,0(u), ..., Ni+k-1,0(u) являются нулевыми функциями.
Возьмем узловой вектор U = { 0, 0, 0, 0.3, 0.5, 0.5, 0.6, 1, 1, 1 }. Таким образом, 0 и 1 множественности 3 (т.e., 0(3) и 1(3) ), а 0.5 множественности 2 (т.e., 0.5(2) ). Отсюда, m = 9 и значения узлов таковы:
u0 |
u1 |
u2 |
u3 |
u4 |
u5 |
u6 |
u7 |
u8 |
u9 |
0 |
0 |
0 |
0.3 |
0.5 |
0.5 |
0.6 |
1 |
1 |
1 |
Вычислим Ni,0(u). Заметьте, так как m = 9, а p = 0 (базисные функции 0 степени), получаем n = m - p - 1 = 8. Как видно из таблицы ниже, есть только четыре ненулевых базисных функции: N2,0(u), N3,0(u), N5,0(u) и N6,0(u).
Базисная Функция |
Границы |
Уравнение |
Комментарии |
N0,0(u) |
все u |
0 |
так как [u0, u1) = [0,0) не существует |
N1,0(u) |
все u |
0 |
так как [u1, u2) = [0,0) не существует |
N2,0(u) |
[0, 0.3) |
1 |
|
N3,0(u) |
[0.3, 0.5) |
1 |
|
N4,0(u) |
все u |
0 |
так как [u4, u5) = [0.5,0.5) не существует |
N5,0(u) |
[0.5, 0.6) |
1 |
|
N6,0(u) |
[0.6, 1) |
1 |
|
N7,0(u) |
все u |
0 |
так как [u7, u8) = [1,1) не существует |
N8,0(u) |
все u |
0 |
так как [u8, u9) = [1,1) не существует |
Теперь перейдем к базисным функциям степени 1. Так как p равно 1, то n = m - p - 1 = 7. Следующая таблица показывает результат:
Базисная Функция |
Границы |
Уравнение |
N0,1(u) |
все u |
0 |
N1,1(u) |
[0, 0.3) |
1 - (10/3)u |
N2,1(u) |
[0, 0.3) |
(10/3)u |
[0.3, 0.5) |
2.5(1 - 2u) |
|
N3,1(u) |
[0.3, 0.5) |
5u - 1.5 |
N4,1(u) |
[0.5, 0.6) |
6 - 10u |
N5,1(u) |
[0.5, 0.6) |
10u - 5 |
[0.6, 1) |
2.5(1 - u) |
|
N6,1(u) |
[0.6, 1) |
2.5u - 1.5 |
N7,1(u) |
все u |
0 |
Следующий рисунок показывает графики этих базисных функций.
Рассмотрим конкретные вычисления, скажем, N1,1(u). Это рассчитывается по следующему выражению:
N1,1(u) = (u - u1) / (u2 - u1) N1,0(u) + (u3 - u) / (u3 - u2) N2,0(u)
Подставляя u1 = u2 = 0 и u3 = 0.3 в это уравнение, получим:
N1,1(u) = (u/0) N1,0(u) + (1 - (10/3)u) N2,0(u)
Так как N1,0(u) везде равно нулю, первый член становится равным 0/0 и поэтому, как мы приняли, равен нулю. Таким образом, только второй член влияет на результат. Так как N2,0(u) равно 1 на [0,0.3), N1,1(u) равно 1 - (10/3)u на [0,0.3).
Далее, вычислим все Ni,2(u). Так как p = 2, имеем n = m - p - 1 = 6. Следующая таблица содержит все Ni,2(u):
Базисная Функция |
Границы |
Уравнение |
N0,2(u) |
[0, 0.3) |
(1 - (10/3)u)2 |
N1,2(u) |
[0, 0.3) |
(20/3)(u - (8/3)u2) |
[0.3, 0.5) |
2.5(1 - 2u)2 |
|
N2,2(u) |
[0, 0.3) |
(20/3)u2 |
[0.3, 0.5) |
-3.75 + 25u - 35u2 |
|
N3,2(u) |
[0.3, 0.5) |
(5u - 1.5)2 |
[0.5, 0.6) |
(6 - 10u)2 |
|
N4,2(u) |
[0.5, 0.6) |
20(-2 + 7u - 6u2) |
[0.6, 1) |
5(1 - u)2 |
|
N5,2(u) |
[0.5, 0.6) |
12.5(2u - 1)2 |
[0.6, 1) |
2.5(-4 + 11.5u - 7.5u2) |
|
N6,2(u) |
[0.6, 1) |
2.5(9 - 30u + 25u2) |
Следующий рисунок показывает все базисные функции степени 2.
Возьмем следующие типичные вычисления в качестве примера, скажем, N3,2(u). Выражение для расчета такое:
N3,2(u) = (u - u3) / (u5 - u3) N3,1(u) + (u6 - u) / (u6 - u4) N4,1(u)
Подставляя в u3 = 0.3, u4 = u5 = 0.5 и u6 = 0.6, имеем
N3,2(u) = (5u - 1.5) N3,1(u) + (6 - 10u) N4,1(u)
Так как N3,1(u) не равно нулю на [0.3, 0.5) и равно 5u - 1.5, то первый член, (5u - 1.5)2, является ненулевой частью N3,2(u) на [0.3, 0.5). Так как N4,1(u) не равно нулю на [0.5, 0.6) и равно 6 - 10u, то второй член, (6 - 10u)2, является ненулевой частью N3,2(u) на [0.5, 0.6).
Давайте исследуем непрерывность в узле 0.5(2). Так как его множественность равна 2, а степень этих базисных функций равна 2, базисная функция N3,2(u) является C0-непрерывной в 0.5(2). Вот почему N3,2(u) имеет острый угол в 0.5(2). Для узлов не на концах, скажем, в 0.3, C1-непрерывность выдерживается, так как все они являются простыми.