- •Параметрические Кривые: Обзор
- •Примеры
- •Касательный Вектор и Касательная
- •Примеры
- •Нормальный Вектор и Кривизна
- •Кривизна
- •Еще примеры
- •Почему Направляющая Тройка Важна?
- •Вопросы Непрерывности
- •Проблемы с Параметрическим Представлением
- •Параметризация По Длине Дуги
- •Геометрическая Непрерывность
- •Рациональные Кривые
- •Рациональные Формы Стандартных Кривых
- •Теоремы Объединения [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]
- •Метод Длины Хорды
- •Центростремительный Метод
- •Получение Узлового Вектора
- •Универсальный Метод
- •Параметры и Узловые Векторы для Поверхностей
- •Глобальная Интерполяция Кривых
- •Нахождение Решения
- •Алгоритм
- •Влияние Параметров и Узлов
- •Влияние Степени
- •Почему Этот метод Назывется Глобальным?
- •Глобальная Аппроксимация Кривых
- •Значение Наименьшей Площади
- •Поиск Решения
- •Алгоритм
- •Влияние Степени и Количества Контрольных Точек
- •Почему Этот Метод Глобальный?
- •Глобальная Интерполяция Поверхностей
- •Поиск Решения
- •Почему Этот Метод Глобальный?
- •Глобальная Аппроксимация Поверхностей
- •Поиск Решения
- •Усовершенствование Алгоритма
- •Простое Сравнение
Поиск Решения
Этот раздел будет немного непонятным и потребует некоторых знаний в линейной алгебре. Во-первых, давайте перепишем dk - p(tk) в другом виде:
Здесь d0, dk и dn даны, а N0,p(tk) и Nh,p(tk) можно найти вычислением N0,p(u) и Nh,p(u) для tk. Для удобства, определим новый вектор qk:
Затем, функцию суммы квадратов f() можно переписать так:
Далее, определим, на что же похож квадрат расстояния погрешности Вспомним тождество x.x = |x|2. Это значит, что скалярное произведение вектора x на самого себя дает квадрат его длины. Таким образом, квадрат погрешности можно переписать как
Затем, функция f() становится
Как минимизировать эту функцию? Функция f() - это эллиптический параболоид для переменных p1, ..., ph-1. Таким образом, мы можем продифференцировать f() по каждому pg и найти нули этих производных. Там, где производная равна нулю, функция достигает экстремума, в данном случае f() достигает минимума.
В вычислении производной по pg, заметьте, что все qk и Ni,p(tk) - это константы (т.e. без участия pk) и их частные производные по любой pg должны быть равны нулю. Таким образом, имеем
Возьмем второй элемент из суммы, который является суммой значений Ni,p(tk)pi .qk. Производная каждой из его составляющих вычисляется так:
Частная производная pi по pg не равна нулю только если i = g. Таким образом, частная производная второго члена суммирования равна:
Производная третьего члена уже сложнее; но все-таки не очень. Здесь испльзуется правило умножения (f.g)' = f'.g + f.g'.
Так как частная производная pi по pg равна нулю, если i не равно g, то частная производная третьего члена суммирования по pg равна:
Объединяя эти результаты, получаем, что частная производная f() по pg равна
Приравнивая ее к нулю, получим:
Так как имеется h-1 переменных, то g изменяется от 1 до h-1 и всего h-1 таких уравнений. Заметьте, что эти уравнения являются линейными для неизвестных pi. Перед тем, как продолжить, определим три матрицы:
Здесь k-й ряд P - это вектор pk, k-й ряд Q - это правая сторона k-го уравнения, а k-й ряд N содержит значения вычислений N1,p(u), N2,p(u), ..., Nh-1,p(u) для tk. Таким образом, если исходные точки - это s-мерные векторы, то P, N и Q - это матрицы размеров соответственно (h-1)×s, (n-1)×(h-1) и (h-1)×s.
Теперь перепишем g-е линейное уравнение
в другом виде, чтобы коэффициент при pi легче читался:
Таким образом, коэффициент при pi равен
Если взглянуть на матрицу N, то видно, что Ng,p(t1), Ng,p(t2), ..., Ng,p(tn-1) - образуют g-й столбец N, а Ni,p(t1), Ni,p(t2), ..., Ni,p(tn-1) - i-й столбец N. Заметьте, что g-й столбец N - это g-й ряд транспонированной матрицы N, NT, а коэффициент pi равен "скалярному" произведению g-го ряда NT и i-го столбца N. Имея это ввиду, систему линейных уравнений можно переписать в таком виде
Так как N и Q известны, то решая эту систему линейных уравнений относительно P, получим искомые контр. точки.
Алгоритм
Хоть разработка предыдущего раздела была долгой и нудной, результат удивительно прост: решение системы линейных уравнений примерно как в глобальной интерполяции. В итоге алгоритм для глобальной аппроксимации также довольно простой.
Вход: n+1 исходных точек d0, d1, ..., dn, степень p, и желаемое количество контр. точек h+1; Выход: Кривая B-spline степени p, определяемая h+1 контр. точками, которая аппроксимируется к исходным точкам; Алгоритм:
Получаем набор параметров t0, ..., tn и узловой вектор U; Принимаем p0 = d0, а ph = dn; for k := 1 to n-1 do
Вычисляем qk по следующей формуле:
for i := 1 to h-1 do
Вычисляем следующее и записываем в i-й столбец матрицы Q;
/* матрица Q получена */ for k := 1 to n-1 do
for i := 1 to h-1 do
Вычисляем Ni,p(tk) и записываем в ряд k и столбец i матрицы N;
/* матрица N получена */ Вычисляем M = NT.N; Находим P из M.P = Q; Ряд i матрицы P - это контр. точка pi; Контр. точки p0, ..., ph, узловой вектор U и степень p определяют аппроксимирующую кривую B-spline;