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 задавались координаты двух точек и первые производные в этих точках.