next up previous contents index
Next: Dessiner plusieurs graphes dans Up: 4 Les graphiques Previous: Dessiner une surface définie x=f(u,v), y=f(u,v), z=f(u,v)

4.6 Les courbes dans l'espace

Pour dessiner une telle courbe l'instruction de base est param3d. Voici l'exemple classique de l'hélice :

-->t = linspace(0,4*%pi,100);
 
-->x = cos(t); y = sin(t) ; z = t;
 
-->param3d(x,y,z)  // effacer eventuellement la fenetre graphique avec xbasc()
mais comme cette dernière ne permet que d'affichier une seule courbe nous allons nous concentrer sur param3d1 qui permet de faire plus de choses. Voici sa syntaxe :
   param3d1(x,y,z,[theta,alpha,leg,flag,ebox])
   param3d1(x,y,list(z,colors),[theta,alpha,leg,flag,ebox])
Les matrices x, y et z doivent être de même format (np,nc) et le nombre de courbes (nc) est donné par leur nombre de colonnes (comme pour plot2d). Les paramêtres optionnels sont les mêmes que ceux de l'instruction plot3d. colors est un vecteur donnant le style pour chaque courbe (exactement comme pour plot2d), c'est à dire que si colors(i) est un entier strictement positif, la i$^{\mbox{\scriptsize ème}}$ courbe est dessinée avec la i$^{\mbox{\scriptsize ème}}$ couleur de la carte courante (ou avec différents pointillés sur un terminal noir et blanc) alors que pour une valeur entière comprise entre -9 et 0, on obtient un affichage des points (non reliés) avec le symbole correspondant. Voici un exemple qui doit vous conduire à la figure (4.9):
-->t = linspace(0,4*%pi,100)';                   
 
-->x1 = cos(t); y1 = sin(t) ; z1 = t;  // une helice         
 
-->x2 = x1 + 0.2*(1-rand(x1));                   
 
-->y2 = y1 + 0.2*(1-rand(y1));                   
 
-->z2 = z1 + 0.2*(1-rand(z1));                   
 
-->xbasc() ; param3d1([x1 x2],[y1 y2],list([z1 z2],[1 -9]))

-->xset("font",4,3)   // times en gras 14 pts                              
 
-->xtitle("Helice avec perles")


  
Figure 4.9: Courbe et points dans l'espace...
\begin{figure}
\begin{center}

\includegraphics [width=12cm]{helice}\end{center}\end{figure}

Comme pour plot2d on est obligé de l'appeler plusieurs fois si les différentes courbes à afficher n'ont pas le même nombre de points. Voici un script qui explique comment dessiner deux groupes de points avec des marques et des couleurs différentes :

// script pour afficher des points
n = 50;        // nombre de points
P = rand(n,3); // des points au hasard
// calcul d'une boite englobante
xmin = min(P(:,1)); xmax = max(P(:,1)) ; dx = xmax - xmin;
ymin = min(P(:,2)); ymax = max(P(:,2)) ; dy = ymax - ymin;
zmin = min(P(:,3)); zmax = max(P(:,3)) ; dz = zmax - zmin;
xvisu_min = xmin - 0.05*dx ; xvisu_max = xmax +  0.05*dx ;
yvisu_min = ymin - 0.05*dy ; yvisu_max = ymax +  0.05*dy ;
zvisu_min = zmin - 0.05*dz ; zvisu_max = zmax +  0.05*dz ;
ebox = [xvisu_min xvisu_max yvisu_min yvisu_max zvisu_min zvisu_max ] ;

// ici je separe les points en 2 groupes pour montrer comment mettre des
// symboles et des couleurs differentes pour les points
m = 40;
P1 = P(1:m,:) ; P2 = P(m+1:n,:);

// le dessin
xset("window",0)
xbasc()

// premier groupe de points
xset("pattern",2)  // du bleu avec la carte par defaut
param3d1(P1(:,1),P1(:,2),list(P1(:,3), -9),60,30,"x@y@z",[1 4],ebox)

// pour le deuxieme groupe
xset("pattern",3)  // du vert avec la carte par defaut
param3d1(P2(:,1),P2(:,2),list(P2(:,3), -5),60,30," ",[0 4])   
        // -5 pour des triangles inverses
        // [0 4] ) : pour dessiner avec l'echelle courante
        //           (imposee avec le 1 er appel a param3d1)
xset("pattern",1) // pour remettre le noir comme couleur courante 
[font_init] = xget("font")
xset("font",4,3)    // pour avoir le titre en time bold 14 points...
xtitle("Des points...")
xset("font",font_init(1), font_init(2)) // pour remettre la fonte initiale
xselect()


next up previous contents index
Next: Dessiner plusieurs graphes dans Up: 4 Les graphiques Previous: Dessiner une surface définie x=f(u,v), y=f(u,v), z=f(u,v)
Pincon Bruno
6/23/2000