пипец, я думал, что только я на мехмате учился)))
12 декабря 2008 г. 22:58 пользователь Ruslan Zakirov < [email protected]> написал: > без опорных точек никак, но можно упростить. > > Берем кубический сплайн в непараметризованом виде: > 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 > -- С уважением, Анатолий Шарифулин.
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
