DrGeo
![]() ![]() | |||||||||
![]() ![]() | |||||||||
Tipus | programari de geometria dinàmica, programari educatiu, paquet GNU i programari lliure ![]() | ||||||||
---|---|---|---|---|---|---|---|---|---|
Versió inicial | març 1996 ![]() | ||||||||
Versió estable | 24.06a (13 juny 2024) ![]() | ||||||||
Llicència | GNU GPL 2.0 o posterior ![]() | ||||||||
Part de | Projecte GNU ![]() | ||||||||
Característiques tècniques | |||||||||
Sistema operatiu | GNU/Linux, Microsoft Windows, macOS, Android, Sugar i MS-DOS ![]() | ||||||||
Escrit en | Smalltalk, Pharo i C++ ![]() | ||||||||
Format de fitxer de lectura | Dr.Geo document (en) ![]() ![]() | ||||||||
Format de fitxer d'escriptura | Dr.Geo document (en) ![]() ![]() | ||||||||
Equip | |||||||||
Creador/s | Hilaire Fernandes (en) ![]() ![]() | ||||||||
Fonts de codi
| |||||||||
Més informació | |||||||||
Lloc web | gnu.org… (anglès) ![]() | ||||||||
Blog | Blog oficial ![]() | ||||||||
Seguiment d'errors | Seguiment d'errors ![]() | ||||||||
Free Software Directory | Dr-geo ![]() | ||||||||
Guia d'usuari | Guia d'usuari ![]() | ||||||||
| |||||||||
El Dr. Geo GNU, i més tard anomenat Dr. Geo II, és un programari de geometria interactiva que permet als seus usuaris dissenyar i manipular esbossos geomètrics interactius. És programari lliure (codi font, traduccions, icones i instal·lador es publiquen sota llicència GNU GPL), creat per Hilaire Fernandes, i forma part del projecte GNU. S'executa sobre un sistema gràfic Morphic (el que significa que es pot executar a Linux, Mac OS, Windows, Android). Dr. Geo es va desenvolupar en C++ i Dr. Geo II és una reescriptura completa amb Pharo de l'any 2005.
Objectes
Punts
El Dr. Geo manipula diferents tipus d'objectes com ara punts, línies, cercles, blocs de codi.
Té diversos tipus de punts: un punt lliure, que es pot moure amb el ratolí (però es pot adjuntar a una corba) i un punt a partir de les seves coordenades.
Els punts també es poden crear com a intersecció de 2 corbes o com a punt mitjà d'un segment.
Línies
El Dr. Geo està equipat amb la línia clàssica, raig, segment i vector .
Altres objectes curvilinis inclouen cercles (definits per 2 punts, un centre i segment o un radi), arcs (definits per tres punts o centre i angle), polígons (regulars o no, definits per punts finals) i llocs .
Transformacions
A més de la recta paral·lela i perpendicular que passa per un punt, el Dr. Geo pot aplicar a un punt o una línia una d'aquestes transformacions:
Macroconstrucció
El Dr. Geo ve amb macro-construcció: una manera d'ensenyar al Dr. Geo noves construccions. Permet afegir nous objectes a Dr. Geo: noves transformacions com la inversió de cercles, construccions tedioses que impliquen molts objectes intermedis o construccions que impliquen script (també anomenada macro-script).
Quan alguns objectes, anomenats finals, depenen d'altres objectes, anomenats initial, és possible crear una construcció complexa deduint els objectes finals dels objectes inicials donats per l'usuari. Aquesta és una macro-construcció, un gràfic d'objectes interdependents.
Programació
L'accés a la programació d'usuari és l'essència de Dr. Geo: des del programari, l'usuari pot llegir, estudiar, modificar i redistribuir directament la versió modificada de Dr. Geo. A més, es mostra l'script adjunt a l'esbós.
El codi font del Dr. Geo és Pharo. També és el llenguatge utilitzat per a la programació d'usuaris: estendre el Dr. Geo amb operacions informàtiques arbitràries (script Pharo) i definir un esbós geomètric totalment amb instruccions de programació (esbós Pharo).
Script Pharo
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/ScriptEditor.png/250px-ScriptEditor.png)
Un script és un objecte de primera classe definit al llarg del codi Dr. Geo. Ve amb zero, un o diversos arguments, dels tipus seleccionats en definir l'script. Quan una instància d'un script està connectada a un canvas, l'usuari selecciona primer els seus arguments al canvas amb el ratolí i després la posició al llenç de la sortida de l'script. L'script s'actualitza a cada càlcul del canvas. Els scripts es poden utilitzar en cascada, amb un d'ells com a argument d'un altre.[1]
![Curve and tangent](http://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Dynamic_Curve_and_tangent_.png/220px-Dynamic_Curve_and_tangent_.png)
Els scripts estan dissenyats per ser utilitzats de dues maneres diferents:
- Per mostrar un objecte (és a dir, un valor numèric) i mostrar el seu resultat al llenç. Aquest resultat es pot utilitzar quan es construeixen objectes posteriors (geomètrics o guió).
- Per accedir als objectes del llenç: model (MathItem) o vista (Costume) per a usos i modificacions arbitraris. Per exemple, per modificar el color d'un objecte donat el resultat a un càlcul.
Des de l'script, s'arriba al model d'arguments amb els mètodes #arg1, #arg2, etc. La vista d'arguments s'arriba amb els mètodes #costume1, #costume2, etc.
El càlcul de l'script es fa amb el seu mètode #compute. Per exemple, per calcular el quadrat d'un nombre, l'script
compute "returns the square of a number" ^ self arg1 valueItem squared
crea un objecte numèric, el valor del qual és
el quadrat de l'objecte número argument. Sempre que es canvia el primer número, el valor retornat de l'script també canvia.
Esbós Pharo
Els esbossos del Dr. Geo Pharo són esbossos totalment definits en el llenguatge Pharo. No es tracta de construir un esbós amb la interfície gràfica del Dr. Geo, sinó de descriure un esbós amb el llenguatge Pharo. Es proporciona una interfície de programació amb una sintaxi fàcil i lleugera.[2]
Triangle de Sierpinski
A continuació es mostra com programar un triangle de Sierpinski de manera recursiva:
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/DrGeo-Sierpinski.png/220px-DrGeo-Sierpinski.png)
| triangle c | c := DrGeoSketch new. triangle := []. 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
Espiral de Fibonacci
Una espiral de Fibonacci programada amb transformacions geomètriques (rotació, translació i homotècia):
|canvas shape alfa fibo a b m s| canvas := DrGeoSketch new fullscreen. 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
Algorisme de Newton-Raphson
Pharo sktech es pot utilitzar per dissenyar esbós interactiu que demostri el mètode d'anàlisi numèrica:
| 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 circumscrit en francès
Una versió francesa de l'API Pharo sketch permet escriure codi font en aquest idioma:
| figure a b c m1 m2| figure := DrGeoSketch nouveau. figure pleinEcran; afficherGrille; afficherAxes. a := figure segmentDe: 2@ 3 a: 0@0. a nommer: 'a'. b := figure segmentDe: 0@0 a: -1@2. b nommer: 'b'. c := figure segmentDe: -1@2 a: 2@3. c nommer: 'c'. m1 := (figure mediatrice: a) couleur: Color red. m2 := (figure mediatrice: b) couleur: Color red. (figure mediatrice: c) couleur: Color red. figure cercleCentre: (figure intersectionDe: m1 et: m2) passantPar: 0@0. (figure point: 0@0) montrer
Premis
- Premis ESUG Innovation Technology Awards (Amsterdam, 2008)
- Premis AFUL de programari lliure (París, 2000)