# DrGeo

GNU Dr. Geo est un logiciel de géométrie dynamique qui permet à ses utilisateurs de concevoir et de manipuler des figures géométriques interactives, voire de concevoir des modèles dynamiques en Physique. C'est un logiciel libre (code code, traductions, icônes et installeur sont sous licence GNU GPL licence) créé par Hilaire Fernandes, il fait partie du projet GNU. Il fonctionne grâce au système graphique Morphic (cela signifie qu'il est compatible avec les systèmes d'exploitation GNU/Linux, Mac OS, Windows, Android). Dr. Geo fut initialement développé en C++$^,$ puis avec différentes versions de Smalltalk comme Squeak, Etoys for One Laptop per Child, Pharo et dernièrement Cuis Smalltalk.

## Objets

Dr. Geo manipule différentes sorte d'objets dont les points, les lignes, les valeurs, les transformations géométriques, les scripts.

### Points

Il existe différentes sortes de points : point libre dans le plan ou sur une ligne qui peut être déplacé à l'aide de la souris et un point défini par ses coordonnées, deux valeurs de la figure.
Un point peut aussi être créé comme l'intersection de deux lignes ou comme le milieu d'un segment.

### Lignes

Dr. Geo est équipé des classiques droites, demi-droites, segments et vecteurs.
Les lignes courbes comprennent le cercle, l'arc de cercle, le polygone et le lieu géométrique. Chacun d'eux pouvant se définir avec différents paramètres.

### Transformations

Dr. Geo peut lier un point à une courbe, et construire des parallèles et perpendiculaires à une droite donnée.
Les transformations géométriques sont opérables sur les points et les lignes :
* symétrie axiale ;
* symétrie centrale ;
* translation ;
* rotation ;
* homothétie.

### Macro-construction

Une macro-construction est une façon d'apprendre à Dr. Geo une nouvelle construction. Cela permet d'ajouter de nouveaux objets : nouvelles transformations comme l'inversion géométrique, des constructions longues avec beaucoup d'objets intermédiaires ou des constructions impliquant des scripts (aussi appelé macro-script).
Lorsque certains objets, appelés finaux dépendent d'autres objets, appelés initiaux, il est possible de créer une construction complexe déduisant les objets finaux à partir d'objets initiaux désignés par l'utilisateur. C'est une macro-construction, un graphe d'objets interdépendants.

## Programmation

La programmation utilisateur est possible selon différentes modalités.
Depuis le logiciel, l'utilisateur a accès au code source pour l'étudier, le modifier et le redistribuer.
Dans toute figure géométrique, il est possible d'y embarquer des scripts codés par l'utilisateur. Ce sont les scripts Smalltalk qui se manipulent alors comme les autres objets d'une figure.
Une figure géométrique se décrit également entièrement en langage de programmation. Ce sont des figure Smalltak.
Le code source de Dr. Geo est en Smalltalk. C'est également le langage utilisé pour la programmation utilisateur : pour étendre Dr. Geo avec les opérations de calculs arbitraires (script Smalltalk) et pour définir une figure entièrement avec des instructions de programmation (figure Smalltalk).
Dr. Geo est distribué avec son code source et les outils de développement. Ainsi son code peut-être édité et recompilé depuis un Dr. Geo alors en fonctionnement. Ce design est hérité de Smalltalk.

### Script Smalltalk

Un script est un objet de première classe défini au côté du code de Dr. Geo. Il comprend zéro, un ou plusieurs arguments de types choisis lors de la définition du script. Lorsqu'une instance d'un script est insérée dans une figure, l'utilisateur choisit d'abord ses arguments dans la figure en les désignant à la souris, puis son emplacement où afficher sa valeur.
Un script est actualisé à chaque fois que la figure a besoin d'être rafraîchie. Les scripts s'utilisent aussi en cascade, avec l'un servant d'argument au suivant.
Un script s'utilise de deux façons :
* Pour retourner une valeur (par exemple numérique) et afficher son résultat dans la figure. Ce résultat s'utilise alors comme tout autre objet d'une figure : pour son résultat et/ou pour construire d'autres objets, de type géométrique ou script.
* Pour accéder à des objets de la figure : les modèles mathématiques (MathItem) ou leur vue (Costume) pour une utilisation arbitraire. Modifier la couleur d'un objet selon le résultat d'un calcul sur un modèle fait partie des possibilités.
Depuis le code d'un script, les modèles des arguments sont accessibles avec les messages #arg1, #arg2, etc. De même pour les vues des arguments avec les messages #costume1, #costume2, etc.
Le calcul du script, son actualisation en fait, se fait dans la méthode #compute. Par exemple, pour calculer le carré d'un nombre, la méthode
retourne un objet numérique, dont la valeur est le carré de son premier et unique argument, de type valeur numérique. Lorsque ce dernier objet change, le script recalcule la valeur retournée.

### Figure Smalltalk

Les figures Smalltalk Dr. Geo sont des figures entièrement définies avec le langage de programmation Smalltalk. Il ne s'agit plus de construire une figure géométrique à l'aide de l'interface graphique de Dr. Geo, mais de la décrire en code Smalltalk. Une interface de programmation avec une syntaxe adaptée est fournie, il est aussi possible de coder entièrement en français.
Smalltalk lui-même est un langage de programmation objet de haut niveau, soigneusement raffiné pendant 10 années de recherche au Palo Alto Research Center. Lorsqu'une figure est décrite avec du code Smalltalk, toutes les possibilités du langage sont utilisables : programmation orientée objet, variable, collection, itérateur, hasard pour des figures légèrement différentes à chaque lancement.
Une figure Smalltalk est éditée et testée depuis un éditeur de figure Smalltalk. De telle figure se débogue et s'exécute aussi pas-à-pas. Son code est sauvé, comme tout code source, dans un fichier texte externe encodé en UTF-8 , afin de supporter les langues natives.

#### Triangle de Sierpiński

Voici comment coder le triangle de Sierpiński récursivement. Son sommet externe rouge est mobile.

#### La spirale de Fibonacci

Une spirale de Fibonacci codée avec des transformations géométriques (rotation, translation et homothétie).

#### Méthode de Newton-Raphson

Une figure Smalltalk permet de coder un modèle interactif d'un algorithme. Ci-dessous une méthode célèbre d'analyse numérique, la méthode Newton-Raphson dans une itération de cinq pas.

#### Cercle circonscrit en Français

Une version en Français d'une figure Smalltalk.

## Récompenses

* ESUG Innovation Technology Awards (Amsterdam, 2008)
* AFUL Free Software Awards (Paris, 2000)