Referencia:Python

De GeoGebra Manual
Saltar a: navegación, buscar

Ventana Python

Pueden observarse al respecto estas presuntas alternativas aún en desarrollo o en este mismo artículo, la sección correspondiente guiones Python y a Phyton para Todos para profundizar en ese lenguaje interpretado.

Vista Python

Muy recomendable la amplía guía - en inglés- sobre el tema y, en una propuesta sintética, la sección que ofrece descripciones y ejemplos.

Guiones Python en GeoGebra 4.2

La ventana de Python contiene tres paneles:

  • Interactivo

Aquí puede introducir expresiones de Python y ver de inmediato su efecto. Con las teclas Alt + Arriba / Alt + Abajo}} se puede navegar por la historia de comandos ingresados.

  • De Guiones

En que se puede escribir la secuencia de comandos a ser ejecutados al cargar el archivo. GGB. También puede ejecutarse el guion - script - desde aquí, en cualquier momento.

  • De Eventos. Aquí puede seleccionar un objeto y enlazar cualquier script de GeoGebra en Python de modo que para...
    • su ejecución basta un clic sobre el tema
    • se acceda a editarlo para cambiar su valor.
Ejemplo

En un guion - script -, el objeto asociado al evento pueden auto-referenciarse. Para pegar una demostración al respecto en el panel interactivo, basta con copiarla desde la página de la guía de Python en inglés.

geo.A = (1,2)
# Crear algunos puntos al azar
import random
xcoords = [random.uniform(-2, 5) for i in range(8)]
ycoords = [random.uniform(-2, 5) for i in range(8)]
points = [Point(x, y) for x, y in zip(xcoords, ycoords)]
# Enlace de todos a A
segments = [Segment(p, geo.A) for p in points]
# Definir una función para exponer solo el segmento más cortoa
def show_shortest(moved_point):
  for s in segments: s.visible = False
  shortest = min(segments, key=float)
  shortest.visible = True
# La llamada cada vez que A es modificada
geo.A.onupdate = show_shortest
# Ahora, ¡a desplazar A en la Vista Gráfica!

Nombres en Python y GeoGebra

Dado que tanto GeoGebra como Python operan con objetos que tienen nombres, es importante contar con un ágil acceso desde Python a GeoGebra sin confundir los de sendos tipos. Los objetos GeoGebra se pueden referir (y crear) en Python anteponiendo a su nombre el prefijo geo o $ . Así, si existiera un punto denominado A, exclusivamente se lo debe referir en Python como $A o geo.A. Todos los demás nombres no son accesibles desde Python. En tanto lo mencionado solo permite nombres en formato ASCII, puede ser útil, en otros idiomas, una sintaxis para acceder a nombres que excedan el código ASCII. {{Example|1=La siguiente escritura devuelve todo objeto GeoGebra llamado A.

$ A geo.A $ ['A'] También hay una sintaxis para modificar las celdas de una hoja de cálculo: $ ['B', 2] = 12 # Asigna el valor 12 a B2 $ [3, 1] = 42 # Asigna el valor 42 a C1 (A = 1, B = 2, ...) $ ["A", 1] = (2, 2) # Asignar el punto (2, 2) a A1 $ ["A", 1]. Color = # Color.RED # Cambia el color del punto.

Puntos y Vectores

  • Se pueden crear puntos y vectores por sus coordenadas

$A = Point(1, 2) $B = Point(-2, 3) $u = Vector(1, -1)

  • Incluso, crear un punto a partir de un vector...
    • $C = Point($u)

Viceversa, un vector a partir de un punto...

  • $r_A = Vector($A)

O con dos puntos...

  • $v = Vector($A, $B)
Entre Puntos y Vectores

Si A es un punto o un vector...

  • $A.x da por resultado su abscisa ($A.x)
  • $A.y su ordenada ($A.y)
  • $A.coords su par de coordenadas ($A.coords)
Nota: Siempre se trata de resultados dinámicos

Resultados Dinámicos

El resultado no es un número sino como una expresión cuyo valor se actualiza dinámicamente cuando el punto o el vector se desplazan.

  • Para obtener el valor actual, se debe apelar a A.x.value y a A.y.value. - valores de Ax y de Ay respectivamente-, atributos que también permiten asignar coordenadas a un punto y/o a un vector
    • $A.x = 3 ($A.x es la abscisa)
    • $B.coords = (-1, 2) ($B.coords son las coordenadas)
  • ... definen la abscisa de A como 3 y las coordenadas de B como (-1, 2) y para establecer puntos derivados de los precedentes. Así...
    • $C = Point(2*$A.x, 1+$B.y) ($A.x es la abscisa de A)
  • ... creando un punto C en que la abscisa es el doble del de A y la ordenada, una unidad por encima de la de B.

Atributos comunes a todos los elementos

Los siguientes atributos no se aplican solo a puntos y vectores sino a todos los de objetos de GeoGebra.

  • visible (booleana);
  • color (para definirlo, por ejemplo, se utiliza Color.Red o Color(0,5, 0,9, 0,8) (de forma idéntica a java.awt.Color);
  • label (etiqueta, una cadena);
  • label_color;
  • label_visible (booleana);
  • label_mode puede ser uno de las opciones, nombre, nombre y valor, valor, subtítulo
  • caption (sub-título, una cadena);
  • trace (booleana que si es verdadera, establecer que se deje rastro o huella).

Este guion o script crea un punto rojo con una leyenda negra que dice "Dar clic aquí"

  • $P = Point(3, 1) ($P es la referencia al punto P)
  • $P.color = Color.RED
  • $P.label_color = Color.BLACK
  • $P.label_mode = "caption"
  • $P.caption = "Dar clic aquí"

Los atributos pueden ser asignados directamente en la creación del objeto. La siguiente escritura tiene el mismo efecto que la anterior:

  • $P = Point(3, 1, color=Color.RED, label_color=Color.BLACK, label_mode='caption', caption="Dar clic aquí") (nuevamente, $P refiere al punto P)

Trayectos

Las líneas y los segmentos

Este script traza una recta que pasa por los puntos A y B

  • $l = Line($A, $B) (A y B se indican con el prefijo $)

Este, una recta, l1, que pasa por A y tiene la dirección del vector u

  • $l_1 = Line($A, $u) (A y u se indican con el prefijo $)

Pueden crearse también, semirrectas y segmentos

  • $r = Ray((1, 1), (2, 0)) (r se indica con el prefijo $)
  • $s = Segment((-3, 0), (2, 1)) (s se indica con el prefijo $)

Los segmentos tienen dos atributos, el nombre del punto inicial y el del final. Las rectas, segmentos y semirrectas tienen como atributo el nombre del vector que les determina la dirección.

Ejes

Dos objetos especiales, $xAxis y $yAxis que representan los dos ejes de coordenadas, con los que por el momento es limitado lo que puede llevarse adelante, tienen los siguientes atributos - visible : permite modificar la visibilidad de un eje. Este guion - script - oculta los dos ejes en la Vista Gráfica

$xAxis.visible = False

$yAxis.visible = False

Círculos Elipses Hipérbolas Parábolas

  • Este guion o script crea cuatro círculos de...
    • - C1 con centro en (1, 1) que pasa por el punto (3, 2)
    • - C2 que pasa por los puntos (0, 0), (4, 0), (4, 3)
    • - C3 con centro en A y radio BC
    • - C4 con centro en (-2, 0) y radio 3.
      • $C_1 = Circle((1, 1), (3, 2)) (C_1 se indica con el prefijo $)
      • $C_2 = Circle((0, 0), (4, 0), (4, 3)) (C_2 se indica con el prefijo $)
      • $C_3 = Circle($A, Segment($B, $C))
      • $C_4 = Circle((-2, 0), 3) (C_4 se indica con el prefijo $)
  • Este script crea dos elipses, dos hipérbolas y una parábola
    • E1 de focos (-2, 0), (2, 0) y longitud del semi-eje mayor igual a 3
    • E2 de focos (1, 1), (3, 1) que pasa por el punto (2, 2) ;
    • H1 de focos (-2, 0), (2, 0) y longitud del semi-eje mayor igual a 3;
    • H2 de focos (1, 1), (3, 1) que pasa por el punto (2, 2) ;
    • P de foco (0, 0) y recta directriz (AB).
      • $E_1 = Ellipse((-2, 0), (2, 0), 3) (E_1 se indica con el prefijo $)
      • $E_2 = Ellipse((1, 1), (3, 1), (2, 2)) (E_2 se indica con el prefijo $)
      • $H_1 = Hyperbola((-2, 0), (2, 0), 3) (H_1 se indica con el prefijo $)
      • $H_2 = Hyperbola((1, 1), (3, 1), (2, 2)) (H_2 se indica con el prefijo $)
      • $P = Parabola((0, 0), Line($A, $B)) (P se indica con el prefijo $)

Atributos de Recorridos

Todos los recorridos (rectos y curvos) tiene como atributos...

  • Grosor (valor numérico);
  • Tipo de Trazo (cadena que puede indicar una de las opciones de trazo pleno o de uno de los punteados como el de guion corto, de guion largo, puntos, punto-raya).

Polígonos y Poligonales

Para crear un polígono con vértices A, B y C se puede utilizar:

$ABC = Polygon($A, $B, $C)

o

$ABC = Polygon([$A, $B, $C])

Esta última escritura es más útil si se desea crear un polígono a partir de una lista arbitraria de puntos. Los polígonos tienen atributos:

  • boundary - perimetral: el perímetro del polígono como una poligonal;
  • points - puntos: una lista de Python de todos los vértices del polígono (que también puede obtenerse a través de la lista (poli));
  • area o value - el área o valor: el área del polígono;
  • edges - lados: una lista Python de todos los lados del polígono;
  • directed_area: el área con un signo (+ a la izquierda - a derecha);
  • len(poly) longitud del polígono, es decir el número de vértices.

El índice i de un vértice se puede obtener a través de poli [I]. Esto mismo vale para las poligonales excepto los atributos de los lados o del área o la directed_area. El atributo de su valor, devuelve la longitud total.

Listas - Textos - Funciones

Listas

Las listas de GeoGebra no se deben confundir con las listas de Python. Las listas pueden ser creadas de la siguiente manera: my_list = List(1, 2, 3) crea una lista GeoGebra ; python_list = [1, 2, 3] crea una lista Python.

La notación indicial se puede utilizar para obtener o eliminar un elemento en una posición dada:

print my_list[1] muestra el segundo elemento (el primero tiene índice 0);

del my_list [0], elimina el primer elemento.

Puede añadirse un elemento nuevo al final de una lista mediante el método append:

my_list.append(42)   

Es posible establecer un bucle o lazo sobre los elementos de una lista: for item in my_list print item + 10 Se puede convertir una lista GeoGebra en una de Python :

python_list = list(my_list)

Se pueden eliminar todos los elementos de una lista con el método de GeoGebra clear : my_list.clear()

Textos

Puede crearse un texto con la siguiente sintaxis: t = Text("¡Muy buenos días!") Los textos tienen los siguientes atributos:

  • origin - origen (un punto). Se puede conocer/leer o asignarse;
  • text - texto (la cadena del texto). Se puede leer o asignados;
  • latex (valor booleano): true si el texto debe aparecer en LaTeX y false en caso contrario.

Esta secuencia de comandos sitúa el origen del texto t en (2, 2) y establece "Abracadabra" como el texto a exponer: t.orgin.coords = (2, 2) t.text = "Abracadabra" Se le puede cambiar el punto de origen con la siguiente declaración: t.orgin = (3, 1) Pero a diferencia del anterior, en este caso, no se actualizan las coordenadas sino que se crea un Punto.

Origen Dinámico

Para situar el origen del texto t en el punto A -de modo que se desplazará cuando A se mueva-, basta con anotar: t.origin = $ $A

Más sobre LaTeX

Para mayores detalles sobre el trabajo con LaTeX conviene consultar


Notas:

Si bien los comandos más frecuentes de LaTeX en los contextos y textos de matemáticas operan adecuadamente en GeoGebra, para incluir un sub-conjunto más avanzado, en conveniente recurrir a prestaciones externas, adicionales.

Las Funciones en Ecuaciones e Inecuaciones

Funciones

Las funciones se pueden definir fácilmente en Python:


def f(x): return sin(x)/x
$f = Function(f)


También puede tratarse de funciones de dos variables:


def f(x, y): return x**2+y**2 - 5


Se caracterizan por la curva implícito como atributo:


$f = Function(f)
$c = f.implicitcurve


Las funciones pueden establecerse a partir de inecuaciones de desigualdades:
def f(x, y): return x**2 > x + y


geo.f = Function(f)

Tortugas

Las tortugas son objetos que se pueden mover y con los que se puede dibujar figuras en una ventana en la que se opera (a la Euclides), geométricamente, tal como se puede apreciar en el lenguaje Logo.

Ejemplo: Para crear una nueva tortuga, basta con indicar: t = Turtle ()

Las tortugas pueden desplazarse y, lo que es mejor aún, pueden animarse mientras se controla y monitorea su movimiento. Se les puede ajustar la velocidad (como se explica más adelante).

Ejemplo: Un ejemplo sencillo para dibujar un pentágono regular con una tortuga se anota a continuación:
  * t.pen_color = Color.RED
  * for i in range(5):
   ** t.forward(2)
   ** t.turn_left(72)
______

Se puede apreciar el movimiento y los giros de una tortuga u optar por la operación instantánea de la tortuga, indicando: t.speed = 0

Las tortugas, en tanto objetos funcionales, tienen los siguientes atributos:

  • pen_color: permite conocer o establecer el color del lápiz con que dibuja su rastro la tortuga;
  • position: permite conocer o establecer la posición actual de la tortuga;
  • angle: permite conocer o establecer la dirección actual de la tortuga;
  • pen_thickness: permite conocer o establecer el ancho del trazo del lápiz de la tortuga;
  • running: permite - cuando se le asigna valor True - animar a la tortuga y detener su movimiento - cuando se le asigna valor False -;
  • speed: permite conocer o establecer la velocidad de animación de la tortuga - es un número decimal entre 0 y 1-. 0 significa velocidad instantánea, 0,01 es la más lenta y así, en escala decreciente de velocidad (el valor por omisión es 0,1)

Las tortugas, en tanto objetos funcionales, operan con los siguientes métodos:

clear (): restablece la posición y el ángulo de la tortuga y se borra el dibujo.

  • forward(distancia): para ordenarle avanzar las unidades de distancia indicadas. Lo que, a su vez, provoca el trazado de un segmento si la pluma del lápiz de la tortuga está activo (hacia abajo);
  • turn_left(ángulo): para ordenarle girar a la izquierda el número de grados del ángulo indicado;
  • turn_right(angle): para ordenarle girar a la derecha el número de grados del ángulo indicado;
  • clear(): reinicializa, limpia todo trazo o diseño y ubica al la tortuga en la posición y orientación de partida para realizar trazados.

Intersecciones

Intersect(x, y) funciona por ahora, solo cuando se trata de trazos de rectas o cónicas. También se puede utilizar para una lista de pares de números, para encontrar los puntos de intersección.

l = Line((0, 1), (2, 2)) # una recta
c = Circle((0, 0), 3) # una circunferencia
p, q = Intersect(l, c)

Para controlar si existe una intersección `p`, puede emplearse `not p.infinite` (o `p.infinite` para probar si la intersección no existe). Vale tener en cuenta que `p.defined` no funciona porque GeoGebra se basa en la geometría proyectiva, en la que dos rectas siempre definen un punto de intersección.

Acceso a Objetos Seleccionados

La selección de objetos permite el acceso a la selección actual: - selection.all devuelve la lista de todos los objetos seleccionados; - selection.filter (<tipo>) devuelve la lista de todos los objetos de cada tipo (<tipo>) indicado.

Cuando sea apropiado, también se pueden utilizar la siguiente sintaxis:

  • selection.points;
  • selection.vectors;
  • selection.lines;
  • selection.segments.

Gestión de Eventos

Se puede apelar a la sección de Eventos en la Ventana de Python para seleccionar un objeto y un evento y, a continuación escribir una secuencia de comandos - un guion o script - en el área del editor de texto. En estos casos, el destino del objeto puede hacer referencia a sí mismo. Por ejemplo, se puede escribir esta secuencia de comandos en el campo de Actualizaciòn de un punto:

if self.x < 0:
   		self.caption = "negative x"
else:
   		self.caption = "positive x"

Cuando el rótulo que se elige exponer del punto es el correspondiente al sub-título, se apreciará que se registra la leyenda de los cambios del punto a medida que se lo desplaza de a ambos lados de los ejes de ordenadas. Desde los guiones (scripts) de eventos se tiene acceso a todas las variables definidas en el campo de guiones (' Script en Python) . Sin embargo, si se desea cambiar el valor de una variable, debe ser declarada como global - si no se crea como variable local dentro de la secuencia de comandos (script o guion) de eventos.

 global score
 score += 1

También se puede agregar directamente controladores de eventos en la definición de los siguientes atributos de los objetos:

  • onupdate ;
  • onadd ;
  • onremove ;
  • onclick ;
  • onrename.

Los atributos pueden ser definidos por una función de un argumento (que es el objetivo del evento):

def paint_blue(pt):
pt.color = Color.BLUE
geo.A.onclick = paint_blue

Métodos Especiales

  • answer = input(<question>) abre una caja de diálogo vacía y devuelve la cadena previa establece el rango de la respuesta;
  • - answer = input(<question>) abre una caja de diálogo
  • - answer = input(<question>, <default answer>) similar a la anterior, excepto que la caja de diálogo muestra inicialmente la respuesta como salida por omisión;
  • alert(<texte>) muestra una ventana de mensaje que contiene el texto;
  • debug(<texte>) expone / depura el texto escrito, en la Consola de Java;
  • command(<texte>) evalúa un comando de GeoGebra y devuelve una lista de objetos.
  • - command("3x+2y=12") crea la recta: 2x + 3y = 12
  • - command('Circle', (x, y), r) crea la circunferencia con centro en el punto (3, 2), de radio 4
    • - x, y = 3, 2
    • - r = 4
    • c: (x - 3)² + (y - 2)² = 16

Módulo Matemático

Desde el correspondiente módulo de Python (y/o desde sus librerías), en este caso el de matemática , como math.fabs(), se pueden realizar numerosas operaciones. como la de math.sqrt(2), o las de math import fabs, math.fabs(-2),math.fabs(5).

Acceso a la API de GeoGebra desde Python

Para acceder a GgbAPI, basta con anteponer el prefijo de llamada a ggbApplet, (es decir, es la misma sintaxis que JavaScript)

  • ggbApplet.evalCommand ("x ^ 2 + y ^ 2 = 4")
  • ggbApplet.startAnimation ()
© 2020 International GeoGebra Institute