Scripting: incorporació d'Scripts a les construccions de GeoGebra
Una de les aportacions més importants, i alhora més complexa, lligada a l'evolució que sempre va sofrint el GeoGebra amb les noves versions, és el fet de poder incorporar Scripts (petits blocs de seqüències de programació) directament a les construccions de GeoGebra. Amb això podreu accedir a propietats de més baix nivell del programa i d'alguns objectes. Es tracta de seqüències ordenades de comandaments que s'executen en fer clic o actualitzar el valor d'un objecte. Per exemple, un botó, una imatge o una circumferència també poden fer l'efecte d'un botó
Estem parlant de la possibilitat de programar de maneres diferents:
- GGBScript: consisteix en poder executar d'una única vegada diversos comandaments de GeoGebra. Es poden crear botons que en fer-hi clic, executin en un sol pas una sèrie de comandaments que podríem haver escrit a la línia d'entrada de comandaments.
Podem imaginar botons en una finestra del GeoGebra per a fer accions concretes:- un botó per a fer Zoom i apropar-nos, o bé un altre per allunyar-nos
- un botó per ocultar de cop molts objectes auxiliars
- Una altra manera de programar amb el GeoGebra, força més complicada és utilitzant codi JavaScript (llenguatge de programació molt usat a Internet…), que es pot executar de manera local en fer clic o actualitzar un objecte, o bé, fins i tot, actuant de manera global amb repercussions sobre tota la construcció.
El JavaScript pot executar certes accions només en arrencar un applet o bé deixant programats uns comandaments que estan atents a quan l'usuari realitza una determinada acció (utilitzant els anomenats listeners) i associant certes accions. Tot plegat, com us dèiem, una mica més complicat….
En aquestes activitats fareu un tastet molt senzill d'alguna d'aquestes noves funcionalitats:
Primer exemple: Botons per apropar-nos i fer l'estudi local d'una funció
En aquest primer exemple, molt senzill, utilitzarem dos botons per apropar-nos o allunyar-nos i poder estudiar de manera local, la recta tangent a una funció en un punt:
- Deixeu visibles la finestra algebraica i la zona gràfica.
- Entreu la funció f(x)=x cos(x), i apliqueu-li l'estil visual que us sembli adient.
- Tot seguit, amb l'eina Punt nou, dibuixeu un punt sobre la gràfica de la funció f, assegureu-vos que, efectivament, aquest punt A només es desplaça per sobre de la funció. Apliqueu-li estil visual.
- I ara obtindrem la recta tangent amb el comandament Tangent[A,f].
Ja estem en condicions d'explorar localment, en el punt A, la recta tangent a f.
Utilitzarem el comandaments ZoomIn[ ] i ZoomOut[ ], que en la traducció del GeoGebra al català utilitzen la sintaxi: Apropa[ ] i Allunya[]. Tan sols amb unes indicacions:
- Apropa[1] no farà res,
- en canvi, Apropa[2] farà una mica de zoom
- així com Apropa[0.5] i Allunya[2] tenen el mateix efecte, d'allunyament.
- Evidentment podeu fer dependre el factor d'apropament d'un punt lliscant o d'una altra variable.
Tornem a la nostra construcció:
- Heu d'introduir una llegenda per aquest nou botó, com ara "Apropem-nos".
- A la finestra inferior caldrà introduir la Seqüència de comandaments del GeoGebra.
- En aquest cas, només serà la instrucció Apropa[2,A], ja que farem un Zoom
de factor 2 centrat en el punt A.
- Fixeu-vos que mentre escriviu el comandament adequat en aquesta finestra el text apareix remarcat en vermell (com si remarqués una errada ortogràfica), fins que la sintaxi és correcta.
- Podeu crear un segon botó que faci l'acció d'allunyar-se. Segur que no tindreu cap dubte de com cal procedir.
- Podeu aplicar estils als botons, així com fixar-ne la seva posició
Proveu l'efecte a la finestra inferior, moveu el punt A, feu clic als botons,…
Segon exemple: introduïm la seqüència de comandaments a un altre objecte
En aquest altre exemple, també molt senzill, volem mostrar que la introducció de seqüències de comandaments en les construccions de GeoGebra no és exclusiva dels botons.
Qualsevol objecte del GeoGebra, en fer-hi clic amb el botó dret podem accedir a la pestanya Seqüència de comandaments per a objectes del GeoGebra i assignar-li accions concretes.
Fixeu-vos bé amb la imatge següent:
- Com en l'exemple anterior, deixeu només visibles la finestra algebraica i la zona gràfica.
- Creeu la llista llista1 = {"Vermell", "Verd", "Blau"}
- Creeu un punt A, per exemple A = (2, 2)
- i un punt lliscant n amb valors enters de l'1 fins al 3. Serà a aquest objecte al que li farem executar algunes accions. En concret li demanarem al punt lliscant que faci canviar el color del punt A
- Accediu a la pestanya seqüència de comandaments del punt lliscant n, i escolliu l'opció En actualitzar i en ella hi entreu el següent comandament DefineixColor[A, Element[llista1, n]].
- L'acció que volem és treballar amb el comandament DefineixColor[ ], aplicat sobre l'objecte A i mostrant els colors definits en la llista1.
Podeu comprovar l'efecte en el següent gif animat:
Funcionament del comandament Si[ ] en les seqüències de comandaments
En la majoria de llenguatges de programació, el comandament Si té la sintaxi de treball següent:
- Si es compleix una condició, aleshores cal fer l'acció1, i en cas contrari cal fer l'acció2.
Cal parar compte que amb el GeoGebra els arguments d'un comandament no poden ser comandaments sinó valors. Això ho hem de tenir ben present.
Per exemple:
- donada una variable b, li volem assignar el valor 2 quan una altra variable a sigui més gran que 5.
La seqüència de comandaments que cal escriure és:
- DefineixValor[b, Si[a > 5, 2, b]]
- i no pas com podríem pensar, de manera incorrecta:
Si[a > 5, DefineixValor[b, 2]]
Vegem un altre exemple:
- Dibuixeu 4 punts A=(1,1), B=(3,1), C=(5,1) i D=(7,1).
- Suposem que tenim una llista aleat1 amb uns valors concrets aleat1={3,6}
- El primer valor d'aquesta llista aleat1, és a dir el número 3, volem que generi un polígon regular amb vèrtexs en els punts A i B, de tres costats (un triangle)
- Amb el segon element de la llista, el 6, volem que es dibuixi un hexàgon amb vèrtexs en C i D.
- Suposem també que una variable anomenada status (que encara no creem) ens permeti activar o no un procés d'actualització de la llista aleat1.
- Per exemple, volem que quan la variable status sigui igual a 1, aquesta llista pugui canviar els valors dels seus 2 elements de manera aleatòria.
- I que, per tant, es mantinguin els vèrtexs A, B, C i D, però s'obtinguin polígons regulars d'un nombre de costats controlats de manera aleatòria….
Vegeu les dues imatges següents:
Continuem fent aquesta construcció:
- Creeu un punt lliscant anomenat status, amb valors enters, amb dos possibles valors 1 i 2. I ara assigneu-li el control dels canvis que hem indicat:
- per fer-ho cal accedir a les propietats de la variable status , a la pestanya Seqüència de comandaments | En actualitzar, i aquí, caldrà que amb una única seqüència indiquem aquesta acció.
- Volem que quan status sigui 1 es defineixi un valor per a la variable aleat1.
Utilitzarem el comandament DefineixValor[ ]: - DefineixValor[aleat1,Si[status==1,{AleatoriEntre[3,6],AleatoriEntre[3,6]},aleat1]]
Experimenteu amb la construcció:
- Heu entès bé com funciona la construcció?
- Proveu de commutar els valors de la variable status
- Proveu d'acabar la construcció, o bé si ho preferiu: descarregueu-vos la construcció
Exemple: Caselles de selecció excloents
En aquest nou exemple de programació creareu tres caselles de selecció que exclouen altre valors.
Un exemple més avançat del seu funcionament el trobeu en la construcció següent:
- Creeu tres caselles de control a,b i c.
- Feu clic amb el botó dret a la casella a, accediu a les seves propietats,
pestanya Seqüència de comandaments | En actualitzar, i escriviu la següent seqüencia:- DefineixValor[a,true]
- DefineixValor[b,false]
- DefineixValor[c,false]
- Feu clic al botó D'acord i tanqueu aquesta finestreta.
- Accediu a la casella b i de entreu-hi el següent text (on hem intercanviat les lletres a i b):
- DefineixValor[b,true]
- DefineixValor[a,false]
- DefineixValor[c,false]
- I de manera similar ho feu amb la casella c:
- DefineixValor[c,true]
- DefineixValor[b,false]
- DefineixValor[a,false]
Comproveu que funciona com s'espera!
Per a fer aquests materials ens hem basat en http://wiki.geogebra.org/en/Tutorial:Scripting:_Mutually_Exclusive_Checkboxes
A més, podeu visitar l'adreça http://geogebrawiki.wikispaces.com/Radio+Buttons i seguir una detallada descripció al següent vídeo en anglès:
Per últim, si el tema us sembla interessant, us animen a avançar encara més
a l'adreça http://wiki.geogebra.org/en/Scripting_Commands
En ella hi podeu trobar informació en anglès molt completa. No oblideu, però , quina és la traducció dels comandaments al català.
Doncs heu de saber que amb el GeoGebra 5, i per tant, de moment amb les versions Beta 4.9.m.n, es podrà programar amb el llenguatge Python.
Us deixem el següent vídeo: GeoGebra Python Scripting Demo