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
- номер точки, в которой вычисляется производная.
Таким образом, для вычисления первых производных в точках соединения не требуется решать систему уравнений, как это было в случае полного сплайна. Более того, не требуется знать производные во всех точках одновременно. 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
- число точек.
Hа рис.5.3 каждый "язычок" пламени образован десятью кубическими параболами. Для вычисления коэффициентов многочлена y(x) = aix3+bix2+cix+di задавались координаты двух точек и первые производные в этих точках.