DrGeo

logiciel du projet GNU

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[1]. 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++[2],[3] puis avec différentes versions de Smalltalk comme Squeak, Etoys[4] for One Laptop per Child[5], Pharo et dernièrement Cuis Smalltalk.

Dr. Geo
Description de l'image Dr. Geo mascot.svg.
Description de cette image, également commentée ci-après
Capture d'écran de DrGeo d'un modèle de télescope de Newton
Informations
Créateur Hilaire Fernandes (d)Voir et modifier les données sur Wikidata
Développé par Hilaire Fernandes
Première version
Dernière version 23.12 ()
Dépôt github.com/hilaire/drgeo.gitVoir et modifier les données sur Wikidata
Écrit en Smalltalk, Cuis-Smalltalk
Système d'exploitation Linux, Mac OS X, Windows, Sugar
Formats lus Dr.Geo document (d)Voir et modifier les données sur Wikidata
Formats écrits Dr.Geo document (d), Portable Network Graphics et SVGVoir et modifier les données sur Wikidata
Type Géométrie dynamique
Licence GNU GPL
Documentation www.gnu.org/software/dr-geo/doc/en/index.html#TopVoir et modifier les données sur Wikidata
Site web www.gnu.org/software/dr-geoVoir et modifier les données sur Wikidata

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

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.

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

modifier

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 :

  1. symétrie axiale ;
  2. symétrie centrale ;
  3. translation ;
  4. rotation ;
  5. homothétie.

Macro-construction

modifier

Une macro-construction est une façon d'apprendre à Dr. Geo une nouvelle construction[7]. 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

modifier

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[8]. Ce design est hérité de Smalltalk.

Script Smalltalk

modifier
 
Courbe et sa tangente dynamique calculées avec des scripts 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[9].

Un script s'utilise de deux façons :

  1. 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.
  2. 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.
 
Édition d'un script.

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

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

modifier
 
Éditeur de 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[10], il est aussi possible de coder entièrement en français[11].

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

modifier

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

 
Codage d'un triangle de Sierpiński interactif
| 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

modifier

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

 
Codage d'une spirale de Fibonacci interactive
|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

modifier

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.

 
Codage d'un modèle interactif de l'algorithme de Newton-Raphson.
| 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

modifier

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

 
Codage d'un cercle circonscrit interactif.
| 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

modifier

Notes et références

modifier
  1. (en) C.K. Hung, « Drawing the Parabolic Trajectory of an Object under Gravity » [PDF], sur cyut.edu.tw, (consulté le ).
  2. (it) A. Centomo, « Dr. Geo e la Geometria Tolemaica », sur matematica.unibocconi.eu, (consulté le ).
  3. (it) A. Centomo, F. Campora, « Geometria e programmazione con Dr. Geo », sur linuxdidattica.org, (consulté le ).
  4. (en) V. Freudenberg, Y. Ohshima, S. Wallace, « Etoys for One Laptop Per Child », 10.1109/C5.2009.9,‎ , p. 57-67 (lire en ligne).
  5. (en) G. Melo, A. Machado, A. Miranda, « The Impact of a One Laptop per Child Program on Learning: Evidence from Uruguay », sur www.iza.org, (consulté le ).
  6. (en) C. Whittum, « Get started with Dr. Geo for geometry », sur opensource.com, (consulté le ).
  7. (en) J.R. Fernández García et C. Schnober, « Interactive geometry with Dr. Geo MATH HELPER », Linux Magazine, no 67,‎ (lire en ligne).
  8. A. Busser, « Dr. Geo, un docteur qui peut s’opérer tout seul, », sur revue.sesamath.net, (consulté le ).
  9. Video tutorial on Smalltalk script.
  10. Video demonstration on programmed sketch.
  11. « Exemples de figure Smalltalk », sur gnu.org, (consulté le ).
  12. H. Fernandes, « La spirale de Fibonacci, », sur revue.sesamath.net, (consulté le ).