Diferencia entre revisiones de «Referencia:Python»
Línea 1: | Línea 1: | ||
{{Referencia}}__NOTOC__== Ventana Python == | {{Referencia}}__NOTOC__== Ventana Python == | ||
− | Pueden observarse al respecto [http://dev.geogebra.org/trac/wiki/Jython estas presuntas alternativas aún en desarrollo] o en este mismo artículo la sección correspondiente | + | Pueden observarse al respecto [http://dev.geogebra.org/trac/wiki/Jython estas presuntas alternativas aún en desarrollo] o en este mismo artículo, la sección correspondiente guiones Python y a [https://launchpadlibrarian.net/18980633/Python%20para%20todos.pdf ''Phyton para Todos''] para profundizar en ese lenguaje interpretado. |
=== Vista Python === | === Vista Python === | ||
− | Muy recomendable la [http:// | + | Muy recomendable la guía que - en inglés- desarrolla ampliamente el tema y ofrece [http://luccisun.webfactional.com/sbc/docs/FundamentalsofPythonFromFirstProgramsthroughDataStructures2009_KA_Lambert.pdf descripciones y ejemplos]. |
=== Guiones Python en GeoGebra 4.2 === | === Guiones Python en GeoGebra 4.2 === | ||
La ventana de Python contiene tres paneles: | La ventana de Python contiene tres paneles: | ||
− | *Interactivo | + | * Interactivo |
Aquí puede introducir expresiones de Python y ver de inmediato su efecto. Con las teclas {{KeyCode|Alt}} + {{KeyCode|Arriba}} / {{KeyCode|Alt}} + {{KeyCode|Abajo}}}} se puede navegar por la historia de comandos ingresados. | Aquí puede introducir expresiones de Python y ver de inmediato su efecto. Con las teclas {{KeyCode|Alt}} + {{KeyCode|Arriba}} / {{KeyCode|Alt}} + {{KeyCode|Abajo}}}} se puede navegar por la historia de comandos ingresados. | ||
− | *De Guiones | + | * 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. | 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... | + | * 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 | + | ** su ejecución basta un ''clic'' sobre el tema |
− | **se acceda a editarlo para cambiar su valor. | + | ** se acceda a editarlo para cambiar su valor. |
===== Ejemplo ===== | ===== 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 [http:// | + | 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 [http://luccisun.webfactional.com/sbc/docs/FundamentalsofPythonFromFirstProgramsthroughDataStructures2009_KA_Lambert.pdf guía de Python en inglés]. |
− | geo.A = (1,2) | + | geo.A = (1,2) |
− | # Crear algunos puntos al azar | + | # Crear algunos puntos al azar |
− | import random | + | import random |
− | xcoords = [random.uniform(-2, 5) for i in range(8)] | + | xcoords = [random.uniform(-2, 5) for i in range(8)] |
− | ycoords = [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)] | + | points = [Point(x, y) for x, y in zip(xcoords, ycoords)] |
− | # Enlace de todos a A | + | # Enlace de todos a A |
− | segments = [Segment(p, geo.A) for p in points] | + | segments = [Segment(p, geo.A) for p in points] |
− | # Definir una función para exponer solo el segmento más cortoa | + | # Definir una función para exponer solo el segmento más cortoa |
− | def show_shortest(moved_point): | + | 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 | + | # La llamada cada vez que A es modificada |
− | geo.A.onupdate = show_shortest | + | geo.A.onupdate = show_shortest |
− | # Ahora, ¡a desplazar A en la Vista Gráfica! | + | # Ahora, ¡a desplazar A en la Vista Gráfica! |
=== Nombres en Python y GeoGebra === | === 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. | + | 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. | 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. | 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. | ||
Línea 63: | Línea 63: | ||
*$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}} |
==== Resultados Dinámicos ==== | ==== Resultados Dinámicos ==== | ||
Línea 76: | Línea 76: | ||
=== Atributos comunes a todos los elementos === | === 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. | Los siguientes atributos no se aplican solo a puntos y vectores sino a todos los de objetos de GeoGebra. | ||
− | *visible (booleana); | + | * 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); | + | * 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 (etiqueta, una cadena); |
− | *label_color; | + | * label_color; |
− | *label_visible (booleana); | + | * label_visible (booleana); |
− | *label_mode puede ser uno de las opciones, ''nombre'', ''nombre y valor'', ''valor'', ''subtítulo'' | + | * label_mode puede ser uno de las opciones, ''nombre'', ''nombre y valor'', ''valor'', ''subtítulo'' |
− | *caption (sub-título, una cadena); | + | * caption (sub-título, una cadena); |
− | *trace (booleana que si es verdadera, establecer que se deje ''rastro'' o huella). | + | * 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í" | 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 = Point(3, 1) ($P es la referencia al punto P) |
− | *$P.color = Color.RED | + | * $P.color = Color.RED |
− | *$P.label_color = Color.BLACK | + | * $P.label_color = Color.BLACK |
− | *$P.label_mode = "caption" | + | * $P.label_mode = "caption" |
− | *$P.caption = "Dar clic aquí" | + | * $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: | 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) | + | * $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 === | === Trayectos === | ||
==== Las líneas y los segmentos ==== | ==== Las líneas y los segmentos ==== | ||
Este ''script'' traza una recta que pasa por los puntos A y B | 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 $) | + | * $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 | 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 $) | + | * $l_1 = Line($A, $u) (A y u se indican con el prefijo $) |
Pueden crearse también, semirrectas y segmentos | Pueden crearse también, semirrectas y segmentos | ||
− | *$r = Ray((1, 1), (2, 0)) (r se indica con el prefijo $) | + | * $r = Ray((1, 1), (2, 0)) (r se indica con el prefijo $) |
− | *$s = Segment((-3, 0), (2, 1)) (s 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. | 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 ==== | ==== Ejes ==== | ||
Línea 112: | Línea 112: | ||
==== Círculos Elipses Hipérbolas Parábolas ==== | ==== Círculos Elipses Hipérbolas Parábolas ==== | ||
− | *Este guion o ''script'' crea cuatro círculos de... | + | * Este guion o ''script'' crea cuatro círculos de... |
− | **- C1 con centro en (1, 1) que pasa por el punto (3, 2) | + | ** - 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) | + | ** - C2 que pasa por los puntos (0, 0), (4, 0), (4, 3) |
− | **- C3 con centro en A y radio BC | + | ** - C3 con centro en A y radio BC |
− | **- C4 con centro en (-2, 0) y radio 3. | + | ** - C4 con centro en (-2, 0) y radio 3. |
− | ***$C_1 = Circle((1, 1), (3, 2)) (C_1 se indica con el prefijo $) | + | *** $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_2 = Circle((0, 0), (4, 0), (4, 3)) (C_2 se indica con el prefijo $) |
− | ***$C_3 = Circle($A, Segment($B, $C)) | + | *** $C_3 = Circle($A, Segment($B, $C)) |
− | ***$C_4 = Circle((-2, 0), 3) (C_4 se indica con el prefijo $) | + | *** $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 | + | * 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 | + | ** 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) ; | + | ** 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; | + | ** 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) ; | + | ** H2 de focos (1, 1), (3, 1) que pasa por el punto (2, 2) ; |
− | **P de foco (0, 0) y recta directriz (AB). | + | ** 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_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 $) | + | *** $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_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 $) | + | *** $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 $) | + | *** $P = Parabola((0, 0), Line($A, $B)) (P se indica con el prefijo $) |
==== Atributos de Recorridos ==== | ==== Atributos de Recorridos ==== | ||
Todos los recorridos (rectos y curvos) tiene como atributos... | Todos los recorridos (rectos y curvos) tiene como atributos... | ||
− | *Grosor (valor numérico); | + | * 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). | + | * 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 ==== | ==== Polígonos y Poligonales ==== | ||
Para crear un polígono con vértices A, B y C se puede utilizar: | Para crear un polígono con vértices A, B y C se puede utilizar: | ||
Línea 144: | Línea 144: | ||
Esta última escritura es más útil si se desea crear un polígono a partir de una lista arbitraria de puntos. | 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: | Los polígonos tienen atributos: | ||
− | *boundary - perimetral: el perímetro del polígono como una poligonal; | + | * 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)); | + | * 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; | + | * area o value - el área o valor: el área del polígono; |
− | *edges - lados: una lista Python de todos los lados 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); | + | * 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. | + | * 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]. | 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. | 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. | ||
Línea 157: | Línea 157: | ||
my_list = List(1, 2, 3) crea una lista GeoGebra ; | my_list = List(1, 2, 3) crea una lista GeoGebra ; | ||
python_list = [1, 2, 3] crea una lista Python. | 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: | + | La notación indicial se puede utilizar para obtener o eliminar un elemento en una posición dada:<hr> |
print my_list[1] muestra el segundo elemento (el primero tiene índice 0); | print my_list[1] muestra el segundo elemento (el primero tiene índice 0); | ||
− | del my_list [0], elimina el primer elemento. | + | del my_list [0], elimina el primer elemento.<hr> |
Puede añadirse un elemento nuevo al final de una lista mediante el método ''append'': | Puede añadirse un elemento nuevo al final de una lista mediante el método ''append'': | ||
− | my_list.append(42) | + | my_list.append(42) |
Es posible establecer un bucle o lazo sobre los elementos de una lista: | Es posible establecer un bucle o lazo sobre los elementos de una lista: | ||
for item in my_list | for item in my_list | ||
print item + 10 | print item + 10 | ||
Se puede convertir una lista GeoGebra en una de Python : | Se puede convertir una lista GeoGebra en una de Python : | ||
− | python_list = list(my_list) | + | python_list = list(my_list) |
Se pueden eliminar todos los elementos de una lista con el método de GeoGebra ''clear'' : | Se pueden eliminar todos los elementos de una lista con el método de GeoGebra ''clear'' : | ||
my_list.clear() | my_list.clear() | ||
Línea 177: | Línea 177: | ||
*latex (valor booleano): ''true'' si el texto debe aparecer en LaTeX y ''false'' en caso contrario. | *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: | 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: | 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. | Pero a diferencia del anterior, en este caso, no se actualizan las coordenadas sino que se crea un Punto. | ||
====Origen Dinámico==== | ====Origen Dinámico==== | ||
Línea 188: | Línea 188: | ||
==Las Funciones en Ecuaciones e Inecuaciones== | ==Las Funciones en Ecuaciones e Inecuaciones== | ||
===Funciones=== | ===Funciones=== | ||
− | Las funciones se pueden definir fácilmente en Python: | + | Las funciones se pueden definir fácilmente en Python:<br> |
− | def f(x): return sin(x)/x | + | <hr> |
− | $f = Function(f) | + | def f(x): return sin(x)/x<br> |
− | También puede tratarse de funciones de dos variables: | + | $f = Function(f)<br> |
− | def f(x, y): return x**2+y**2 - 5 | + | <hr> |
− | Se caracterizan por la curva implícito como atributo: | + | También puede tratarse de funciones de dos variables:<br> |
− | $f = Function(f) | + | <hr> |
− | $c = f.implicitcurve | + | def f(x, y): return x**2+y**2 - 5<br> |
− | Las funciones pueden establecerse a partir de inecuaciones de desigualdades: | + | <hr> |
− | def f(x, y): return x**2 > x + y | + | Se caracterizan por la curva implícito como atributo:<br> |
− | geo.f = Function(f) | + | <hr> |
+ | $f = Function(f)<br> | ||
+ | $c = f.implicitcurve<br> | ||
+ | <hr> | ||
+ | Las funciones pueden establecerse a partir de inecuaciones de desigualdades:<br> | ||
+ | def f(x, y): return x**2 > x + y<br> | ||
+ | <hr> | ||
+ | geo.f = Function(f)<br> | ||
==Tortugas== | ==Tortugas== | ||
Línea 212: | Línea 219: | ||
** t.turn_left(72) | ** 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''' | + | 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: | Las tortugas, en tanto objetos funcionales, tienen los siguientes atributos: | ||
Línea 245: | Línea 252: | ||
Cuando sea apropiado, también se pueden utilizar la siguiente sintaxis: | Cuando sea apropiado, también se pueden utilizar la siguiente sintaxis: | ||
− | *selection.points; | + | * selection.points; |
− | *selection.vectors; | + | * selection.vectors; |
− | *selection.lines; | + | * selection.lines; |
− | *selection.segments. | + | * selection.segments. |
== Gestión de Eventos == | == Gestión de Eventos == | ||
Línea 263: | Línea 270: | ||
También se puede agregar directamente controladores de eventos en la definición de los siguientes atributos de los objetos: | También se puede agregar directamente controladores de eventos en la definición de los siguientes atributos de los objetos: | ||
* onupdate ; | * onupdate ; | ||
− | *onadd ; | + | * onadd ; |
− | *onremove ; | + | * onremove ; |
− | *onclick ; | + | * onclick ; |
− | *onrename. | + | * onrename. |
Los atributos pueden ser definidos por una función de un argumento (que es el objetivo del evento): | Los atributos pueden ser definidos por una función de un argumento (que es el objetivo del evento): | ||
def paint_blue(pt): | def paint_blue(pt): | ||
Línea 274: | Línea 281: | ||
=== Métodos Especiales === | === 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 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>) 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; | + | * - 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; | + | * alert(<texte>) muestra una ventana de mensaje que contiene el texto; |
− | *debug(<texte>) expone / depura el texto escrito, en la Consola de Java; | + | * 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(<texte>) evalúa un comando de GeoGebra y devuelve una lista de objetos. |
− | *- command("3x+2y=12") crea la recta: 2x + 3y = 12 | + | * - 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 | + | * - command('Circle', (x, y), r) crea la circunferencia con centro en el punto (3, 2), de radio 4 |
− | **- x, y = 3, 2 | + | ** - x, y = 3, 2 |
− | **- r = 4 | + | ** - r = 4 |
− | **c: (x - 3)² + (y - 2)² = 16 | + | ** c: (x - 3)² + (y - 2)² = 16 |
+ | ==Módulo Matemático== | ||
+ | |||
+ | Desde el correspondiente módulo de Python (y/o desde sus [https://data-flair.training/blogs/python-libraries/ librerías]), en este caso el de matemática , como ''math.fabs()'', se pueden realizar numerosas operaciones. | ||
+ | <small>como la de math.sqrt(2), o las de math import fabs, math.fabs(-2),math.fabs(5)</small>. | ||
+ | |||
=== Acceso a la API de GeoGebra desde Python === | === 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) | 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.evalCommand ("x ^ 2 + y ^ 2 = 4") |
− | *ggbApplet.startAnimation () | + | * ggbApplet.startAnimation () |
− | |||
[[Categoría:Referencia]] | [[Categoría:Referencia]] |
Revisión del 17:26 12 dic 2019
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 guía que - en inglés- desarrolla ampliamente 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 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)
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
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.
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).
* 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 ()