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е. Иногда для улучшения формы кривой
величина вектора ограничивается длиной хорды.