Scilab Function

plot3d - représentation d'une surface en 3D

### Sequence d'appel

  `plot3d(x,y,z,[theta,alpha,leg,flag,ebox])`
  `plot3d(x,y,z,<opt_args>)`
  ``
  `plot3d(xf,yf,zf,[theta,alpha,leg,flag,ebox])`
  `plot3d(xf,yf,zf,<opt_args>)`
  ``
  `plot3d(xf,yf,list(zf,colors),[theta,alpha,leg,flag,ebox])`
  `plot3d(xf,yf,list(zf,colors),<opt_args>)`

### Parametres

- `x,y` : vecteurs lignes de taille n1 et n2 (coordonnées sur les axes x et y). Ces coordonnées doivent être monotones.
- `z` : matrice de taille (n1,n2). `z(i,j)` est la hauteur d'une surface non paramétrique au point (x(i),y(j)).
- `xf,yf,zf` : matrices de taille (nf,n). Elles définissent les facettes utilisées pour dessiner la surface. Chaque facette `i` est définie par un polygone à `nf` points. Les coordonnées x, y et z des points de la facette numéro i sont donnés par `xf(:,i)`, `yf(:,i)` et `zf(:,i)`.
- `colors` : un vecteur de taille n donnant la couleur de chaque facette ou une matrice de taille (nf,n) donnant la couleur de chaque point de la facette (dans ce cas la couleur est interpolée dans la facette)
- `<opt_args>` : une suite d'affectations `key1=value1, key2=value2`, ... où key1,key2, ... peuvent prendre les valeurs `theta`,`alpha`,`leg`,`flag`, `ebox`,`zlev` (voir ci-dessous). Dans ce cas, l'ordre n'a pas de signification particulière.
- `theta, alpha` : valeurs réelles donnant (en degrés) les coordonnées sphériques du point d'observation.
- `leg` : chaîne de caractères définissant la légende pour chaque axe avec @ comme séparateur, par exemple "X@Y@Z".
- `flag` : un vecteur réel de taille 3 `flag=[mode,type,box]`.

- `mode` : chaîne de caractères (traitement des parties cachées).

- `mode>0` Les parties cachées de la surface sont enlevées et le "dessous" de la surface est d'une couleur uniforme d'indice `mode` dans la table de couleurs courante.
- `mode=0` Les parties cachées de la surface sont dessinées.
- `mode<0` Uniquement le "dessous" de la surface est dessiné et rempli avec une couleur ou un motif uniforme d'indice `-mode`. Voir xset() pour la signification des indices.

- `type` : un entier (type d'échelle).

- `type=0` Le dessin est fait avec l'échelle 3D courante (définie par un appel précédent à `param3d`, `plot3d`, `contour` ou `plot3d1`).
- `type=1` Échelle où la boîte 3D est utilisée en totalité, les limites sont éventuellement spécifiées par l'argument optionnel `ebox`.
- `type=2` Échelle où la boîte 3D est utilisée en totalité, les limites sont calculées à partir des données.
- `type=3` Échelle isométrique 3D où les bornes de la boîte 3D sont données par l'argument `ebox`, mode similaire à `type=1`
- `type=4` Échelle isométrique 3D où les bornes de la boîte 3D sont calculées à partir des données, mode similaire à `type=2`
- `type=5` Échelle isométrique 3D "étendue" (occupation maximum de l'espace), les bornes de la boîte 3D sont données par l'argument `ebox`, mode similaire à `type=1`
- `type=6` Échelle isométrique 3D "étendue" (occupation maximum de l'espace), les bornes de la boîte 3D sont calculées à partir des données, mode similaire à `type=2`.

- `box` : un entier (cadre autour du dessin).

- `box=0` Pas de cadre autour du dessin.
- `box=1` Pas implémenté pour l'instant (identique à box=0).
- `box=2` Uniquement les axes (trièdre i,j,k) sont dessinés derrière la surface
- `box=3` Une boîte est dessinée autour du dessin et les légendes des axes sont ajoutées.
- `box=4` Sont dessinés, une boîte autour du dessin, les légendes des axes et le trièdre derrière la surface (identique à mode=3 + mode=2)

- `ebox` : utilisé quand `type` dans `flag` vaut 1. Spécifie les limites de la boîte 3D du dessin sous forme du vecteur `[xmin,xmax,ymin,ymax,zmin,zmax]`.

### Description

`plot3d(x,y,z,[theta,alpha,leg,flag,ebox])` dessine la surface non-paramétrique `z=f(x,y)`.

`plot3d(xf,yf,zf,[theta,alpha,leg ,flag,ebox])` dessine une surface définie par un ensemble de facettes. On peut représenter des surfaces multiples `xf`, `yf` et `zf` en assemblant les matrices sous la forme `[xf1 xf2 ...]`, `[yf1 yf2 ...]` et `[zf1 zf2 ...]`.

On peut donner une couleur individuelle à chaque facette en mettant `list(zf,colors)` à la place de `zf`, où `colors` est un vecteur de taille `n`. Si `colors(i)` est positif il donne la couleur de la facette `i` et le contour de la facette est dessiné avec le style courant de ligne et de couleur. Si `colors(i)` est négatif, la couleur d'indice `-colors(i)` est utilisée et la frontière de la facette n'est pas dessinée. Utiliser `xset()` pour voir les indices des couleurs.

Il est aussi possible d'avoir des couleurs interpolées sur les facettes. Pour cela remplacer `colors` par une matrice de taille nfxn donnant la couleur de chaque point des facettes. Dans ce cas les valeurs positives signifient que le contour des facettes n'est pas dessiné.

Les arguments optionnels `theta,alpha,leg ,flag,ebox`, peuvent être passés sous la forme `key1=value1, key2=value2`, ... Dans ce cas, l'ordre n'a pas de signification.

Utiliser éventuellement la fonction `genfac3d` pour calculer les facettes (à 4 points) de la surface non-paramétrique `z=f(x,y)`. `eval3dp` peut être utilisée pour les surfaces paramétriques.

Taper `plot3d()` pour voir une démonstration de la fonction.

### Exemples

    // simple surface z=f(x,y)
    t=[0:0.3:2*%pi]'; z=sin(t)*cos(t');
    plot3d(t,t,z)
    // même surface en utilisant genfac3d au préalable
    [xx,yy,zz]=genfac3d(t,t,z);
    xbasc()
    plot3d(xx,yy,zz)
    // surfaces multiples
    xbasc()
    plot3d([xx xx],[yy yy],[zz 4+zz])
    // surfaces multiples utilisant des couleurs
    xbasc()
    plot3d([xx xx],[yy yy],list([zz zz+4],[4*ones(1,400) 5*ones(1,400)]))
    // changement du point de vue et des légendes
    xbasc()
    plot3d(1:10,1:20,10*rand(10,20),35,45,"X@Y@Z",[2,2,3])
    // une sphère
    deff("[x,y,z]=sph(alp,tet)",["x=r*cos(alp).*cos(tet)+orig(1)*ones(tet)";..
      "y=r*cos(alp).*sin(tet)+orig(2)*ones(tet)";..
      "z=r*sin(alp)+orig(3)*ones(tet)"]);
    r=1; orig=[0 0 0];
    [xx,yy,zz]=eval3dp(sph,linspace(-%pi/2,%pi/2,40),linspace(0,%pi*2,20));
    xbasc();plot3d(xx,yy,zz)

    xbasc();xset('colormap',hotcolormap(128));
    r=0.3;orig=[1.5 0 0];
    [xx1,yy1,zz1]=eval3dp(sph,linspace(-%pi/2,%pi/2,40),linspace(0,%pi*2,20));
    cc=(xx+zz+2)*32;cc1=(xx1-orig(1)+zz1/r+2)*32;
    xbasc();plot3d1([xx xx1],[yy yy1],list([zz,zz1],[cc cc1]),70,80)

    xbasc();plot3d1([xx xx1],[yy yy1],list([zz,zz1],[cc cc1]),theta=70,alpha=80,flag=[5,6,3])

### Voir aussi

`eval3dp` `genfac3d` `geom3d` `param3d` `plot3d1` `xset`

### Auteur

J.Ph.C.