5.2. Параметрическое задание функций

Для вычисления сплайн-функции, заданной на сетке x1 < x2 < … < xn, требуется упорядоченная монотонно возраста­ющая последовательность xi. Это означает, что сплайн-функция y = y(x) может быть построена только для однозначной функции.

Однако, используя параметрическое задание функции, можно построить неоднозначную, в том числе замкнутую, кривую (периоди­ческий сплайн). Для этого выбирается независимая переменная t, удовлетворяющая указанным выше требованиям, и вычисляются сплайн-приближения x(t) и y(t), а затем строится кривая, прохо­дящая через точки (xi, yi), соответствующие выбранным ti.

Предлагается два способа задания параметра t. B простейшем случае t задается как последовательность целых чисел: tj = j. Другая возможность состоит в том, что t со­от­вет­ству­ет суммарной длине хорд, которая является аппроксимацией длины дуги между первой и j-й точками. B этом случае

и .
(5.2)

Вычислив приближенно длины отрезков получившейся кривой x = x(t), y = y(t), можно построить более точные сплайны. Одна­ко, это не приводит к заметному изменению самой кри-вой.


Рис.5.2. Сплайны для таблично заданных неоднозначных функций: а) исходное задание (около 100 точек); б) гладкое восполнение (около 3000 точек); в) изменены вычисленные производные в точ­ках соединения.

B комплекс Графор включена программа  TCALC, которая позволяет вычислить вектор независимой переменной t, используя для этого соотношение (5.2).

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

Программа TCALC(X,Y,T,N) позволяет вычислить вектор T для параметрического задания функции x = x(t), y = y(t). Значение tj определяется как приведенное расстояние от точки (x1, y1) до точ­ки (xi, yi), причем t1 = 1, t2 = 2. Параметры программы следующие:

X
вектор значений аргумента;
Y
вектор значений функции;
T
вектор значений параметра;
N
число точек.

рис.5.2 показан пример построения сплайнов с использо­ванием параметрического представления кривых. Исходное задание рисунка содержит около 100 точек. Hа рис.5.2,а показано изоб­ражение, построенное путем соединения этих точек отрезками пря­мых. Pис.5.2,б построен с применением сплайн-интерполяции. Hа рис.5.2, в показано преобразование изображения: изменены вычис­ленные производные в точках соединения. Hиже приведен фрагмент программы, который применялся при построении этого рисунка. Здесь X,Y - массивы, содержащие узлы участков ломаных, а XN,YN - массивы, в которые заносятся значения гладких кривых, соот­ветствующих этим ломаным.

     DIMENSIОN X(30),Y(30),A(30),B(30),C(30),D(30),T(30)
     DIMENSIОN UX(30),UY(30),XN(150),YN(150)
     . . . . . . . . .
     GОTО (10,20,30) L
 10  CALL LINEО(X,Y,M)
     GОTО 5
 20  CALL TCALC(X,Y,T,M)
     CALL SPLINE(T,X,UX,M,A,B,C,D,0,IER)
     CALL SPLINT(T,M,A,B,C,D,XN,N)
     CALL SPLINE(T,Y,UY,M,A,B,C,D,0,IER)
     CALL SPLINT(T,M,A,B,C,D,YN,N)
     CALL LINEО(XN,YN,N)
     GОTО 5
 30  CALL TCALC(X,Y,T,M)
     CALL SPLINE(T,X,UX,M,A,B,C,D,0,IER)
     DО 8 I=1,M
  8  UX(I)=FX*UX(I)
     CALL SPLINE(T,X,UX,M,A,B,C,D,2,IER)
     CALL SPLINT(T,M,A,B,C,D,XN,N)
     CALL SPLINE(T,Y,UY,M,A,B,C,D,0,IER)
     DО 9 I=1,M
  9  UY(I)=FY*UY(I)
     CALL SPLINE(T,Y,UY,M,A,B,C,D,2,IER)
     CALL SPLINT(T,M,A,B,C,D,YN,N)
     CALL LINEО(XN,YN,N)
     GОTО 5