Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


5-3 КУБИЧЕСКИЕ СПЛАЙНЫ

В промышленном производстве, например, судо-, автомобиле- и авиастроении, окончательная форма в реальном или близком к нему масштабе определяется в процессе доводки.

Автоматизация этого процесса представляла значительный интерес для машинной графики. Форма математического сплайна повторяет контур физического сплайна (рис. 5-4), т.е. гибкой деревянной или пластмассовой линейки, проходящей через определенные точки. Для изменения формы сплайна используются свинцовые грузики. Меняя их количество и расположение, получившуюся кривую стараются сделать более гладкой, красивой и «приятной для глаза».

Если рассматривать физический сплайн как тонкую гибкую рейку, его форма (отклонение ) определяется уравнением Эйлера (5-2) для момента изгиба  вдоль рейки:

,

где  - модуль Юнга, зависящий от свойств материала рейки,  - момент инерции, определяемый формой кривой,  - радиус кривизны.

Для малых отклонений  радиус приближенно равен

,

где штрих обозначает производную по  - расстоянию вдоль рейки, а  - отклонение рейки. Уравнение Эйлера принимает вид

.

Пусть грузики действуют как простые подпорки, тогда момент изгиба между ними изменяется линейно. Подставляя  в уравнение Эйлера, получаем

и после двойного интегрирования

.

Таким образом, форма сплайна задается кубическим полиномом.

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

Уравнение одного параметрического сегмента сплайна таково:

, ,             (5-1)

где  и  - значения параметров в начале и конце сегмента.  - вектор к любой точке сегмента.  - это векторно-значная функция, где три составляющие  - декартовы координаты вектора.

258.jpg

Рис. 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)

260.jpg

Рис. 5-6 Два кусочно кубических сегмента сплайна.

Для первого куска сплайна параметр изменяется в пределах . Подставим  в уравнение (5-9):

.

Для второго участка сплайна параметр изменяется в диапазоне . Подставим в уравнение (5-9) значение  в начале второго участка

.

Приравнивая полученные результаты и пользуясь уравнениями (5-6a,b) и (5-7а), получим

.

Левая часть этого уравнения представляет кривизну в конце первого сегмента, а правая - в начале второго. Домножим на  и сгруппируем члены:

.                       (5-10)

Отсюда определяется , неизвестный касательный вектор в точке соединения. Отметим, что в окончательном уравнении опять присутствуют значения параметра  в концах сегментов  и .

Полученную формулу можно обобщить для  точек, и для  сегментов кубического сплайна получить непрерывность второго порядка в точках соединения.

261.jpg

Рис. 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)

называются весовыми функциями.

265.jpg

Рис. 5-8 Весовые функции кубического сплайна для

Пользуясь этими определениями, запишем уравнение (5-20) в матричном виде

,                    (5-22)

где  - матрица весовой функции

                  (5-23)

и

                      (5-24)

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

Из уравнения (5-21) видно, что каждая весовая функция имеет третий порядок. Любая точка на сегменте кубического сплайна это взвешенная сумма конечных точек и касательных векторов. Коэффициенты  выступают в роли весовых функций. На рис. 5-8 изображены  для . Из рисунка видно, что  и , т.е. кривая проходит через вектор-точку . Аналогично  и , т.е. кривая также проходит через вектор-точку . Далее отметим симметрию  и , и  и . Фактически . Наконец, обратим внимание на относительный порядок , ,  и . Значительная разница величин говорит о том, что в общем случае положение конечных точек имеет большее влияние, чем касательные векторы.

Вспомним, что кусочный кубический сплайн определяется точками, векторами касательных и величинами параметра, т. е.  в концах всех сегментов. Выбор  влияет на гладкость кривой.

Непрерывность второй производной в точках внутреннего соединения сама по себе не обеспечивает гладкости кривой в смысле минимальности кривизны вдоль нее. Подбирая соответствующие значения, можно минимизировать коэффициенты  и  для каждого сегмента и достичь большей гладкости кривой. Обычно эти дополнительные вычисления не требуются. Для практических целей применяются более простые методы, наподобие рассмотренных здесь.

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

Рассмотрим пример.

Пример 5-2 Кубический сплайн

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

Сначала найдем

,

,

.

Внутренние касательные векторы  и  вычисляются из уравнения (5-15):

.

267.jpg

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

Сделав подстановку, получим

или

.

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

.

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

,

,

,

и второго:

,

,

,

.

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

и при .

.

Полный результат приведен в табл. 5-1. Кубический сплайн показан на рис. 5-9.

Таблица 5-1 Результаты для кубического сплайна

Сегмент

1

 

2

 

3

 

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

 



<< ПредыдущаяОглавлениеСледующая >>