
- •Параметрические Кривые: Обзор
- •Примеры
- •Касательный Вектор и Касательная
- •Примеры
- •Нормальный Вектор и Кривизна
- •Кривизна
- •Еще примеры
- •Почему Направляющая Тройка Важна?
- •Вопросы Непрерывности
- •Проблемы с Параметрическим Представлением
- •Параметризация По Длине Дуги
- •Геометрическая Непрерывность
- •Рациональные Кривые
- •Рациональные Формы Стандартных Кривых
- •Теоремы Объединения [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]
- •Метод Длины Хорды
- •Центростремительный Метод
- •Получение Узлового Вектора
- •Универсальный Метод
- •Параметры и Узловые Векторы для Поверхностей
- •Глобальная Интерполяция Кривых
- •Нахождение Решения
- •Алгоритм
- •Влияние Параметров и Узлов
- •Влияние Степени
- •Почему Этот метод Назывется Глобальным?
- •Глобальная Аппроксимация Кривых
- •Значение Наименьшей Площади
- •Поиск Решения
- •Алгоритм
- •Влияние Степени и Количества Контрольных Точек
- •Почему Этот Метод Глобальный?
- •Глобальная Интерполяция Поверхностей
- •Поиск Решения
- •Почему Этот Метод Глобальный?
- •Глобальная Аппроксимация Поверхностей
- •Поиск Решения
- •Усовершенствование Алгоритма
- •Простое Сравнение
Кривизна
Тут объясняется про кривизну.
Значение кривизны, k(u), можно найти так:
k(u) = | f'(u) × f''(u) | / | f'(u) |3
Возьмем круговую спираль из предыдущего примера. Из вычислений f'(u) и f''(u), имеем
f'(u) = ( -asin(u), acos(u), b ) f'(u) × f''(u) = ( absin(u), -abcos(u), a2 ) | f'(u) | = SQRT(a2 + b2) | f'(u) × f''(u) | = aSQRT(a2 + b2) k(u) = a / (a2 + b2)
Отсюда, кривизна спирали в каждой точке постоянна и равна a/(a2 + b2).
Так как радиус окружности кривизны равен 1/k, получается, что центр этой окружности расположен на расстоянии (a2 + b2)/a от f(u) в направлении n(u).
Еще примеры
Дана прямая:
f(u) = ( a + up, b + uq, c + ur )
Имеем:
f'(u) = ( p, q, r ) | f'(u) | = SQRT(p2 + q2 + r2) f''(u) = ( 0, 0, 0 ) f'(u) × f''(u) = ( 0, 0, 0 ) k(u) = 0
То есть, в любой точке прямой ее кривизна равна 0.
Дана окружность на плоскости xy:
f(u) = ( rcos(u) + p, rsin(u) + q, 0 )
Так как она на плоскости xy, третья координата всегда 0. Имеем:
f'(u) = ( -rsin(u), rcos(u), 0 ) f''(u) = ( -rcos(u), -rsin(u), 0 ) f'(u) × f''(u) = ( 0, 0, r2 ) | f'(u) | = r | f'(u) × f''(u) | = r2 b(u) = (f'(u) × f''(u)) / | f'(u) × f''(u) | = ( 0, 0, 1 ) n(u) = (b(u) × f'(u)) / | b(u) × f'(u) | = ( -cos(u), -sin(u), 0 ) k(u) = 1/r
Таким образом, касательный вектор равен (-sin(u), cos(u), 0), бинормальный ( 0, 0, 1), а нормальный ( -cos(u), sin(u), 0). Кривизна окружности постоянна и равна 1/r. Получаем, что радиус окружности кривизны равен r и окружность сама является окружностью кривизны.
Дана кубическая кривая [space cubic] в пространстве:
f(u) = ( u, u2, u3 )
Вычисление кривизны: k(u):
f'(u) = ( 1, 2u, 3u2 ) | f'(u) | = SQRT(1 + 4u + 9u4 ) f''(u) = ( 0, 2, 6u) f'(u) × f''(u) = ( 6u2, -6u, 2 ) | f'(u) × f''(u) | = 2SQRT(1 + 9u2 + 9u4) k(u) = 2SQRT(1 + 9u2 + 9u4) / (SQRT(1 + 4u2 + 9u4 ))3
Почему Направляющая Тройка Важна?
Направляющая тройка векторов - это не только математическое понятие. Оно также дает важную информацию о движущемся объекте. Например, в полете самолет движется по кривой. То есть, он движется по направлению касательного вектора, вектор "вверх" направлен по бинормальному вектору, а показатель и направление поворота - это соответственно кривизна и направление нормального вектора.
Есть еще такой показатель, как кручение, он мы его тут обсуждать не будем. Нафиг надо... Неохота.
Вопросы Непрерывности
Как и упоминалось ранее, грани и ребра могут быть не только отрезками и многоугольниками, но и соответственно отрезками кривых и элементами поверхностей. Вот тут-то и могут появиться проблемы. На рисунке показаны две поверхности, соединяющиеся по кривой. Два отрезка кривых, показаны желтым и белым, соединяются в вершине X. Пусть эти кривые заданы уравнениями f(u) и g(v), где u и v - в интервалах [a,b] и [m,n] соответственно. Проблема в том, как проверить, сходятся ли они "гладко".
Возьмем "правый" конец отрезка кривой f(b) и "левый" конец отрезка кривой g(m). Если f(b) и g(m) равны, как, например, на рисунке, говорят, что кривые f() и g() C0 непрерывны в точке f(b)=g(m). Если для всех i <= k i-ые производные в точках f(b) и g(m) равны, говорят, что кривые Ck непрерывны в точке f(b)=g(m).
Прямо из определения следует, что, если два отрезка кривых Ck непрерывны в f(b)=g(m), они также Ci непрерывны для всех i <= k. С другой стороны, если k-ые производные двух кривых в точке соединения не равны, они не могут быть Ci непрерывными для любых i >= k.
Вот простой пример. Кривая состоит из двух отрезков парабол:
f(u) = ( u, -u2, 0 ) g(v) = ( v, v2, 0 ) ,
где f(), кривая слева, и g(), кривая справа, соответственно в пределах [-1,0] и [0,1]. Проверим, являются ли эти отрезки кривых C2 непрерывными в начале координат.
Вот инфа, необходимая для такой проверки:
f'(u) = ( 1, -2u, 0 ) f''(u) = ( 0, -2, 0 ) g'(v) = ( 1, 2v, 0 ) g''(v) = ( 0, 2, 0 )
Так как f'(0) = g'(0) = ( 1, 0, 0 ), эти кривые C1 непрерывны в начале координат. Тем не менее, так как f''(0) = ( 0, -2, 0 ) не равно g''(v) = ( 0, 2, 0 ), они не являются C2 непрерывными в начале координат. f''(u) направлено вниз, а g''(u) - вверх и оба постоянны, т.е. не зависят от u и v. Таким образом, при переходе точки через начало координат - от зеленого к желтому отрезку, вторая производная резко меняет свое направление. Получается, что эти отрезки кривых не являются C2 непрерывными в начале координат.
Найдем выражения для их кривизны:
Кривизна f(u) = 2/(1 + 4u2)1.5 Кривизна g(v) = 2/(1 + 4v2)1.5
Они имеют одинаковый вид, хотя u на отрезке [-1,0], а v - на отрезке [0,1]. Фактически, кривизна этих двух криволинейных отрезков от одной и той же кривой и, следовательно, они непрерывны по кривизне в точке соединения (т.e., f(0)=g(0))! Получается, кривые могут быть C1 непрерывными и даже непрерывными по кривизне, но в то же время не C2 непрерывными.