Diferencia entre revisiones de «Referencia:Jython»

De GeoGebra Manual
Saltar a: navegación, buscar
Línea 47: Línea 47:
  
 
===Puntos y Vectores===
 
===Puntos y Vectores===
* Se pueden crear puntos y vectores por sus coordenadas
+
*Se pueden crear puntos y vectores por sus coordenadas
$A = Point(1, 2)
+
$A = Point(1, 2)
 
$B = Point(-2, 3)
 
$B = Point(-2, 3)
$u = Vector(1, -1)
+
$u = Vector(1, -1)
* Incluso, crear un punto a partir de un vector...
+
*Incluso, crear un punto a partir de un vector...
** $C = Point($u)
+
**$C = Point($u)
 
Viceversa, un vector a partir de un punto...
 
Viceversa, un vector a partir de un punto...
* $r_A = Vector($A)
+
*$r_A = Vector($A)
 
O con dos puntos...
 
O con dos puntos...
 
*$v = Vector($A, $B)
 
*$v = Vector($A, $B)
 
=====Entre Puntos y Vectores=====  
 
=====Entre Puntos y Vectores=====  
 
Si A es un punto o un vector...
 
Si A es un punto o un vector...
* $A.x  da por resultado su abscisa  ($A.x)
+
*$A.x  da por resultado su abscisa  ($A.x)
* $A.y  su ordenada ($A.y)
+
*$A.y  su ordenada ($A.y)
* $A.coords  su par de coordenadas ($A.coords)
+
*$A.coords  su par de coordenadas ($A.coords)
 
{{note|Siempre se trata de resultados dinámicos}}
 
{{note|Siempre se trata de resultados dinámicos}}
  
Línea 72: Línea 72:
 
**$C = Point(2*$A.x, 1+$B.y)  ($A.x es la abscisa de A)
 
**$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.
 
*... 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 ===
 
=== Atributos comunes a todos los elementos ===
 
Los siguientes atributos no se aplican sólo a puntos y vectores sino a todos los de objetos de GeoGebra.
 
Los siguientes atributos no se aplican sólo a puntos y vectores sino a todos los de objetos de GeoGebra.

Revisión del 23:30 19 feb 2013

Ventana Python

Pueden observarse al respecto estas presuntas alternativas aún en desarrollo o en este mismo artículo la sección correspondiente Vista o Ventana Python y a Phyton para Todos en caso de desear profundizar en cuestiones propias del lenguaje interpretado.

Vista Python

Muy recomendable la guía que - en francés - desarrolla el tema y 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 guión - 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 guión - 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 elaborada en francé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 sólo 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 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 sólo 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 sólo 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 guión 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 guión - script - oculta los dos ejes en la Vista Gráfica

$xAxis.visible = False

$yAxis.visible = False

Círculos Elipses Hipérbolas Parábolas

  • Este guión 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 guión corto, de guión 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 nuevo 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

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, sólo 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 guión 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 guión) 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

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 ()

fr:Référence:Jython

© 2024 International GeoGebra Institute