- •Параметрические Кривые: Обзор
- •Примеры
- •Касательный Вектор и Касательная
- •Примеры
- •Нормальный Вектор и Кривизна
- •Кривизна
- •Еще примеры
- •Почему Направляющая Тройка Важна?
- •Вопросы Непрерывности
- •Проблемы с Параметрическим Представлением
- •Параметризация По Длине Дуги
- •Геометрическая Непрерывность
- •Рациональные Кривые
- •Рациональные Формы Стандартных Кривых
- •Теоремы Объединения [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]
- •Метод Длины Хорды
- •Центростремительный Метод
- •Получение Узлового Вектора
- •Универсальный Метод
- •Параметры и Узловые Векторы для Поверхностей
- •Глобальная Интерполяция Кривых
- •Нахождение Решения
- •Алгоритм
- •Влияние Параметров и Узлов
- •Влияние Степени
- •Почему Этот метод Назывется Глобальным?
- •Глобальная Аппроксимация Кривых
- •Значение Наименьшей Площади
- •Поиск Решения
- •Алгоритм
- •Влияние Степени и Количества Контрольных Точек
- •Почему Этот Метод Глобальный?
- •Глобальная Интерполяция Поверхностей
- •Поиск Решения
- •Почему Этот Метод Глобальный?
- •Глобальная Аппроксимация Поверхностей
- •Поиск Решения
- •Усовершенствование Алгоритма
- •Простое Сравнение
Базисные Функции b-spline: Определение
Базисные функции Безье использовались в качестве весов. Базисные функции B-spline будут использоваться так же; тем не менее, они гораздо более сложны. Есть два интересных свойства, которые не являются частью базисных функций Безье, а именно: (1) интервал разделяется узлами, и (2) базисные функции не являются ненулевыми на всем интервале. Фактически, каждая базисная функция B-spline является ненулевой на нескольких смежных под-интервалах и, в итоге, базисные функции B-spline являются вполне "локальными".
Пусть U - это последовательность m + 1 неубывающих действительных чисел, u0 <= u2 <= u3 <= ... <= um. Числа ui называются узлами, последовательность U - узловым вектором, а полуоткрытый интервал [ui, ui+1) - i-м узловым диапазоном. Заметьте, так как некоторые ui могут быть равны, то соответствующих узловых диапазонов может не существовать. Если узел ui появляется k раз (i.e., ui = ui+1 = ... = ui+k-1), где k > 1, ui называется множественным узлом k-й множественности, пишется ui(k). Иначе, если ui появляется лишь однажды, это - простой узел. Если узлы равномерно разделены (т.e. ui+1 - ui постоянно для 0 <= i <= m - 1), узловой вектор или последовательность узлов называется однородной(-ым); иначе, неоднородной.
Узлы можно представить как точки, делящие интервал [u0, um] на узловые интервалы. Все базисные функции B-spline должны иметь область определения на [u0, um]. Таким образом, используем u0 = 0 и um = 1, чтобы преобразовать интервал в [0,1].
Чтобы описать базисные функции B-spline, нужен еще один параметр, степень этих базисных функций, p. i-я базисная функция B-spline степени p (пишется Ni,p(u) ), описывается рекурсивно:
Вышеуказанное уравнение обычно называют рекурсивной формулой Cox - de Boor. Это определение выглядит сложным. Но оно просто для понимания. Если степень равна нулю (т.e., p = 0), эти базисные функции являются скачковыми и это как раз то, о чем говорит первое выражение в формуле. То есть, базисная функция Ni,0(u) равна 1, если u лежит на i-м узловом интервале [ui, ui+1). Например, если есть четыре узла u0 = 0, u1 = 1, u2 = 2 и u3 = 3, узловые интервалы 0, 1 и 2 - это [0,1), [1,2), [2,3) и базисные функции 0 степени - это N0,0(u) = 1 на [0,1) и 0 в других случаях, N1,0(u) = 1 на [1,2) и 0 в других случаях, и N2,0(u) = 1 на [2,3) и 0 в других случаях. Это показано ниже:
Чтобы понять принцип расчета Ni,p(u) для p больше 0, вернемся к треуголной схеме расчета. Все узловые интервалы - в левом (первом) столбце, а все базисные функции нулевой степени - во втором. Это показано на следующей диаграмме.
Чтобы вычислить Ni,1(u), нужно Ni,0(u) и Ni+1,0(u). Таким образом, мы можем вычислить N0,1(u), N1,1(u), N2,1(u), N3,1(u) и так далее. Все эти Ni,1(u) записываются в третий столбец. Когда будут найдены Ni,1(u), можно будет вычислить Ni,2(u) и записать их в четвертый столбец. Продолжаем в том же духе, пока не вычислим все нужные Ni,p(u).
Выше мы нашли N0,0(u), N1,0(u) и N2,0(u) для узлового вектора U = { 0, 1, 2, 3 }. Давайте вычислим N0,1(u) и N1,1(u). Чтобы вычислить N0,1(u), так как i = 0 и p = 1, по определению имеем
N0,1(u) = (u - u0) / (u1 - u0 ) N0,0(u) + (u2 - u) / (u2 - u1 ) N1,0(u)
Так как u0 = 0, u1 = 1 и u2 = 2, вышеизложенное преобразуется к виду
N0,1(u) = u N0,0(u) + (2 - u) N1,0(u)
Так как N0,0(u) не равно нулю на [0,1), а N1,0(u) не равно нулю на [1,2), когда u лежит на [0,1) (соотв., на [1,2) ), только N0,0(u) (соотв., N1,0(u) ) влияет на [? contributes to] N0,1(u). Таким образом, когда u в пределах [0,1), N0,1(u) равно uN0,0(u) = u, а когда u в пределах [1,2), N0,1(u) равно (2 - u)N1,0(u) = (2 - u). Простые вычисления дают N1,1(u) = u - 1, если u лежит на [1,2), а N1,1(u) = 3 - u, если u лежит на [2,3). На следующем рисунке черные и красные линии - это соответственно N0,1(u) и N1,1(u). Заметьте, что N0,1(u) (соотв., N1,1(u)) не равно нулю на [0,1) и [1,2) (соотв., на [1,2) и [2,3)).
Как только будут найдены N0,1(u) и N1,1(u), можно вычислить N0,2(u). Из определения следует:
N0,2(u) = (u - u0) / (u2 - u0 ) N0,1(u) + (u3 - u) / (u3 - u1 ) N1,1(u)
Подставляя эти значения узлов, имеем
N0,2(u) = 0.5u N0,1(u) + 0.5 (3 - u) N1,1(u)
Заметьте, что N0,1(u) не равно нулю на [0,1) и [1,2), а N1,1(u) не равно нулю на [1,2) и [2,3). Таким образом, имеем три случая:
u в пределах [0,1): В этом случае, только N0,1(u) влияет на значение N0,2(u). Так как N0,1(u) равно [is] u, имеем
N0,2(u) = 0.5u2.
u в пределах [1,2): В этом случае, и N0,1(u), и N1,1(u) влияют на N0,2(u). Так как на [1,2), N0,1(u) = 2 - u и N1,1(u) = u - 1, имеем
N0,2(u) = (0.5u)(2 - u) + 0.5(3 - u)(3 - u) = 0.5(-3 + 6u - 2u2)
u в пределах [2,3): В этом случае, только N1,1(u) влияет на N0,2(u). Так как N1,1(u) = 3 - u на [2,3), имеем
N0,2(u) = 0.5(3 - u)(3 - u) = 0.5(3 - u)2
Если нарисовать отрезок кривой для каждого из трех случаев, то станет видно, что два смежных отрезка кривых соединяются, образуя кривую по узлам. Говоря точнее, отрезки первого и второго случаев соединяются при u = 1, а второго и третьего случаев - при u = 2. Это показано на рисунке ниже. Заметьте, что образованная кривая, изображенная на рисунке, является гладкой. Но в общем случае это не так, если, например, мы имеем дело с множественными узлами.