Кривые и поверхности в компьютерной геометрии, I
Составной сплайн Эрмита
Составной сплайн Эрмита предназначен для построения кривой заданной степени гладкости, проходящей через заданную последовательность опорных точек. Он получается путем соединения соседних опорных точек сплайнами Эрмита одного и того же порядка. При этом значения производных радиус-вектора в опорных точках (требуемые для построения составляющих сплайнов Эрмита) необходимо как-то доопределять. Это можно сделать по-разному, исходя из различных соображений. Простые способы доопределения производных приводят к простым вычислениям, однако при неравномерном расположении опорных точек такой сплайн может образовывать необоснованные петли и изгибы. Более сложные способы доопределения производных (псевдоупругие сплайны Эрмита, например) дают хорошие результаты, но приводят к большим вычислениям.
Пример 5.2.3. Составной сплайн Эрмита порядка 3 ( m = 1 ). Для построения такого сплайна необходимо предварительно доопределить первые производные радиус-вектора в опорных точках Для промежуточных и крайних опорных точек способ доопределения различен.
-
Промежуточные опорные точки. В промежуточных опорных точках можно, например, положить производные равными
т. е. рассмотреть аппроксимацию производных.
Однако при неравномерном расположении опорных точек такой способ доопределения производных может привести к появлению необоснованных петель. Поэтому обычно пользуются другими схемами доопределения Например, можно положить
или
где - расстояние между оседними опорными точками.
-
Крайние опорные точки. В двух крайних опорных точках если в них не требуется гладко стыковать сплайн с другими, уже заданными кривыми, обычно пользуются условием равенства нулю третьих производных радиус-вектора на концах (условие свободных концов кривой): Можно показать, что соответствующие значения первых производных на концах составного сплайна Эрмита третьего порядка даются формулами
Задача 5.2.3. С помощью программы, рисующей составной сплайн Эрмита третьего порядка, изучить поведение этого сплайна в зависимости от расположения опорных точек, конфигурации узлов и способа доопределения производных в промежуточных точках (поменяйте в программе способ доопределения производных в промежуточных точках на другой и сравните результат).
Пример 5.2.4. Составной сплайн Эрмита третьего порядка с шестью управляемыми мышью опорными точками:
In[5]:= DynamicModule Г {pts , ptsO, n, t, tt, i, j, S, gO, gl, h0, hi, w, q, r} , pts0 = {{6.0, -5.0}, {0.0, 0.0}, {4.8, 5.2}, {0.3, 7.5}, {6.8, 12.2}, {-2.3, 0.0}}; tt= {1.0, 2.0, 3.0, 6.0, 7.0, 8.0}; n = Length[ptsO] - 1; Manipulate [ S = Table [{r[i, t, pts] , tt [ [i] ] <=. t <== tt [ [i + 1] ] } , {i, 1, n} ] ; Show[{ParametricPlot[ Piecewise[S] , {t, tt[ [1] ] , tt [ [-1] ] } , PlotRange -> {{-10, 20}, {-10, 20}} ], Graphics [{Red, Text[ToString[* - 1] , pts [ [*] ] +{1.2, 0}] &/@Range [n + 1] , Text["Составной сплайн Эрмита 3 порядка", {7, -9}]}]}], {{pts, ptsO} , Locator}] , Initialization: -> ( g0 [x_] : = 2 x3 - 3 x2 + 1; gl [x_] : = x3 - 2 x2 + x; h0 [x_]: = 3 x2 - 2 x3 ; h1 [x_] : = x3 - x2 ; w[i_, t_] := (t-tt[[i]]) / (tt[[i + l]] -tt[[i]]); q[i_, pts_] : = If[i==l, 2 (pts [[2]] -pts[[l]]) - (pts[[3]] -pts[[l]]) / (tt[[3]] -tt[[l]]), If[i==n + 1, 2 (pts [ [n + 1] ] - pts [ [n] ] ) - (pts[[n + 1]] -pts[[n-l]]) / (tt[[n + l]] -tt[[n-l]]) , (pts[ [i + 1]] -pts[[i-l]]) / (tt[[i + l]] -tt[[i-l]])]]; r [i_, t_, pts_] : = gO [w[i, t] ] * pts[ [i] ] + gl [w[i, t] ] *q[i, pts] + h0[w[i, t] ] *pts[ [i + 1] ] +hl[w[i, t] ] *q[i + 1, pts] ) ]
Псевдоупругие сплайны Эрмита
При построении составного сплайна Эрмита третьего порядка неизвестные производные в точках могут быть определены также из следующих соображений.
Представим себе, что через точки должна пройти упругая нить, которая стремится занять положение, соответствующее минимуму запасенной энергии ее внутренних сил упругости. Эта энергия, как известно из физики, выражается интегралом от квадрата кривизны k(s) кривой, по которой пролегает нить:
( 5.3) |
где s - натуральный параметр на кривой, а c(s) - коэффициент упругости нити. Мы будем считать, что c(s) = c = const.
-
Предположим, что искомый сплайн задается графиком функции y = y(x). Поскольку минимизация энергии упругих сил (5.3) является, вообще говоря, достаточно трудоемкой вычислительной задачей, мы заменим ее на более простую, но достаточную для наших целей задачу. А именно, заменим энергию E, задаваемую формулой (5.3), на псевдоупругую энергию, заменив кривизну k на модуль второй производной Это приводит к задаче минимизации интеграла
( 5.4) за счет выбора величин где Условие стационарной точки целевой функции (5.4), получаемое приравниванием к нулю ее частных производных, имеет вид
( 5.5) Пусть точки на имеют координаты соответственно. Будем считать, что для любого Введем обозначения: Тогда местный параметр на участке будет равен На отрезке обозначим через
Согласно (5.1), на участке зависимость
имеет вид
( 5.6) поскольку и
Подставляя (5.6) в (5.5), интегрируя по частям, пользуясь явным видом функций из (5.2), а также тем, что приходим к следующей системе уравнений:
( 5.7) которая обозначает, что вторые производные а следовательно, и кривизна кривой, должны быть непрерывны в точках стыковки а на концах ? обращается в нуль.
Подставим теперь (5.6) в (5.7) и снова воспользуемся явным видом функций из (5.2). Используя равенства и получим систему уравнений на c ленточной 3-шаговой матрицей:
Это - система из ( n + 1 )-го уравнения с ( n + 1 ) неизвестным Поскольку матрица системы имеет ленточный вид, то она допускает численное решение за линейное по n время.
-
Теперь рассмотрим более общий случай параметрически заданного сплайна r = r(t) (т. е. не обязательно в виде графика функции y = y( x) ).
На участке между точками и обозначим искомый сплайн Эрмита порядка 3 через где - местный параметр. Имеем, согласно (5.1),
( 5.8) |
К этому надо добавить условия непрерывности первых производных в точках стыковки:
( 5.9) |
где Будем считать, что т. е. параметр пропорционален натуральному. Тогда и местный параметр будет также пропорционален натуральному. Обозначим Из пропорциональности параметра натуральному следует, что на участке Следовательно, кривизна пропорциональна а потому псевдоупругая энергия сплайна Эрмита может быть определена как
( 5.10) |
При этом, согласно (5.8) и (5.9), выражается через и Условие стационарности (необходимое условие экстремума функции (5.10)) имеет вид
( 5.11) |
Подставляя (5.8) и (5.9) в (5.11), приведем (5.11) к виду
где Подставим сюда (5.8). Получим после алгебраических преобразований следующее выражение:
где Эта система состоит из уравнений c неизвестными Как и выше, матрица системы является ленточной, т. е. ненулевые элементы в ней расположены лишь в узкой окрестности главной диагонали. Такие системы уравнений допускают численное решение за линейное время с помощью хорошо разработанных алгоритмов.
Задача 5.2.4. Написать программу построения псевдоупругого сплайна Эрмита на плоскости, имеющего вид графика функции и проходящего через заданную последовательность опорных точек с возрастающими абсциссами. Сравнить псевдоупругий сплайн Эрмита и составной сплайн Эрмита третьего порядка, проходящие через одни и те же опорные точки, путем изображения обоих сплайнов на одном графике.