без опорных точек никак, но можно упростить.
Берем кубический сплайн в непараметризованом виде: y(x) = a(x-x0)^3+b(x-x0)^2+c(x-x0)+d Составляем систему y0 = y(x0) = d # известно y1 = y(x1) (1) два уравнения - 4 неизвестных. Вычисляем первую производную: y'(x) = 3a(x-x0)^2+2b(x-x0)+c y0' = y'(x0) = c # апроксимируем y1' = y'(x1) (2) Чтобы гарфик выглядел визульно плавным небходима C1 непрерывность кривой. То есть прозводная на конце одного куска равно производной в начале другого куска. Для начала и конца направляем производную по линии к последующей точке, то есть: tg(a) = (y1-y0)/(x1-x0) = y0' Для промежуточных узлов берем за производную направление от предыдущего узла к последющему, то eсть: y'0|i = (y1|i - y0|i-1)/(x1|i - x0|i-1) Вычислили производные и автоматом получаем с - равно производной. Далее умножаем (1) на 2, а (2) на (x-x0) и получаем: 2*y1 = 2a(x1-x0)^3+2b(x1-x0)^2+2c(x1-x0)+2d y1'(x-x0) = 3a(x1-x0)^3+2b(x1-x0)^2+c(x1-x0) вычитаем: y1'(x1-x0) - 2*y1 = a(x1-x0)^3 - c(x1-x0) - 2d a = ( y1'(x1-x0) - 2*y1 + c(x1-x0) + 2d )/(x1-x0) посчитать b не сложно. 2008/12/12 Orlovsky Alexander <[email protected]>: > А вот есть на Perl либа, которая мне по массиву точек (координат x,y), > расчитала бы опорные точки для кубических кривых Безье - по которым я бы > нарисовал "кубический сплайн" (функцию для рисования кубических курв Безье я > ужо нашел, нужны опорные точки :). > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Best regards, Ruslan. -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
