DrGeo

De la Viquipèdia, l'enciclopèdia lliure
DrGeo
Modifica el valor a Wikidata
Modifica el valor a Wikidata
Tipusprogramari de geometria dinàmica, programari educatiu, programari lliure i paquet GNU Modifica el valor a Wikidata
Versió inicial31 desembre 1996 Modifica el valor a Wikidata
Versió estable
23.06 (24 juny 2023) Modifica el valor a Wikidata
LlicènciaGNU GPL 2.0 o posterior Modifica el valor a Wikidata
Part deProjecte GNU Modifica el valor a Wikidata
Característiques tècniques
Sistema operatiuGNU/Linux, Microsoft Windows, macOS, Android i Sugar Modifica el valor a Wikidata
Escrit enSmalltalk, Pharo i C++ Modifica el valor a Wikidata
Format de fitxer de lectura
Format de fitxer d'escriptura
Equip
Creador/sHilaire Fernandes (en) Tradueix Modifica el valor a Wikidata
Més informació
Lloc webgnu.org… (anglès) Modifica el valor a Wikidata
Seguiment d'errorsSeguiment d'errors Modifica el valor a Wikidata
Free Software DirectoryDr-geo Modifica el valor a Wikidata
Guia d'usuariGuia d'usuari Modifica el valor a Wikidata

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[modifica]

Punts[modifica]

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[modifica]

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[modifica]

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:

  1. reflexió
  2. simetria
  3. traducció
  4. rotació
  5. homotecia

Macroconstrucció[modifica]

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ó[modifica]

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[modifica]

Edició de l'script en temps real

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
La corba i la seva tangent es calcula amb l'escriptura Pharo

Els scripts estan dissenyats per ser utilitzats de dues maneres diferents:

  1. 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ó).
  2. 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[modifica]

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[modifica]

A continuació es mostra com programar un triangle de Sierpinski de manera recursiva:

Triangle de Sierpinski interactiu computat
| 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[modifica]

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[modifica]

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[modifica]

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[modifica]

Vegeu també[modifica]

Referències[modifica]