DrGeo
DrGeo est un logiciel libre de géométrie dynamique créé par Hilaire Fernandes sur plateforme Gnu/Linux.
Développé par | Hilaire Fernandes |
---|---|
Première version | |
Dernière version | 23.06 () |
Dépôt | code.launchpad.net/drgeo |
Écrit en | Smalltalk |
Système d'exploitation | Linux, macOS, Microsoft Windows, Android et Sugar |
Environnement | Windows, GNU/Linux, Mac OS X |
Type | Géométrie dynamique |
Licence | GNU GPL |
Site web | drgeo.eu |
Formats de fichier
DrGeo a son propre format de fichier, sans extension. Il peut exporter en PNG, en PostScript, en LaTeX ou en FlyDraw.
Objets
Objets prédéfinis
DrGeo construit des points, y compris d'intersection, des droites, des segments et vecteurs, des cercles, des lieux de points, des polygones, des arcs de cercle.
Transformations
DrGeo peut lier un point à une courbe, et construit des parallèles et perpendiculaires à une droite donnée, et les images de points par symétrie axiale, symétrie centrale, translation, rotation et homothétie.
Propriétés des objets
On peut modifier a posteriori la couleur et le nom d'un objet, mais ceci se fait avec une boîte de dialogue modale qui cache la figure.
Langage de script
Cette section est obsolète et devrait être corrigée. Dr. Geo utilise Pharo comme langage d'implémentation et de script -- voir la version anglaise de l'article.
DrGeo permet de créer des objets par un langage de script, qui n'est pas propre à DrGeo puisqu'il s'agit de Scheme.
Dans la figure
Après avoir créé une variable numérique, par exemple 3, en créant un objet de type script dans la figure, et en cliquant sur le nombre, on crée un script accessible dans la figure, et admettant en entrée la variable numérique, qui s'appelle automatiquement a1. Pour implémenter la fonction carré, on peut mettre dans le script
(define x (getValue a1))
(* x x)
La variable x est donc affectée par la variable numérique a1 puis son carré est calculé (c'est le produit de x par lui-même) et automatiquement affiché comme une variable numérique, dans l'exemple présent, on verra donc un 9 (puisque ). Ensuite on peut créer une macro avec le 3 comme objet initial et le 9 comme objet final, qui implémente la fonction carré comme objet DrGeo.
On peut également obtenir des variables numériques par sélection d'objets géométriques et lecture de leurs grandeurs (longueur, angle, coordonnées etc). Par exemple, si lors de la création d'un script, on sélectionne un point, l'argument a1 sera ce point et pas un nombre. Pour définir une transformation par un script, il faut créer deux objets par script (un pour l'abscisse et un pour l'ordonnée) parce que la sortie d'une fonction Scheme est nécessairement un nombre. Par exemple, comme , le carré d'un nombre complexe est donné par deux scripts, chacun ayant pour objet d'entrée, le point préalablement créé.
Pour la partie réelle:
(define x (car (getCoordinates a1)))
(define y (cadr (getCoordinates a1)))
(- (* x x) (* y y))
et pour la partie imaginaire:
(define x (car (getCoordinates a1)))
(define y (cadr (getCoordinates a1)))
(* 2 x y)
Une fois ces deux nombres présents à l'écran, on peut créer un point par ses coordonnées, en lui donnant bien entendu pour coordonnées les deux nombres trouvés, et définir une macro pour la transformation ainsi matérialisée (en choisissant le premier point pour objet initial, et le point défini par coordonnées comme objet final).
Création de figure par script
Lorsqu'un script est inséré dans la figure, la valeur numérique retournée par celui-ci est affichée, et peut être réutilisée dans la figure. Cependant l'avantage essentiel d'un langage de script est la possibilité qu'il offre de construire des figures complexes. Pour pouvoir réaliser cela, il est nécessaire de décrire la construction en langage Scheme dans un fichier texte ayant l'extension scm. DrGeo va alors interpréter ce fichier, en construisant la figure.
Par exemple, la version récursive du triangle de Sierpinski dynamique (A, B et C sont libres) est obtenue avec le script suivant :
(new-figure "Sierpinski")
(define (sierpin p1 p2 p3 n)
(let* (
(p4 (Point "" milieu-2pts p2 p1))
(p5 (Point "" milieu-2pts p2 p3))
(p6 (Point "" milieu-2pts p3 p1))
(q1 (Polygone "" npoints p1 p4 p6))
(q2 (Polygone "" npoints p2 p4 p5))
(q3 (Polygone "" npoints p3 p5 p6)))
(if (> n 1)
(begin
(envoi q1 masquer)
(envoi q2 masquer)
(envoi q3 masquer)))
(envoi p4 masquer)
(envoi p5 masquer)
(envoi p6 masquer)
(if (> n 0)
(begin
(sierpin p1 p4 p6 (- n 1))
(sierpin p2 p4 p5 (- n 1))
(sierpin p3 p5 p6 (- n 1))))))
(soit Point "A" free -3 -1)
(soit Point "B" free 3 -1)
(soit Point "C" free 0 3)
(sierpin A B C 5)
Cette version récursive est à comparer avec la version itérative de Kig et avec le CarScript, lui aussi itératif.
Continuation
DrGeo a fait place à DrGeoII qui est multiplateforme.