La manivelle de CaR

Le temps est absent des logiciels de géométrie dynamique : les collègues de physique, dont certains utilisent énormément ce type de support pour générer des modèles, ne sont pas les seuls à le regretter... Un de ces logiciels - Cabri II pour ne pas le nommer - propose toutefois à l'utilisateur la possibilité "d'animer des nombres", ce qui permet de faire défiler un temps par incrémentation. Par contre, cela ne peut se faire qu'en mode animation et il reste impossible à ce moment-là de déplacer des objets "à la main" pendant que le compteur tourne.

Impossible aussi de construire une vraie manivelle qui compte les tours puisqu'un point sur objet d'un cercle, une fois qu'il en a parcouru toute la circonférence, replace la figure dans les conditions de départ. Nous allons voir dans cet article que CaR, par le biais de deux fonctions très exotiques, permet de réaliser ceci, et apporte du même coup sur un plateau doré la construction effective d'un pseudo-temps...

La fonction sum : il fallait oser !

Lorsque pour la première fois j'ai demandé à CaR une expression sum, je dois avouer avoir été très perturbé par cet ovni... Il fallait vraiment oser imaginer cette fonction-là, et il fallait aussi oser l'implémenter : merci monsieur Grothmann.

Voilà donc ce que fait une expression "sum(r,f)" : r et f étant deux expressions ou deux nombres, sum(r,f) est un compteur d'incrément égal à r qui demarre à zéro. Si f est (ou devient) négatif ou invalide, le compteur est réinitialisé. Mais à quel moment la fonction sum décide d'incrémenter ? Eh bien dès qu'il se passe quelque chose dans CaR (c'est là que j'ai trouvé qu'il fallait oser !).
L'applet ci-dessous est uniquement composée de l'expression "sum(2,0)". Créez des points, des droites, des cercles et déplacez ces objets en observant le comportement de l'expression : amusant non ?

Du coup, on comprend que pour modifier cette avalanche de nombres, il faut se placer dans une situation ou r est une expression : quand r vaut zéro, on ferme les vannes en remerciant la suite arithmétique de raison 0, et quand r est négatif bien entendu la machine remonte le temps... Essayez sur la figure ci-dessous (le curseur donne à r la valeur -2, 0 ou 2) :

La fonction d

Il s'agit du deuxième ovni sur lequel je me suis appuyé pour créer la macro "Manivelle". Si A est un point, d(A) représente la vitesse de déplacement du point : j'ai placé dans la figure suivante ce cas particulier, mais ce n'est pas de cela dont je me suis servi...
Si x est une expression qui varie, d(x) représente la différence entre sa valeur précédente et sa nouvelle valeur : dans l'applet ci-dessous, changez la valeur de l'expression x (clic-droit), et observez la valeur de d(x) (observez bien, car le résultat est très fugitif...).

J'ai mis un peu de temps à comprendre pourquoi ce résultat revenait à zéro tout de suite après : il s'agit tout simplement de cohérence. Dès que "quelque chose se passe" dans CaR, les fonctions "sum" et "d" sont actualisées : du coup, si l'expression x n'a pas changé, la différence entre son ancienne valeur et sa nouvelle, à savoir d(x), est nulle. Logique...

La figure

La manipulation est très simple : il suffit de déplacer le point M dans un sens ou dans l'autre...


Figure et macro : Manivelle.zir

La figure est aussi très simple. Sur un cercle de centre O, on place A et M. On crée ensuite l'expression (intitulée "Nombre de tours") :

sum(-round(d(a(A,O,M))/360),0)

a(A,O,M) représente la mesure en degré de l'angle AOM, d'où d(a(A,O,M)) représente la variation de cet angle. Quand on déplace M sur le cercle dans le sens trigo avant de rejoindre A, cet angle varie petit à petit sans discontinuité et la valeur de "d(a(A,O,M))/360" est ainsi proche de zéro. Par contre lorsque M "franchi" A, l'angle AOM passe d'une valeur proche de 360 à une valeur proche de 0 : "d(a(A,O,M))/360" est alors (et dans ce cas seulement) très proche de -1.

La fonction "round" réalise l'arrondi à l'entier le plus proche d'où "round(d(a(A,O,M))/360)" vaut toujours 0 sauf lorsque M franchi A : -1 si on passe A dans le sens trigo et 1 si on le passe dans le sens des aiguilles d'une montre.

L'expression totale "sum(...)" représente donc un compteur qui incrémente toujours de zéro SAUF dans le cas explicité ci-dessus.