Lorsqu’une surface est donnée par une équation cartésienne \(F(x,y,z)=k\text{,}\) on peut la tracer directement avec la commande implicit_plot3d(...), sans avoir à la paramétrer. Voyons l’exemple de l’ellipsoïde de l’C.1.7 (voir l’C.1), d’équation
Ceci donne une surface d’une seule couleur uniforme. Pour faire varier la couleur d’un point à l’autre de la surface, il faut faire appel à une colormap (palette de couleurs) : il s’agit d’une fonction qui associe à chaque nombre de l’intervalle \([0,1]\) une couleur, de sorte qu’en faisant varier ce nombre de façon continue, on obtient une progression de couleurs. SageMath fournit les colormaps de matplotlib (voir la documentation de matplotlib à ce sujet pour une liste et un aperçu visuel de celles-ci); on y accède par colormaps.NomDeLaColormap, par exemple colormaps.YlOrBr ou colormaps.Greens.
Reprenons l’exemple de l’ellipsoïde, en choisissant cette fois de faire varier la couleur en fonction de la hauteur \(z\text{,}\) en paramétrant la surface. De la même façon qu’une courbe dans l’espace peut être décrite par une fonction d’un seul paramètre, \(t\mapsto \vr(t)\text{,}\) une surface peut être décrite par une fonction de deux paramètres,
où \((u,v)\) parcourt une région du plan \(uv\text{.}\) En SageMath, une telle surface se trace avec la commande parametric_plot3d(...), à qui l’on passe la liste [x(u,v), y(u,v), z(u,v)] ainsi que les intervalles parcourus par \(u\) et par \(v\text{;}\) l’argument color peut alors être une paire (fonction, colormap), où fonction retourne, pour chaque \((u,v)\text{,}\) le nombre de \([0,1]\) à envoyer dans la colormap.
Une paramétrisation naturelle de l’ellipsoïde, calquée sur les coordonnées sphériques, est
\begin{equation*}
\vr(u,v) = \big(a\cos u \sin v,\, b\sin u \sin v,\, c\cos v\big), \qquad u\in [0,2\pi],\ v\in[0,\pi],
\end{equation*}
de sorte que la hauteur est \(z=c\cos v\text{.}\) Le code ci-dessous trace l’ellipsoïde avec une couleur qui varie avec \(z\text{,}\) ainsi que ses traces sur les trois plans de coordonnées (chacune étant elle-même une courbe paramétrée par un seul paramètre \(t\text{,}\) obtenue en fixant l’un des deux paramètres \(u,v\)). Les appels à arrow3d et text3d ne servent qu’à dessiner les axes.
Contrairement aux quadriques, une surface paramétrique n’a pas besoin d’être décrite par une équation cartésienne \(F(x,y,z)=k\) simple (ni donc d’être tracée avec implicit_plot3d), ni même d’avoir une topologie familière. Le ruban de Möbius en est un exemple classique : une surface qui n’a qu’un seul côté et qu’une seule courbe frontière. Avec \(R=2\) fixant le rayon du cercle central, une paramétrisation possible est
Le paramètre \(t\) fait le tour du cercle central, alors que \(s\) déplace le point transversalement, en tordant d’un demi-tour (\(t/2\)) au fur et à mesure que \(t\) parcourt \([0,2\pi]\) — c’est cette torsion qui rend la surface non orientable. Le code ci-dessous trace le ruban, ainsi que sa courbe frontière (en rouge, correspondant à \(s=-1\)) : en la suivant, on constate qu’elle rejoint, après un tour complet en \(t\text{,}\) l’endroit où se trouverait \(s=1\) — la surface entière n’a donc qu’une seule frontière, malgré les deux valeurs extrêmes de \(s\text{.}\)