Referencia:Jython

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 Vista o Ventana Python y a Phyton para Todos en caso de desear profundizar en cuestiones propias del lenguaje interpretado.

Vista o Ventana 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).
Métodos Especiales
  • - answer = input(<question>) abre una caja de diálogo vacía y la cadena previa se asocia a la respuesta
  • - answer = input(<question>, <default answer>) similar a la anterior, pero la ventana de la caja de diálogo muestra la respuesta como salida por omisión
  • - alert(<text>) muestra una ventana con el mensaje que contiene el texto
  • - debug(<text>) depura el texto escrito en la Consola de Java
  • - command(<text>) evalúa un comando GeoGebra y devuelve una lista de objetos
  • - command("3x+2y=12") crea la recta: 2x + 3y = 12
  • - command('Circle', (x, y), r) crea el círculo 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 ()


Tortues

Les tortues sont des objets qui peuvent être déplacés et dessiner des formes dans la fenêtre euclidienne (voir le langage logo) Pour créer uje nouvelle tortue, il suffit de valider :

t = Turtle()

Les tortues peuvent être déplacées, et le mieux à leur sujet c’est qu’elles peuvent être animées, i.e. vous pouvez surveiller leur déplacement. Leur vitesse peut être ajustée, voir ci-dessous. Voici un exemple simple pour faire dessiner un pentagone régulier à la tortue définie précédemment :

t.pen_color = Color.RED
for i in range(5):
 t.forward(2)
 t.turn_left(72)


Notez comment vous pouvez voir la tortue se déplacer et tourner sans à-coups. Si vous préférez que la tortue dessine instantanément, vous pouvez faire

t.speed = 0

Les objets Tortue ont les attributs suivants :

  • pen_color : peut être utilisé pour obtenir ou définir la couleur du crayon de la tortue ;
  • position : peut être utilisé pour obtenir ou définir la position actuelle de la tortue ;
  • angle : peut être utilisé pour obtenir ou définir l’orientation actuelle de la tortue ;
  • pen_thickness : peut être utilisé pour obtenir ou définir la largeur du trait de crayon de la tortue ;
  • running : défini à True pour animer la tortue, à false pour arrêter son déplacement ;
  • speed : la vitesse d’animation de la tortue – c’est un nombre décimal entre 0 et 1. 0 signifie instantané, 0.01 très lent, 1 très rapide (par défaut 0.1)

Les objets Tortue ont les méthodes suivantes :

  • forward(distance): pour faire avance de distance unités. Ce qui tracera aussi un segment si le crayon est baissé ;
  • turn_left(angle): pour tourner à gauche de angle degrés ;
  • turn_right(angle): pour tourner à droite de angle degrés ;
  • clear(): réinitialise la position et l’angle de la tortue et efface le dessin.

Intersections

Intersect(x, y) fonctionne pour x et y étant, pour l’instant, seulement des droites ou des coniques. On peut aussi l’utiliser pour une liste de couples de nombres pour trouver les points d’intersection.

l = Line((0, 1), (2, 2))
c = Circle((0, 0), 3)
p, q = Intersect(l, c)

Pour tester si un point d’intersection `p` existe, utilisez `not p.infinite` (ou `p.infinite` pour tester si l’intersection n’existe pas). Notez que `p.defined` ne fonctionne pas parce que GeoGebra est basé sur la géométrie projective, dans laquelle deux droites ont toujours un point d’intersection.


Accès aux objets sélectionnés

L’objet selection permet l’accès à la sélection actuelle : - selection.all retourne la liste de tous les objets sélectionnés ; - selection.filter(<type>) retourne la liste de tous les objets de type <type> sélectionnés.

Si cela convient, les syntaxes suivantes peuvent aussi être utilisées :

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

Gérer les événements

Vous pouvez utilisez le volet Events dans la fenêtre Python pour sélectionner un objet et un événement, taper ensuite un script dans la zone de l’éditeur de texte. La cible de l’objet peut être référencée par self. Par exemple vous pouvez écrire ce script dans le champ onupdate d’un point :

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

Aussi longtemps que le mode Étiquette du point sera défini à caption, vous pourrez voir que la légende du point change si vous le déplacez de part et d’autre de l’axe des ordonnées.

Toutes les variables définies dans le Script Python sont accessibles dans les scripts d’événements. Cependant, si vous voulez modifier la valeur d’une variable, vous devez la déclarer comme globale – sinon une variable au script d’événements est créée.

global score
score += 1


Vous pouvez aussi ajouter directement des gestionnaires d’événements en définissant les attributs suivants pour des objets :

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

Les attributs peuvent être définis par une fonction à un argument (qui est la cible de l’événement)

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

Méthodes spéciales

  • answer = input(<question>) ouvre une fenêtre de dialogue vide et la chaîne rentrée est rangée dans answer ;
  • answer = input(<question>, <réponse par défaut>) comme ci-dessus, mais la fenêtre de dialogue fait apparaître au départ la réponse par défaut;
  • alert(<texte>) affiche une fenêtre de message contenant texte ;
  • debug(<texte>) écrit texet dans la Console Java ;
  • command(<texte>) évalue une commande GeoGebra et retourne une liste d’objets.


command("3x+2y=12") 	

crée la droite a: 2x + 3y = 12

x, y = 3, 2
r = 4
command('Circle', (x, y), r)

crée le cercle de centre le point de coordonnées(3 ; 2)et de rayon 4 c: (x - 3)² + (y - 2)² = 16

© 2024 International GeoGebra Institute