Retour à la page personnelle de Bernard Parisse.

## 12 Les graphiques

Il y a plusieurs types de graphiques: dans le plan (2-d), dans l’espace (3-d), qui peuvent faire partie ou non d’une figure géométrique. Pour créer les types de graphes les plus courants, vous pouvez utiliser les assistants du menu `Graphes` qui se chargera de créer un niveau avec une ligne de commande, de le remplir et de le valider. Ainsi une commande pour tracer un graphe de fonction :
`plotfunc(sin(x),x=-5..5)` affichera un graphe 2-d (qui ne fait pas partie d’une figure),
`plotfunc(x^2-y^2,[x=-3..3,y=-4..4])` affichera un graphe 3-d (qui ne fait pas partie d’une figure).
Alors que le menu `Geo->Nouvelle figure` permet d’ajouter un écran de géométrie 2-d ou 3-d permettant de faire à la fois une figure géométrique et des tracés de fonctions.

Chaque graphique dispose à sa droite de boutons permettant de changer la visualisation du graphique : déplacement selon les axes, zoom in et out, arrêt ou reprise d’une animation, configuration, ou d’exporter/imprimer le graphique. Les deux sous-sections qui suivent décrivent les réglages spécifiques au graphes dans le plan et dans l’espace, les deux sections qui suivent expliquent comment créer des figures dans le plan ou dans l’espace. Les sections décrivant les attributs des objets des figures 2-d et 3-d (13.6 et 14.3.2) peuvent être appliquées à la plupart des commandes de tracés même si elles ne font pas partie d’une figure, par exemple on peut saisir dans un niveau de calcul formel :

`plotfunc(cos(x)+cos(y)+cos(x+y),[x=-2*pi..2*pi, y=-2*pi..2*pi], xstep=0.2,ystep=0.2, affichage=vert+rempli);
plan(z=1,affichage=cyan+rempli)`

### 12.1 Animations

Les instructions `animate`, `animate3d` ou `animation` permettent de créer des animations en faisant défiler à l’écran une suite de graphe. Le bouton à gauche du `M` permet d’arrêter ou reprendre une animation (raccourci clavier: `p` pour pause). Pour afficher une image en avant on utilise le raccourci clavier `n` ou on clique dans le graphe en 3-d. Pour revenir d’une image en arrière, on utilise la touche `b`. On peut configurer le temps entre 2 images en cliquant sur le bouton `cfg` (et remplir la case `animate`).
Le bouton `M` permet aussi de créer une animation automatiquement pour des graphes qui dependent d’un paramètre : dans ce cas il faut choisir :
`M-Enlever le graphe` puis `M-Creer animation` pour que le graphe initial ne se superpose pas avec l’animation. Pour créer l’animation (on vous demande combien vous voulez d’images (`frame`) différentes), le temps entre 2 images est toujours définie dans `cfg->animate`.
Il ne faut pas confondre ces animations programmées avec les animations de rotation des graphes 3-d (cf. la section 12.3.4).

### 12.2 Graphes dans le plan

On peut effectuer un zoom sur une zone rectangulaire d’un graphe n’appartenant pas à une figure en sélectionnant le rectangle avec le bouton droit de la souris.

Lorsqu’un niveau graphique a le focus, la molette de la souris permet de faire un zoom avant ou arrière.

### 12.3 Graphes dans l’espace

Pour les graphes dans l’espace, on peut choisir entre une représentation en perspective ou en projection orthogonale (dont on peut modifier le point de vue) et entre une visualisation en couleurs intrinsèques ou par éclairage par 1 à 8 spots lumineux dont on peut controler la position et les propriétés.

#### 12.3.1 Comment modifier le point de vue

Pour les graphes dans l’espace, on peut changer le point de vue en appuyant sur la souris en-dehors du parallélépipède de visualisation et en déplaçant la souris, ou avec les touches x,X, y,Y, z,Z pour faire tourner le point de vue autour de l’axe des x, y ou z.

#### 12.3.2 Le plan de vision et l’axe de vision

L’axe de vision est une droite passant par l’observateur et de vecteur directeur la direction de la visée de l’objet : tous les points situés sur une parallèle à l’axe de vision seront représentés par un seul point.

Le plan de vision est un plan perpendiculaire à l’axe de vision et dont l’équation est inscrite en haut de l’écran. On peut le faire bouger le long de l’axe de vision grâce à la molette de la souris : les plans successifs sont obtenus par une translation de vecteur parallèle à l’axe de vision.

Attention
Si le repère est orthonormé et si le plan de vision a pour équation :

ax+by+cz=d

l’axe de vision est dirigée selon le vecteur [a,b,c] mais si le repère n’est pas orthonormé ce n’est plus vrai!!!!

#### 12.3.3 Comment modifier le plan de vision

L’orientation du plan de vision peut être modifiée en changeant l’axe de vision comme expliqué ci-dessus. On peut aussi en tournant la molette de la souris faire bouger le plan de vision par translation le long de l’axe de vision : cela permet d’obtenir successivement des plans parallèles entre eux et perpendiculaires à l’axe de vision.

On peut aussi indiquer dans `cfg` l’équation du plan de vision.

Attention
Dans une figure 3-d, lorsqu’on déplace un point en mode `Pointeur` à l’aide de la molette de la souris, ce point reste dans le plan de vision, donc cela permet aussi de translater le plan de vision.

#### 12.3.4 Rotation animée du point de vue

Xcas permet d’effectuer une animation par rotation du point de vue autour d’un axe passant par l’origine du repère. L’angle de rotation varie d’un tour en un nombre de pas configurable, de même que l’intervalle de temps entre 2 images successives. Tous ces paramètres sont configurables dans l’écran que l’on fait apparaitre en cliquant sur `cfg` en bas à droite du graphe 3-d, à la ligne commençant par `Anim`, plus précisément :

- `Anim`: est un entier qui indique le type d’animation, la mise à 1 du bit 8 de cet entier indique que la rotation s’effectue sur le point de vue, la mise à 1 des bits 0 à 7 de cet entier indique que la rotation s’effectue sur les spots 0 à 7. La valeur par défaut est 256, c’est-à-dire que seul le point de vue change. La valeur 255 permet de simuler une rotation de tous les spots illuminant un objet. La valeur 1 permet de simuler une rotation du spot 1 illuminant un objet, par exemple si cet objet est une sphère centrée en l’origine représentant la Terre, on peut simuler la rotation apparente du Soleil pendant une journée en prenant pour axe l’axe de rotation de la sphère.
- `t`: intervalle de temps entre 2 images
- `n`: nombre d’images générées en un tour
- `x`, `y`, `z`: coordonnées de l’axe de rotation. Ces valeurs peuvent être programmées par l’instruction `gl_rotation_axis=[x,y,z]` où `x,y,z` sont des valeurs numériques.
- `d`: normalement 0, peut servir à changer le numéro d’image d’une `animation` entre 2 images d’une animation de rotation.

Le lancement de l’animation de rotation se fait par le `M` du graphe, sous-menu 3-d ou par le raccourci clavier r.

Attention
Il ne faut pas confondre ce type d’animation avec les animations obtenus par les instructions `animate`, `animate3d` ou `animation`.

#### 12.3.5 Les lumières des graphes 3-d

Dans la configuration d’un graphe 3-d (bouton cfg en bas à droite de la figure), on peut cocher l’option `Lights`. Dans ce cas, au lieu de visualiser des objets émettant une couleur intrinsèque, on va éclairer les objets avec un ou plusieurs spots lumineux. Ces spots sont numérotés de 1 à 8 et peuvent être configurés avec les boutons l1 à l8. Nous allons décrire brièvement dans cette section ce type de visualisation, le lecteur souhaitant appronfondir pourra se référer à la documentation d’OpenGL.

Il y a 2 types de spot: positionnel si w=1 et directionnel si w=0 (pour une lumière à l’infini, par exemple du Soleil). Chaque objet a des propriétés vis-à-vis de trois type de lumière: ambiante (sans direction privilégiée), diffuse (émise dans la direction spot-objet, diffusée dans toutes les directions, éventuellement atténuée selon la distance spot-objet et l’angle entre la direction du spot et la direction spot-objet), spéculaire (réémise préférentiellement dans la direction objet-spot). De plus un objet peut lui-même émettre de la lumière (propriétés d’émission).

1. Caractéristique géométriques :
   les paramètres x,y,z permettent de définir la position du spot si w vaut 1 ou sa direction si w vaut 0. Les paramètre x→, y→, z→ définissent la direction du spot si w vaut 1.
2. Caractéristiques de la lumière :
   chaque spot fournit
   - de la lumière ambiante (indépendante de l’angle entre la direction spot-objet et objet-position de l’oeil, renvoyée par le matériau selon ses propriétés relativement à la lumière ambiante),
   - de la lumière diffuse, renvoyée dans toutes les directions sans préférence, en fonction des propriétés de lumière diffuse du matériau, avec un coefficient d’atténuation dépendant du cosinus de l’angle β entre la direction spot-objet (si w=1) ou direction du spot (si w=0) et la normale à l’objet,
   - de la lumière spéculaire, permettant d’émuler une réflexion sur un miroir ou un aspect laqué, cette lumière sera renvoyée par l’objet en fonction de ses propriétés spéculaires, préférentiellement dans la direction d’émission, plus précisément en fonction du cosinus de γ, l’angle entre le symétrique de la direction d’émission avec la normale à l’objet avec la direction objet-oeil, le cosinus est élevé à la puissance définie par le paramètre “gl_shininess” de l’objet.
   On définit pour chaque type de lumière ses 4 composantes (r: red=rouge, g: green=vert, b: blue=bleu, a: alpha=transparence) par un réel compris entre 0 et 1 (maximum). Par exemple, pour voir une scène en lumière bleue, on mettrait 0 sur les canaux r et g et 1 sur le canal b. On utilise en général les mêmes valeurs pour la lumière diffuse et spéculaire, 1,1,1,1 pour les propriétés spéculaires d’un objet de type miroir, et des valeurs correspondant à la couleur pour les propriétés d’émission et de diffusion d’un objet.
3. Caractéristique d’émission du spot :
   - `exp` est un entier, c’est un coefficient permettant de régler l’atténuation de la lumière. Plus précisément il s’agit de l’exposant du cosinus de l’angle α entre la direction du spot et la direction spot-objet éclairé, il n’y a pas d’atténuation si w=0), on utilise 0 ou 1 ou plus selon que l’on souhaite un spot moins ou plus focalisé,
   - `cutoff` permet de régler l’angle θ du cône (d’axe la direction du spot) où le spot envoie de la lumière, il vaut 180 si le spot est isotrope (émet identiquement dans toutes les directions) ou une valeur entre 0 et 90 en degrés sinon, dans ce cas aucune lumière n’est reçue si l’angle α est supérieur à θ.
   - les coefficients `att0` à `att2` permettent d’atténuer la lumière d’un spot positionnel en fonction de la distance d spot-objet, en la multipliant par

     1
     a0+a1 d +a2 d2

Finalement, sur chaque canal de couleur, la luminosité est obtenue par la formule :

l | = |
oe+ oa |
8
∑
j=1
| la,j + os |
8
∑
j=1
| ls,j cos(γj)S +
+ od |
8
∑
j=1
| ld,j cos(αj)ej cos(βj) |
1
a0,j+a1,j dj+a2,j dj2

où :

- oe,oa,od,os désignent la valeur pour le canal de couleur de l’objet en émission, ambiante, diffuse, spéculaire et S désigne l’exposant “shininess”de l’objet
- la,j,ld,j,ls,j désignent la valeur pour le canal de couleur du spot j en ambiant, diffuse, spéculaire
- a0,j, a1,j, a2,j désignent les coefficients d’atténuation du spot j, remplacés par 1,0,0 si w=0 (pas d’atténuation)
- dj est la distance du spot j à l’objet
- αj est l’angle entre la direction du spot j et du segment reliant le spot j et la facette de l’objet, sauf si αj est supérieur à l’angle de cutoff du spot j (αj=π/2), ou si w=0 (αj=0, pas d’atténuation directionnelle).
- βj est l’angle entre le segment spot j-objet et la normale à la facette de l’objet (si w=0 on remplace spot j-objet par direction du spot)
- γj est l’angle entre le symétrique de la direction du spot par rapport à la normale à la facette de l’objet et le segment objet-oeil

Si on ne coche pas l’option Blend (pas de transparence), les objets situés devant d’autres objets les masquent complètement. Si on coche l’option Blend, la valeur du canal a (alpha=transparence) est utilisée pour composer la luminance des objets précédents avec celle de l’objet représenté ensuite. Enfin, l’option Gouraud permet de lisser la représentation des surfaces par des facettes (ce sont des facettes quadrangulaires sauf pour les surfaces implicites qui sont triangulées).

Retour à la page personnelle de Bernard Parisse.