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 hace referencia a la versión más reciente.
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 |
Tipo | Software de geometría interactiva |
Licencia | GPL |
Sitio web | drgeo |
Objetos
Dr. Geo manipula diferentes tipos de objetos como puntos, líneas, círculos, bloques de código.
Puntos
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 .
Líneas
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 .
Transformaciones
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:
- reflexión
- simetría
- traducción
- rotación
- homotecia
Macroconstrucción
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írculos , 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.
Programación
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 boceto.
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.
Guión Pharo
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 usar en cascada, con uno como argumento de otro. [1]
Los guiones están diseñados para usarse de dos formas diferentes:
- Para generar un objeto (es decir, un valor numérico) y mostrar su resultado en el lienzo. Este resultado se puede utilizar al construir objetos posteriores (geométricos o de escritura).
- Para acceder a objetos en el lienzo: modelo (MathItem) o vista (Traje) para usos y modificaciones arbitrarios. Por ejemplo para modificar el color de un objeto dado el resultado de un cálculo.
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.
Boceto de Pharo
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]
Triángulo de Sierpinski
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 . triángulo valor: ( 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
Espiral de Fibonacci
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 . ( Lienzo arcCenter: c 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 : = forma valor: m valor: un valor: 1 . valor de forma : valor m : valor s : 1 . valor de fibo : { 1 . 2 } valor: b valor: a valor: 10
Algoritmo de Newton-Raphson
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 ] . croquis de la trama: f desde: -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 flecha hacia adelante . 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 ] .
Círculo circunscrito en francés
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 intersectionDe: m1 et: m2 ) passantPar: 0 @ 0 . ( punto de cifra : 0 @ 0 ) montrer
Premios
- Premios ESUG a la Innovación Tecnológica (Amsterdam, 2008)
- Premios AFUL de Software Libre (París, 2000)