// Illustration de l'interpolation spline.
// Montre la stabilité de l'interpolation spline

// On peut mettre autant de points que l'on veut, l'interpolation est stable.
// Il y aura  2*aMax+1  points.
aMax=7;  
ax=(-aMax:aMax)';
ay=zeros(2*aMax+1, 1);
ay(1 + aMax) = 1;

//xdel(); // efface la fenêtre graphique
drawlater(); // l'affichage se fera en une fois à la fin

// Trace les points interpolés
plot(ax, ay, 'LineStyle', 'none', 'Marker', 'o');
mygca=gca();
mypts = mygca.children(1).children; // structure de paramètres des points

// Cas du spline naturel, qui est assez bon
derivees = splin(ax, ay, "natural");
xx = linspace(-aMax, aMax, 200);
spline1 = interp(xx, ax, ay, derivees);

// trace la courbe du spline
plot(xx, spline1);
myline = mygca.children(1).children; // structure de paramètres de la ligne

// Définition de paramètres d'affichage
//=====================================
// Définit la position et la taille de la fenêtre
mygcf=gcf();
mygcf.figure_position = [820, 1];
mygcf.figure_size = [700, 600];

// Définition de l'échelle des axes
mygca.zoom_box = [-(aMax + 0.5), -0.2, (aMax + 0.5), 1.1];

// Définition de la taille de la police des axes
mygca.font_size=4;
mygca.font_style=4; // 6=normal,  4=gras,  5=gras+italique,  0=courrier gras,  1=courrier gras, 
// c.f. help font_style  et  help graphics fonts

// Définit la couleur de fond de la fenêtre, hors graphique
mygcf.color_map(29,:) = [1, 1, 1];
mygca.background = 29;

// Définit la couleur de fond du graphique
mygcf.color_map(30,:) = [1, 1, 0.8];
mygcf.background = 30;

// Paramètres des points
mygcf.color_map(31,:) = [0, 1, 0];  // = couleur des fond des marques
mypts.mark_background=31;
mypts.mark_size=9; // taille des points

// Paramètres de la ligne
myline.thickness = 2;  // courbe plus épaisse
mygcf.color_map(28,:) = [0, 0, 0.5]; // couleur de la ligne
myline.foreground = 28;

title( mygca, strcat(["Interpolation spline de ", string(2*aMax+1), " points."]), ..
       'fontsize', 5);
xlabel(mygca, "x", 'fontsize', 5);
ylabel(mygca, "spline", 'fontsize', 5);

drawnow();
