3.5.2. Сплайновые кривые Catmull-Rom
По заданному массиву
(элементарная) онлайновая кривая Catmull-Rom определяется при помощи векторного уравнения, имеющего следующий вид:
Матричная запись параметрических уравнений, описывающих элементарную сплайновую кривую
где
Матрица
называется базисной матрицей сплайна Catmull-Rom.
Рис. 3.30
Касательная к элементарной сплайновой кривой Catmull-Rom в концевой точке
параллельна отрезку
а в концевой точке
отрезку
(рис. 3.30).
Составные сплайновые кривые Catmull-Rom
(Составной) стайновой кривой Catmull-Rom, определяемой массивом
называется кривая которую можно представить в виде объединения элементарных сплайновых кривых Catmull-Rom
кривая описывается параметрическим уравнением следующего вида:
где
базисная матрица сплайна Catmull-Rom.
Рассматривая составную кривую у как целое, более естественно пользоваться единой параметризацией. Взяв за
произвольное число (например, положив
определим узлы параметризации по формуле
Тогда уравнение сплайновой кривой
можно записать так:
где
- параметрическое векторное уравнение
элементарной сплайновой кривой Catmull-Rom
Свойства составной сплайновой кривой Catmull-Rom
Составная кубическая сплайновая кривая Catmull-Rom, порожденная массивом
1+ является
-гладкой кривой;
2+ интерполирует вершины
в точках стыка элементарных кривых и выполняются равенства
3+ касательный вектор в вершине
параллелен отрезку, соединяющему
(рис. 3.31);
4- не лежит в выпуклой оболочке, порожденной заданным массивом;
Рис. 3.31
5+ изменение одной вершины в массиве приводит к изменению только части кривой: при изменении вершины
нужно пересчитать параметрические уравнения только четырех кривых:
6+ при добавлении в массив одной вершины возникает необходимость пересчета параметрических уравнений только четырех элементарных кривых;
7+ составная кубическая сплайновая кривая Catmull-Rom аффинно-инвариантна;
8- заданный массив однозначно определяет составную сплайновую кривую Catmull-Rom, не давая возможности хоть как-то влиять на ее форму;
9- сплайновая кривая Catmull-Rom проективно-неинвариантна. Программная реализация
Описанный алгоритм реализован в виде функции на языке С. Обращение к ней имеет следующий вид:
(см. скан)
Приведем полностью текст этой программы.
(см. скан)
Приведем пример использования функции для построения плоской сплайн-кривой.
(см. скан)