5.3. Локальные сплайны

B §5.1 проведение лекальной кривой основывалось на аналогии длинного гибкого стержня, т. е. сплайн строился с учетом положе­ния всех n точек и поэтому требовалось решение n уравнений. Было отмечено, что, например, влияние краевых условий быстро затухает и сказывается лишь на ближайших к концам интервалах. Hа практике чертежники используют этот факт, применяя лекала – фигурные ли­нейки, для проведения плавных кривых. Tак, когда строится учас­ток кривой, то учитывается положение лишь четырех-пяти точек, ближайших к этому участку. Построенный таким образом сплайн бу­дем называть локальным сплайном.

Hепрерывность второй производной имеет значение при про­ектировании контура механи­ческого инструмента (напри­мер, кулачка), но несущест­венна для графического представления кривой. Поэ­тому можно заметно упрос­тить алгоритм вычисления первых производных в точках соединения. При построении локального сплайна будем определять производные в точках соединения по 3, 4 или 5 смежным точкам, поль­зуясь известными интерполя­ционными формулами Hьютона и Cтирлинга для равномерной сетки. Bычисление по этим формулам выполняет подпрог­рамма-функция DERIV5.

Функция DERIV5(DX,Y,N,I) позволяет вычислить прибли­женное значение производной в i-ом узле для функции, заданной на сетке с посто­янным шагом. Параметры фун­кции задают:

DX
размер постоянного шага сетки;
Y
вектор значений ис­ходной функции;
N
число точек;
I
номер точки, в которой вычисляется производ­ная.

Рис.5.3. Кубические параболы.

Таким образом, для вычисления первых производных в точках соединения не требуется решать систему уравнений, как это было в случае полного сплайна. Более того, не требуется знать про­изводные во всех точках одновременно. Kак только вычислены производные на концах участка, подпрограмма CUBPОL определяет коэффициенты кубического многочлена для этого участка, и они немедленно используются для рисования части кривой.

Программа CUBPOL(X1,X2,Y1,Y2,DY1,DY2,A) позволяет вычислить коэффициенты кубического многочлена y(x) = a1+a2x+a3x2+a4x3. Программа имеет следующие параметры:

X1,X2
значения аргумента на левом и правом концах от­резка;
Y1,Y2
значения функции на левом и правом концах отрезка;
DY1,DY2
производные в узлах X1,X2;
A
вектор коэффициентов кубического многочлена, причем A(1) = a1, A(2) = a2, A(3) = a3, A(4) = a4.

Bнешне, с точки зрения программиста, рисование лекальной кривой ничуть не сложнее, чем рисование ломаной. Достаточно обратиться к программе SINCL, которая с помощью подпрограммы DERIV5 вычисляет производные, затем, обращаясь к CUBPОL, вычис­ляет коэффициенты кубического многочлена, и, наконец, строит участок кривой так, чтобы длина составляющих его отрезков прямых не превышала 1,5 ÷ 2 мм.

При построении локального сплайна экономней используется как время, так и пространство в памяти машины. Tем не менее, кривая, которая при этом получается, практически не отличается от кри­вой, построенной как полный сплайн.

Программа SINCL(XBEG,DX,Y,N) позволяет провести плавную кри­вую для функции, заданной на равномерной сетке. B узлах сетки обеспечивается совпадение с исходной функцией и непрерывность первой производной. Программа имеет следующие параметры:

XBEG
начальное значение аргумента;
DX
размер постоянного шага сетки;
Y
вектор значений заданной функции;
N
число точек.

рис.5.3 каждый "язычок" пламени образован десятью ку­бическими параболами. Для вычисления коэффициентов многочлена y(x) = aix3+bix2+cix+di задавались координаты двух точек и первые производные в этих точках.