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[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.
Créateur | Hilaire Fernandes (d) |
---|---|
Développé par | Hilaire Fernandes |
Première version | |
Dernière version | 23.12 () |
Dépôt | github.com/hilaire/drgeo.git |
Écrit en | Smalltalk, Cuis-Smalltalk |
Système d'exploitation | Linux, Mac OS X, Windows, Sugar |
Formats lus | Dr.Geo document (d) |
Formats écrits | Dr.Geo document (d), Portable Network Graphics et SVG |
Type | Géométrie dynamique |
Licence | GNU GPL |
Documentation | www.gnu.org/software/dr-geo/doc/en/index.html#Top |
Site web | www.gnu.org/software/dr-geo |
Objets
modifierDr. Geo manipule différentes sorte d'objets dont les points, les lignes, les valeurs, les transformations géométriques, les scripts[6].
Points
modifierIl 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
modifierDr. 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
modifierDr. 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 :
Macro-construction
modifierUne 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
modifierLa 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
modifierUn 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 :
- 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
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
modifierLes 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
modifierVoici 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
modifierUne spirale de Fibonacci codée avec des transformations géométriques (rotation, translation et homothétie)[12].
|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
modifierUne 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
modifierUne 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
modifier- ESUG Innovation Technology Awards (Amsterdam, 2008)
- AFUL Free Software Awards (Paris, 2000)
Notes et références
modifier- (en) C.K. Hung, « Drawing the Parabolic Trajectory of an Object under Gravity » [PDF], sur cyut.edu.tw, (consulté le ).
- (it) A. Centomo, « Dr. Geo e la Geometria Tolemaica », sur matematica.unibocconi.eu, (consulté le ).
- (it) A. Centomo, F. Campora, « Geometria e programmazione con Dr. Geo », sur linuxdidattica.org, (consulté le ).
- (en) V. Freudenberg, Y. Ohshima, S. Wallace, « Etoys for One Laptop Per Child », 10.1109/C5.2009.9, , p. 57-67 (lire en ligne).
- (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 ).
- (en) C. Whittum, « Get started with Dr. Geo for geometry », sur opensource.com, (consulté le ).
- (en) J.R. Fernández García et C. Schnober, « Interactive geometry with Dr. Geo MATH HELPER », Linux Magazine, no 67, (lire en ligne).
- A. Busser, « Dr. Geo, un docteur qui peut s’opérer tout seul, », sur revue.sesamath.net, (consulté le ).
- Video tutorial on Smalltalk script.
- Video demonstration on programmed sketch.
- « Exemples de figure Smalltalk », sur gnu.org, (consulté le ).
- H. Fernandes, « La spirale de Fibonacci, », sur revue.sesamath.net, (consulté le ).