![]() | |
![]() | |
Autor (es) original (es) | Hilaire Fernandes |
---|---|
Versión inicial | 31 de diciembre de 1996 |
Lanzamiento estable | 19.09 / 6 de agosto de 2019 |
Repositorio | |
Escrito en | Pharo , Smalltalk |
Sistema operativo | Linux , Mac OS X , Windows , Sugar |
Escribe | Software de geometría interactiva |
Licencia | GPL |
Sitio web | drgeo |
GNU Dr. Geo es un software de geometría interactiva que permite a sus usuarios diseñar y manipular bocetos geométricos interactivos. Es un software gratuito (el código fuente, las traducciones, los iconos y el instalador se publican bajo licencia GNU GPL ), creado por Hilaire Fernandes, es parte del proyecto GNU . Se ejecuta sobre un sistema gráfico Morphic (lo que significa que se ejecuta en Linux, Mac OS, Windows, Android). La versión actual de Dr. Geo también se llama Dr. Geo II. Históricamente, Dr. Geo se desarrolló en C ++ y Dr. Geo II es una reescritura completa usando Pharo que sucedió en 2005. Este artículo se refiere a la versión más reciente.
Dr. Geo manipula diferentes tipos de objetos como puntos, líneas, círculos, bloques de código.
Dr. Geo tiene varios tipos de puntos: un punto libre, que se puede mover con el mouse (pero que se puede adjuntar a una curva) y un punto dado por sus coordenadas.
Los puntos también se pueden crear como la intersección de 2 curvas o como el punto medio de un segmento .
Dr. Geo está equipado con la línea clásica , rayo , segmento y vector .
Otros objetos curvilíneos incluyen círculos (definidos por 2 puntos, un centro y segmento o un radio), arcos (definidos por tres puntos o centro y ángulo), polígonos (regulares o no, definidos por puntos finales) y loci .
Además de la línea paralela y perpendicular a través de un punto, Dr. Geo puede aplicar a un punto o una línea una de estas transformaciones:
Dr. Geo viene con macroconstrucción: una forma de enseñar a Dr. Geo nuevas construcciones. Permite agregar nuevos objetos a Dr. Geo: nuevas transformaciones como inversión de círculo , construcciones tediosas que involucran muchos objetos intermedios o construcciones que involucran script (también llamado macro-script).
Cuando algunos objetos, llamados finales, dependen de otros objetos, llamados iniciales , es posible crear una construcción compleja deduciendo los objetos finales de los objetos iniciales dados por el usuario. Esta es una macroconstrucción , un gráfico de objetos interdependientes.
El acceso a la programación del usuario es la esencia de Dr. Geo: desde el software, el usuario puede leer, estudiar, modificar y redistribuir directamente la versión modificada de Dr. Geo. Además, se propone la creación de scripts incrustados en el croquis.
El código fuente de Dr. Geo es Pharo . También es el lenguaje utilizado para la programación del usuario: extender Dr. Geo con operaciones de computación arbitrarias (script Pharo) y definir un boceto geométrico completamente con instrucciones de programación (boceto Pharo).
Dr. Geo se envía con su código fuente y las herramientas de desarrollo. Por lo tanto, su código se puede editar y recompilar desde Dr. Geo mientras está funcionando. Este diseño, heredado de Pharo, facilita probar nuevas ideas y nuevos diseños.
Un script es un objeto de primera clase definido a lo largo del código Dr. Geo. Viene con cero, uno o varios argumentos, de los tipos seleccionados al definir el script. Cuando una instancia de un script se conecta a un lienzo, el usuario primero selecciona sus argumentos en el lienzo con clics del mouse y luego la posición en el lienzo de la salida del script. El script se actualiza en cada cálculo del lienzo. Los scripts se pueden utilizar en cascada, con uno como argumento de otro. [1]
Los scripts están diseñados para usarse de dos formas diferentes:
Desde el script, el modelo de argumentos se alcanza con los métodos # arg1, # arg2, etc. La vista de argumentos se alcanza con los métodos # costume1, # costume2, etc.
El cálculo del script se realiza en su método #compute. Por ejemplo, para calcular el cuadrado de un número, el script
calcular "devuelve el cuadrado de un número" ^ self arg1 valueItem squared
crea un objeto numérico, cuyo valor es el cuadrado del objeto de número de argumento. Siempre que se cambia el primer número, el valor devuelto por el script también cambia.
Los bocetos del Dr. Geo Pharo son bocetos completamente definidos en el lenguaje Pharo. No se trata de construir un boceto con la interfaz gráfica de Dr. Geo, sino de describir un boceto con el lenguaje Pharo. Se proporciona una interfaz de programación con una sintaxis fácil y ligera. [2]
A continuación se explica cómo programar un triángulo de Sierpinski de forma recursiva:
| triángulo c | c : = DrGeoSketch nuevo . triángulo : = [] . triángulo : = [ : s1 : s2 : s3 : n | segmento c : s1 a: s2 ; segmento: s2 a: s3 ; segmento: s3 a: s1 . n > 0 ifTrue: [ valor del triángulo : valor s1 : ( c middleOf: s1 y: s2 ) ocultar valor: ( c middleOf: s1 y: s3 ) ocultar valor: n - 1 . valor del triángulo : ( c middleOf: s1 y: s2 ) ocultar valor: s2 valor: ( c middleOf: s2 y: s3 ) ocultar valor: n - 1 . valor del triángulo : ( c middleOf: s1 y: s3 ) ocultar valor: ( c middleOf: s2 y: s3 ) ocultar valor: s3 valor: n - 1 . ]] . valor del triángulo : 0 @ 3 valor: 4 @ -3 valor: -4 @ -3 valor: 3 . ( punto c : 0 @ 3 ) mostrar
Una espiral de Fibonacci programada con transformaciones geométricas (rotación, traslación y homotecia):
| forma de lona alfa fibo abms | lienzo : = DrGeoSketch nueva pantalla completa . alfa : = ( lienzo freeValue: -90 gradosToRadianos ) ocultar . forma : = [ : c : o : f | | ep | e : = ( lienzo rotar: o centro: c ángulo: alfa ) ocultar . ( Lona arcCenter: c a partir de: o a: e ) grande . p : = lienzo traducir: e vector: ( lienzo vector: c a: o ) ocultar . ( lienzo polígono: { c . o . p ocultar . e }) nombre: f . e ] . fibo : = [] . fibo : = [ : f : o : c : k | | e f1 f2 f3 c2 | "f1: término Fn-1, f2: término Fn, o & c: origen y centro del brazo espiral e: extremo del brazo espiral" f1 : = f primero . f2 : = f segundo . f3 : = f1 + f2 . e : = valor de forma : valor c : valor o : f3 . c2 : = ( escala del lienzo : centro c : factor e : f3 / f2 ) ocultar . k > 0 ifTrue: [ valor de fibo : { f2 . f3 } valor: e valor: c2 valor: k - 1 ]] .a : = punto del lienzo : 1 @ 0 . b : = punto del lienzo : -1 @ 0 . m : = ( lona middleof: una y: b ) ocultar . s : = valor de forma : valor m : un valor: 1 . valor de forma : valor m : valor s : 1 . valor de fibo : { 1 . 2 } valor: b valor: un valor: 10
Pharo sktech se puede utilizar para diseñar un boceto interactivo que demuestre el método de análisis numérico:
| croquis f df xn ptA ptB | sketch : = DrGeoSketch new axesOn . xn : = 2 . f : = [ : x | x cos + x ] . "Número derivado" df : = [ : x | ( valor f : x + 1e-8 ) - ( valor f : x ) * 1e8 ] . diagrama de croquis : f de: -20 a: 20 . ptA : = ( punto de croquis : xn @ 0 ) grande ; nombre: 'Arrástrame' . 5 veces Repita: [ ptB : = punto de boceto : [ : pt | pt punto x @ ( valor f : pt punto x )] padre: ptA . ptB ocultar . ( segmento de boceto : ptA a: ptB) punteado forwardArrow . ptA : = punto de croquis : [ : pt | | x | x : = pt punto x . x - (( valor f : x ) / ( valor df : x )) @ 0 ] padre: ptB . ptA ocultar . ( segmento de boceto : ptB a: ptA ) punteado flecha hacia adelante ].
Una versión francesa de la API de bocetos de Pharo hace posible escribir el código fuente en este idioma:
| cifra abc m1 m2 | figura : = DrGeoSketch nouveau . figure pleinEcran ; afficherGrille ; afficherAxes . a : = figura segmento De: 2 @ 3 a: 0 @ 0 . un nommer: 'a' . b : = figura segmento De: 0 @ 0 a: -1 @ 2 . b nommer: 'b' . c : = figura segmento De: -1 @ 2 a: 2 @ 3 . c nommer: 'c' . m1 : = ( figura mediatriz: a ) couleur: Color rojo . m2 : = ( figura mediatriz: b ) couleur: Color rojo .
( figura mediatriz: c ) couleur: Color rojo . figura cercleCentre: ( figura intersecciónDe: m1 et: m2) passantPar: 0 @ 0 . ( punto de cifra : 0 @ 0 ) montrer