5-3 КУБИЧЕСКИЕ СПЛАЙНЫ
В промышленном производстве, например, судо-, автомобиле- и авиастроении, окончательная форма в реальном или близком к нему масштабе определяется в процессе доводки.
Автоматизация этого процесса представляла значительный интерес для машинной графики. Форма математического сплайна повторяет контур физического сплайна (рис. 5-4), т.е. гибкой деревянной или пластмассовой линейки, проходящей через определенные точки. Для изменения формы сплайна используются свинцовые грузики. Меняя их количество и расположение, получившуюся кривую стараются сделать более гладкой, красивой и «приятной для глаза».
Если рассматривать физический сплайн как тонкую гибкую рейку, его форма (отклонение
) определяется уравнением Эйлера (5-2) для момента изгиба
вдоль рейки:
,
где
- модуль Юнга, зависящий от свойств материала рейки,
- момент инерции, определяемый формой кривой,
- радиус кривизны.
Для малых отклонений
радиус приближенно равен
,
где штрих обозначает производную по
- расстоянию вдоль рейки, а
- отклонение рейки. Уравнение Эйлера принимает вид
.
Пусть грузики действуют как простые подпорки, тогда момент изгиба между ними изменяется линейно. Подставляя
в уравнение Эйлера, получаем

и после двойного интегрирования
.
Таким образом, форма сплайна задается кубическим полиномом.
В общем случае математический сплайн это кусочный полином степени
с непрерывной производной степени
в точках соединения сегментов. Так, например, кубический сплайн имеет в точках соединения непрерывность второго порядка. Кусочные сплайны из многочленов невысокого порядка очень удобны для интерполяции кривых, так как они не требуют больших вычислительных затрат и не вызывают численных отклонений, свойственных многочленам высокого порядка. По аналогии с физическими сплайнами обычно используется серия кубических сегментов, причем каждый сегмент проходит через две точки. Кубический сплайн удобен еще и тем, что это кривая наименьшего порядка, допускающая точки перегиба и изгиб в пространстве.
Уравнение одного параметрического сегмента сплайна таково:
,
, (5-1)
где
и
- значения параметров в начале и конце сегмента.
- вектор к любой точке сегмента.
- это векторно-значная функция, где три составляющие
- декартовы координаты вектора.

Рис. 5-5 Один сегмент кубического сплайна.
Каждая составляющая имеет вид, похожий на
, т.е.
,
,
,
,
,
.
Постоянные коэффициенты
вычисляются исходя из четырех граничных условий для сегмента сплайна. Запишем уравнение (5-1) в виде
,
. (5-2)
Пусть
и
- векторы концов сегмента (см. рис. 5-5). Пусть также
и
, производные по
, будут касательными векторами в концах сегмента. Дифференцируя уравнение (5-1), получим
,
. (5-3)
Запишем результат
,
. (5-4)
Предположим, без потери общности, что
, и применим граничные условия
, (5-5а)
, (5-5b)
, (5-5с)
. (5-5d)
Получим четыре уравнения для неизвестных
:
, (5-6а)
, (5-6b)
, (5-6c)
. (5-6d)
Решения для
и
имеют вид:
(5-7a)
и
. (5-7b)
Величины
,
,
и
задают сегмент кубического сплайна. Очевидно, что форма сегмента зависит от положения и касательных векторов в концах сегмента. Далее, заметим, что в результатах присутствует значение параметра
в конце сегмента. Так как каждая конечная точка и вектор касания имеют три компоненты, параметрическое уравнение кубической пространственной кривой зависит от двенадцати векторных компонент и значения параметра
в конце сегмента.
Подставив уравнения (5-6) и (5-7) в (5-1), получим уравнение для одного сегмента кубического сплайна:

. (5-8)
Это уравнение для одного сегмента. Чтобы получить кривую целиком, нужно соединить множество сегментов. На рис. 5-6 показаны два соседних сегмента. Если известны векторы
,
,
, касательные векторы
,
,
и значения параметров
,
, то форма каждого сегмента определяется из уравнения (5-8). Однако маловероятно, что известен касательный вектор
в точке соединения. К счастью, его можно вывести из условия непрерывности.
Вспомним, что кусочный сплайн степени
имеет непрерывность степени
в точках соединения; непрерывность кубического сплайна равна двум. Для этого должна быть непрерывна вторая производная
или кривизна линии. Дважды продифференцировав уравнение (5-1), получим
,
. (5-9)

Рис. 5-6 Два кусочно кубических сегмента сплайна.
Для первого куска сплайна параметр изменяется в пределах
. Подставим
в уравнение (5-9):
.
Для второго участка сплайна параметр изменяется в диапазоне
. Подставим в уравнение (5-9) значение
в начале второго участка
.
Приравнивая полученные результаты и пользуясь уравнениями (5-6a,b) и (5-7а), получим

.
Левая часть этого уравнения представляет кривизну в конце первого сегмента, а правая - в начале второго. Домножим на
и сгруппируем члены:
. (5-10)
Отсюда определяется
, неизвестный касательный вектор в точке соединения. Отметим, что в окончательном уравнении опять присутствуют значения параметра
в концах сегментов
и
.
Полученную формулу можно обобщить для
точек, и для
сегментов кубического сплайна получить непрерывность второго порядка в точках соединения.

Рис. 5-7 Обозначения множества кусочно кубических сегментов сплайна.
Обобщенное уравнение для двух любых соседних сегментов сплайна
и
в обозначениях рис. 5-7 имеет вид:

(5-11)
для первого сегмента и

(5-12)
для второго, так как для каждого сегмента параметр начинает изменяться с нуля, для первого
и для второго -
.
Приравнивание вторых производных в точках стыковки для любых соседних сегментов,
, дает общий результат, эквивалентный уравнению (5-10),

,
, (5-13)
откуда определяется касательный вектор в точках соединения любых двух сегментов
и
.
Рекурсивное использование уравнения (5-13) для всех сегментов сплайна порождает
уравнений касательных векторов
,
. В матричной форме:

(5-14)
или
.
Матрица
неквадратная, так как имеется только
уравнений для
векторов, и ее нельзя обратить и получить решение для
. Если предположить, что известны касательные векторы на концах кривой
и
, проблема разрешается. Теперь матрица имеет вид

(5-15)
или
,
где матрица
квадратная и обратимая. Заметим также, что
трехдиагональная, что снижает вычислительные затраты на ее обращение. Далее, матрица
диагонально доминантная. Отсюда следует, что у нее существует единственное решение:
. (5-16)
Если нам известны
, то легко определить коэффициенты
для каждого сегмента сплайна. Обобщая уравнения (5-6)-(5-11), получим
,
,
,
.
Так как
и
- это векторные величины, то и
тоже векторные; если
и
имеют
,
,
составляющие, значит, и
также имеет эти составляющие.
В матричной форме уравнение любого сегмента сплайна
таково:

. (5-17)
Пусть требуется задать кубический сплайн, проходящий через
точек
,
с касательными векторами на концах
и
. Из уравнения (5-16) находим внутренние касательные векторы
,
. Затем из уравнения (5-17) с известными координатами концов каждого сегмента и касательными векторами определяются
,
, для каждого сегмента. Окончательное обобщение уравнения (5-1)
,
,
, (5-18)
используется для расчета сегмента сплайна.
В матричном виде уравнение (5-18) выглядит следующим образом:
,
. (5-19)
Подставляя уравнение (5-17) и перегруппируя члены, получим
,
,
, (5-20)
где

, (5-21a)
, (5-21b)
, (5-21с)
, (5-21d)
называются весовыми функциями.

Рис. 5-8 Весовые функции кубического сплайна для 
Пользуясь этими определениями, запишем уравнение (5-20) в матричном виде
, (5-22)
где
- матрица весовой функции
(5-23)
и
(5-24)
содержит геометрическую информацию. Как будет видно из дальнейшего, уравнения типа (5-22), т.е. матрица весовой функции, умноженная на матрицу геометрических условий, часто применяются для описания кривых и поверхностей.
Из уравнения (5-21) видно, что каждая весовая функция имеет третий порядок. Любая точка на сегменте кубического сплайна это взвешенная сумма конечных точек и касательных векторов. Коэффициенты
выступают в роли весовых функций. На рис. 5-8 изображены
для
. Из рисунка видно, что
и
, т.е. кривая проходит через вектор-точку
. Аналогично
и
, т.е. кривая также проходит через вектор-точку
. Далее отметим симметрию
и
, и
и
. Фактически
. Наконец, обратим внимание на относительный порядок
,
,
и
. Значительная разница величин говорит о том, что в общем случае положение конечных точек имеет большее влияние, чем касательные векторы.
Вспомним, что кусочный кубический сплайн определяется точками, векторами касательных и величинами параметра, т. е.
в концах всех сегментов. Выбор
влияет на гладкость кривой.
Непрерывность второй производной в точках внутреннего соединения сама по себе не обеспечивает гладкости кривой в смысле минимальности кривизны вдоль нее. Подбирая соответствующие значения, можно минимизировать коэффициенты
и
для каждого сегмента и достичь большей гладкости кривой. Обычно эти дополнительные вычисления не требуются. Для практических целей применяются более простые методы, наподобие рассмотренных здесь.
Один метод вычисления
- установить величины параметров равными длинам хорд между соседними точками. При этом качество кривой удовлетворяет требованиям большинства прикладных задач. Другой метод состоит в том, что для нормализации вариации
полагается равным единице у каждого сегмента сплайна. Такой выбор упрощает вычисления (см. разд. 5-4). Как видно из приведенных выше уравнений, любой выбор
приводит к другим коэффициентам, и, следовательно, получаются различные кривые, проходящие через заданные точки.
Рассмотрим пример.
Пример 5-2 Кубический сплайн
Пусть даны четыре вектор-точки на плоскости: , , , (см. рис. 5-9). Найти кусочный кубический сплайн, проходящий через них, используя хордовую аппроксимацию . Касательные векторы в концах: и . Найти промежуточные точки при для каждого сегмента.
Сначала найдем
,
,
.
Внутренние касательные векторы и вычисляются из уравнения (5-15):

.

Рис. 5-9 Кусочный кубический сплайн. (а) вычислены с помощью хордовой аппроксимации; (b) нормализованы к 1.
Сделав подстановку, получим



или
.
С помощью инверсии и умножения вычисляются касательные векторы

.
Из уравнения (5-21) находим весовые функции первого сегмента:
,
,
,

и второго:
,
,
,
.
Точка на первом сегменте сплайна при получается из уравнения (5-22), , т.е.


и при .

.
Полный результат приведен в табл. 5-1. Кубический сплайн показан на рис. 5-9.
Таблица 5-1 Результаты для кубического сплайна
|
Хотя из весовых функций (см. (5-21)) видно, что касательные векторы в концах меньше влияют на форму сплайна, чем положение концевых точек, их эффект может оказаться значительным. На рис. 5-10 изображен один симметричный сегмент сплайна с одинаковым направлением касательных векторов, но разной величины. Направления касательных векторов обозначены углом
, а их относительная величина - длиной этих векторов. Если величина значительно меньше длины хорды
, то кривая выпукла на концах и лежит внутри треугольника из хорды и касательных. При возрастании величины кривая постепенно становится вогнутой и выходит за треугольник. В этом случае при величине вектора
у кривой появляется вершина (см. рис. 5-10d). При еще больших величинах появляется петля, как видно из рис. 5-10е. Иногда для улучшения формы кривой величина вектора ограничивается длиной хорды.