Blame demo/spline.dem

Packit 0986c0
#
Packit 0986c0
# $Id: spline.dem,v 1.5 2003/10/28 05:35:54 sfeam Exp $
Packit 0986c0
#
Packit 0986c0
# Some curve plotting using common cubic polynomial basis function for cagd.
Packit 0986c0
#
Packit 0986c0
#				Gershon Elber, Aug. 1992
Packit 0986c0
#
Packit 0986c0
set xrang [0:1]
Packit 0986c0
set grid
Packit 0986c0
set key box
Packit 0986c0
Packit 0986c0
set yrange[-0.2:1.4]
Packit 0986c0
m0(x) = 1
Packit 0986c0
m1(x) = x
Packit 0986c0
m2(x) = x**2
Packit 0986c0
m3(x) = x**3
Packit 0986c0
set title "The cubic Monomial basis functions"
Packit 0986c0
plot m0(x), m1(x), m2(x), m3(x)
Packit 0986c0
pause -1 "Press return to continue"
Packit 0986c0
Packit 0986c0
h00(x) = x**2 * ( 2 * x - 3) + 1
Packit 0986c0
h01(x) = -x**2 * (2 * x - 3)
Packit 0986c0
h10(x) = x * (x - 1)**2
Packit 0986c0
h11(x) = x**2 * (x - 1)
Packit 0986c0
Packit 0986c0
set title "The cubic Hermite basis functions"
Packit 0986c0
plot h00(x), h01(x), h10(x), h11(x)
Packit 0986c0
pause -1 "Press return to continue"
Packit 0986c0
Packit 0986c0
bez0(x) = (1 - x)**3
Packit 0986c0
bez1(x) = 3 * (1 - x)**2 * x
Packit 0986c0
bez2(x) = 3 * (1 - x) * x**2
Packit 0986c0
bez3(x) = x**3
Packit 0986c0
set title "The cubic Bezier basis functions"
Packit 0986c0
plot bez0(x), bez1(x), bez2(x), bez3(x)
Packit 0986c0
pause -1 "Press return to continue"
Packit 0986c0
Packit 0986c0
bsp0(x) = ( 1 - 3 * x + 3 * x**2 - x**3 ) / 6;
Packit 0986c0
bsp1(x) = ( 4 - 6 * x**2 + 3 * x**3 ) / 6;
Packit 0986c0
bsp2(x) = ( 1 + 3 * x + 3 * x**2 - 3 * x**3 ) / 6
Packit 0986c0
bsp3(x) = x**3 / 6
Packit 0986c0
set title "The cubic uniform Bspline basis functions"
Packit 0986c0
plot bsp0(x), bsp1(x), bsp2(x), bsp3(x)
Packit 0986c0
pause -1 "Press return to continue"
Packit 0986c0
Packit 0986c0
y0 = 1
Packit 0986c0
y1 = 0.2
Packit 0986c0
y2 = 0.8
Packit 0986c0
y3 = 0
Packit 0986c0
Packit 0986c0
x0 = 0
Packit 0986c0
x1 = 0.33
Packit 0986c0
x2 = 0.66
Packit 0986c0
x3 = 1
Packit 0986c0
Packit 0986c0
xv0 = -0.3
Packit 0986c0
yv0 = 0.5
Packit 0986c0
xv1 = -0.4
Packit 0986c0
yv1 = 0.2
Packit 0986c0
Packit 0986c0
set arrow from x0,y0 to x1,y1 nohead
Packit 0986c0
set arrow from x1,y1 to x2,y2 nohead
Packit 0986c0
set arrow from x2,y2 to x3,y3 nohead
Packit 0986c0
Packit 0986c0
cub_bezier_x(t) = bez0(t) * x0 + bez1(t) * x1 + bez2(t) * x2 + bez3(t) * x3
Packit 0986c0
cub_bezier_y(t) = bez0(t) * y0 + bez1(t) * y1 + bez2(t) * y2 + bez3(t) * y3
Packit 0986c0
cub_bsplin_x(t) = bsp0(t) * x0 + bsp1(t) * x1 + bsp2(t) * x2 + bsp3(t) * x3
Packit 0986c0
cub_bsplin_y(t) = bsp0(t) * y0 + bsp1(t) * y1 + bsp2(t) * y2 + bsp3(t) * y3
Packit 0986c0
Packit 0986c0
set parametric
Packit 0986c0
set trange [0:1]
Packit 0986c0
set title "The cubic Bezier/Bspline basis functions in use"
Packit 0986c0
plot cub_bezier_x(t), cub_bezier_y(t) with lines lt 2,\
Packit 0986c0
     cub_bsplin_x(t), cub_bsplin_y(t) with lines lt 3
Packit 0986c0
pause -1 "Press return to continue"
Packit 0986c0
Packit 0986c0
unset arrow
Packit 0986c0
#
Packit 0986c0
# Note the arrows here, scaled by 1/3 so they will fit into plotting area
Packit 0986c0
#
Packit 0986c0
set arrow from x1,y1 to x1+xv0/3,y1+yv0/3
Packit 0986c0
set arrow from x2,y2 to x2+xv1/3,y2+yv1/3
Packit 0986c0
set arrow from x1,y1 to x1+xv0,y1+yv0
Packit 0986c0
set arrow from x2,y2 to x2+xv1,y2+yv1
Packit 0986c0
Packit 0986c0
cub_hermit_x1(t) = h00(t) * x1 + h01(t) * x2 + h10(t) * xv0 + h11(t) * xv1
Packit 0986c0
cub_hermit_y1(t) = h00(t) * y1 + h01(t) * y2 + h10(t) * yv0 + h11(t) * yv1
Packit 0986c0
cub_hermit_x2(t) = h00(t) * x1 + h01(t) * x2 + h10(t) * xv0*3 + h11(t) * xv1*3
Packit 0986c0
cub_hermit_y2(t) = h00(t) * y1 + h01(t) * y2 + h10(t) * yv0*3 + h11(t) * yv1*3
Packit 0986c0
set title "The cubic Hermite basis functions in use"
Packit 0986c0
plot cub_hermit_x1(t), cub_hermit_y1(t) with lines lt 2,\
Packit 0986c0
     cub_hermit_x2(t), cub_hermit_y2(t) with lines lt 3
Packit 0986c0
pause -1 "Press return to continue"
Packit 0986c0
reset