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 suivantVideo tutorial on Smalltalk script..

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

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

compute "returns the square of a number" ^ self arg1 valueItem squared

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 fournieVideo demonstration on programmed sketch., 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.

| triangle c | c := DrGeoSketch new. triangle := [:s1 :s2 :s3 :n | c segment: s1 to: s2; segment: s2 to: s3; segment: s3 to: s1. n > 0 ifTrue: [ triangle value: s1 value: (c middleOf: s1 and: s2) hide value: (c middleOf: s1 and: s3) hide value: n-1. triangle value: (c middleOf: s1 and: s2) hide value: s2 value: (c middleOf: s2 and: s3) hide value: n-1. triangle value: (c middleOf: s1 and: s3) hide value: (c middleOf: s2 and: s3) hide value: s3 value: n-1]]. triangle value: 0@3 value: 4@ -3 value: -4@ -3 value: 3. (c point: 0@3) show

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

|canvas shape alfa fibo a b m s| canvas := DrGeoSketch new. alfa := (canvas freeValue: -90 degreesToRadians) hide. shape := [:c :o :f| | e p | e := (canvas rotate: o center: c angle: alfa) hide. (canvas arcCenter: c from: o to: e) large. p := canvas translate: e vector: (canvas vector: c to: o) hide. (canvas polygon: { c. o. p hide. e }) name: f. e]. fibo := [ ]. fibo := [ :f :o :c :k | | e f1 f2 f3 c2| "f1: term Fn-1, f2: term Fn, o & c: origin and center of spiral arm e: extremity of the spiral arm" f1 := f first. f2 := f second. f3 := f1 + f2. e := shape value: c value: o value: f3. c2 := (canvas scale: c center: e factor: f3 / f2) hide. k > 0 ifTrue: [ fibo value: {f2. f3} value: e value: c2 value: k - 1 ]].

a := canvas point: 1@0. b := canvas point: -1 @0. m := (canvas middleOf: a and: b) hide. s := shape value: m value: a value: 1. shape value: m value: s value: 1. fibo value: {1. 2} value: b value: a value: 10

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.

| sketch f df xn ptA ptB| sketch := DrGeoSketch new axesOn. xn := 2. f := [ :x | x cos + x ]. "Derivate number" df := [ :x | (f value: x + 1e-8) - (f value: x) * 1e8]. sketch plot: f from: -20 to: 20. ptA := (sketch point: xn@0) large; name: 'Drag me'. 5 timesRepeat: [ ptB := sketch point: [ :pt | pt point x @ (f value: pt point x)] parent: ptA. ptB hide. (sketch segment: ptA to: ptB) dotted forwardArrow . ptA := sketch point: [:pt | | x | x := pt point x. x - ( (f value: x) / (df value: x) ) @ 0 ] parent: ptB. ptA hide. (sketch segment: ptB to: ptA) dotted forwardArrow].

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

| figure a b c m1 m2| figure := DrGeoFigure nouveau. figure afficherGrille; afficherAxes. a := figure segmentDe: 2@ 3 à: 0@0. a nommer: 'a'. b := figure segmentDe: 0@0 à: -1@2. b nommer: 'b'. c := figure segmentDe: -1@2 à: 2@3. c nommer: 'c'. m1 := (figure médiatrice: a) couleur: Color red. m2 := (figure médiatrice: b) couleur: Color red. (figure médiatrice: c) couleur: Color red. figure cercleCentre: (figure intersectionDe: m1 et: m2) passantPar: 0@0. (figure point: 0@0) montrer

Récompenses ESUG Innovation Technology Awards (Amsterdam, 2008) AFUL Free Software Awards (Paris, 2000)

Notes et références

DrGeo Catégorie:Logiciel libre sous licence GPL Catégorie:Logiciel éducatif Catégorie:Logiciel de géométrie dynamique Catégorie:Logiciel pour Linux