|  |  | DGS par l'exemple

### DGS par l'exemple

L'outil pour créer un DGS est disponible depuis la section numérique du menu contextuel ou de la boîte à outils. Un DGS peut recevoir de 0 à n paramètres d'entrée.

Après avoir choisit l'outil, il suffit de cliquer sur les objets souhaités en entrée puis quelque part sur le fond de la figure, le script sera placé à ce dernier endroit.

Dans la suite nous vous proposons de travailler sur quelques exemples de DGS, leurs fonctionnalités et leur puissance seront plus facilement analysées. Les DGS comme les macro-constructions donnent une dimension particulière à DR. GEO, ils permettent - chacun avec un positionnement différent2 - d'aller là où les auteurs du logiciel ne sont pas allés ou ne souhaitent par aller.

Il est aussi important de comprendre que la plupart des fonctionnalités de l'interpréteur GNU Guile sont disponibles depuis les DGS. C'est particulièrement vrai pour ses bibliothèques de fonctions3, nous allons bien sûr les utiliser intensément.

##### DGS sans paramètre d'entrée

Après avoir choisi l'outil de script, cliquer dans le fond écran, à l'emplacement où vous souhaitez placer le script. Surtout ne cliquez sur aucun objet de la figure, sinon DR. GEO comprendra que vous souhaitez cet objet comme paramètre d'entrée du script4. Une fois le script placé, vous voyez la chaîne de caractères "Dr. Genius" s'afficher. Tout script nouvellement créé contient une commande par défaut pour afficher cette chaîne de caractères, vous pouvez l'éditer en allant à l'outil propriétés d'objet. Une fois cet outil choisi, cliquer sur le script - ou pour être plus précis sur sa valeur - de votre choix dans la figure. Une boîte de dialogue contenant le script s'affichera. Dans la suite de cette section, c'est dans ce dialogue que nous saisissons les scripts.

###### Un générateur de nombres aléatoires et autres

Si vous souhaitez un générateur de nombres aléatoires, rien de plus simple, saisissez pour tout script le code suivant :

    (random 10)

À chaque mise à jour de la figure, il génère un nombre aléatoire entier dans l'intervalle [0 ; 10[.

Si vous préférez un nombre flottant dans l'intervalle [0 ; 1[, utilisez ce script :

    (random:uniform)

(!) Quelques précisions :

- La valeur retournée par le script est la valeur calculée par la dernière ligne. Ici en l'occurrence, il s'agit de la valeur retournée par l'appel d'une fonction ;
- La dernière ligne d'un script doit retourner un nombre réel. Sinon DR. GEO affiche "Résultat non imprimable" ;
- Si l'on souhaite retourner la valeur d'une variable, il suffit de mettre son nom en dernière ligne.

###### Calculer des valeurs usuelles

Pour calculer une valeur approchée de pi :

    (acos -1)

ou de e :

    (exp 1)

Les valeurs retournées par ces DGS sont ensuite utilisables comme toutes les autres valeurs numériques que peut générer DR. GEO. Pour toutes ces petites choses les DGS sont donc vos amis. Mais ils peuvent faire bien plus de choses intéressantes lorsqu'ils reçoivent des paramètres en entrée.

##### DGS avec au moins un paramètre d'entrée

La procédure pour créer un DGS avec un paramètre d'entrée est sensiblement la même. Juste après avoir sélectionné l'outil script, il suffit de cliquer sur l'objet qui sera passé en paramètre d'entrée, puis de cliquer sur le fond de l'écran, à l'endroit où le script doit être placé.

Ensuite, dans le script, la référence du paramètre d'entrée est placée dans la variable a1. Si nous avions défini deux paramètres d'entrée, leurs références auraient été placées suivant l'ordre de sélection dans les variables a1 et a2. De même pour un nombre de 3, 4, etc. de paramètres d'entrée.

Selon le type d'objet en référence, diverses méthodes sont disponibles qui pour obtenir sa valeur, qui pour obtenir ses coordonnées, etc. Le répertoire des méthodes est disponible depuis la Section Méthodes de référence des DGS.

Dans la suite, nous exposerons graduellement la construction d'une portion de courbe représentative d'une fonction et la tangente en un point mobile à cette portion de courbe.

La figure finale est fournie dans DR. GEO. Elle s'appelle slope.fgeo

La figure que nous obtiendrons

###### Définir une valeur dans un intervalle donné

Dans une nouvelle figure, nous commençons par placer deux points et le segment dont les extrémités sont ces deux points. Sur ce segment nous plaçons un point libre appelé "Move me!". Ce point servira de jauge, à nous de la calibrer avec un script. Ensuite nous créons un script ayant pour unique paramètre d'entrée ce point là.

Lorsque a1 est une référence vers le point "Move me!", le script suivant nous retourne une valeur décimale comprise entre [-10 ; 10] :

    (define x (getAbscissa a1))
    (* 20  (- x 0.5))

Quelques explications s'imposent. Dans la première ligne, l'appel `(getAbscissa a1)` permet d'obtenir l'abscisse curviligne de l'objet référencé par a15 - c'est-à-dire le point "Move me!". Cette abscisse est placée dans une nouvelle variable x. Ensuite à la deuxième ligne nous calibrons, ici l'expression est équivalente en notation algébrique à 20 ×( x - 0.5). Comme c'est la dernière ligne du script le résultat de ce calcul est la valeur retournée et affichée dans la figure.

Enfin, nommons ce script Xo.

###### Afficher une portion de courbe représentative d'une fonction

La valeur obtenue par le script précédant nous servira d'abscisse, nous allons nous servir de cette valeur pour calculer avec un deuxième script l'ordonnée en ce point par la fonction x -> cos(x) :

    (define x (getValue a1))
    (cos x)

L'appel `(getValue a1)` permet d'obtenir la valeur numérique de l'objet de référence a1. Ici il s'agit d'obtenir la valeur retournée par le script précédent. Nous nommons ce script Yo.

Ensuite nous créons le point Mo de coordonnées (Xo ; Yo). C'est un point de la courbe représentative de x -> cos(x). Pour afficher sa portion de courbe représentative sur l'intervalle [-10 ; 10], nous créons le lieu du point Mo lorsque le point "Move Me!" décrit le segment. Ça y est nous avons une courbe !

###### Calculer et afficher la tangente à une courbe

Pour afficher la tangente en Mo, il nous faut d'abord la pente en ce point. Nous avons donc besoin de la fonction dérivée x -> -sin(x) et de Xo. Nous créons un script avec comme paramètre d'entrée le script Xo :

    (- 0 (sin (getValue a1)))

La notation préfixée utilisée par Scheme/Guile peut dérouter, c'est simplement une question d'habitude. Nommons ce script "pente en Mo". Ainsi lorsque Mo se déplace sur la courbe, la pente est recalculée.

Il nous reste maintenant à afficher la tangente. Pour ce faire nous allons d'abord calculer les coordonnées d'un deuxième point - M1 - de cette droite.

Commençons par son abscisse, par exemple X1 = Xo + 2, pour ce faire créons un script avec comme paramètre d'entrée le script Xo :

    (define x1 (getValue a1))
    (+ x1 2)

Nommons ce script X1.

Attaquons-nous maintenant à l'ordonnée de M1. Là nous avons besoin de :

- Mo (référence a1) ;
- la pente en Mo (a2) ;
- l'abscisse X1 (a3).

Dans le script suivant, nous calculons l'ordonnée de M1 par le calcul Yo + m ×(X1 - X0) :

    (define x0 (car (getCoordinates a1)))
    (define y0 (cadr (getCoordinates a1)))
    (define m (getValue a2))
    (define x1 (getValue a3))
    (+ (* m (- x1 x0)) y0)

Quelques mots sur l'appel `(getCoordinates a1)`, dans cet appel a1 doit être une référence vers un objet de type point, la méthode retourne une liste contenant les coordonnées du point - ici Mo. `car` permet d'extraire le premier élément de cette liste, `cadr` le deuxième. Le reste du script ne devrait pas poser de problème.

Nommons ce script Y1 puis construisons le point M1 de coordonnées (X1 ; Y1) et enfin la tangente (MoM1).

Bien sûr, il aurait été possible de n'utiliser que deux ou trois gros scripts à la place de cette myriade de scripts. Mais nous espérons que ces petits exemples vous ont donné envie d'essayer par vous même les DGS.

|  |  | DGS par l'exemple