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