Aplicació de funcions trigonomètriques per a controlar els moviments i les orientacions dels clips de pel·lícula. | ||
|
||
En aquesta tercera pràctica del mòdul 5 aplicareu les funcions trigonomètriques sin(),cos(), atan2() de l'objecte Math. | ||
L'objecte Math us permetrà accedir tant a funcions matemàtiques com a constants (PI). En realitat podeu considerar aquestes funcions com a mètodes de l'objecte Math. Però també sabeu que aquest objecte pot tenir constants. Aquestes es poden distingir dels mètodes perquè s'escriuen en majúscules i no necessiten paràmetres. Aquestes funcions trigonomètriques solucionen molts problemes que es presenten en la programació de moltes aplicacions sobretot en jocs que en moltes ocasions impliquen deteccions de canvis de direcció, girs... Un exemple seria calcular la distància que pot recorrer una nau en qualsevol de les direccions, en base al seu grau de rotació. Les pràctiques que a continuació desenvolupareu poden servir també per a veure el caire pràctic i funcional que poden tenir les matemàtiques, especialment la trigonometria. |
||
Desenvolupament de la pràctica | ||
Determinació d'un angle amb atan2() | ||
.Flash inclou una funció trigonomètrica que us permetrà determinar l'angle d'un vértex d'un triangle rectangle o qualsevol punt determinat que pugui formar un triangle virtual entre el punt, l'horitzontal i la posició de l'altre objecte. Aquesta funció és una millora de la funció atan() (o "arctangent"). La funció atan2() està més pensanda per treballar amb les coordendes de l'escenari de Flash. Com sabeu en Flash l'eix de coordenades es diferència del cartesià en que els valors de la coordenada Y al pujar es redueixen. A la imatge 1 podeu observar gràficament aquesta afirmació. Aquesta funció ha resolt també el treball feixut per als matemàtics de controlar el sentit del gir en els alngles, ja que en cas de gir en el sentit contrari de les agulles d'un rellotge, els angles es van sumant, però les seves funcions trigonomètriques, poden adquirir valors negatius segons el quadrant on finalitzin. Atan2() elimina aquest problema fent molt més fàcil la tasca de programació ja que no hem de tenir en compte el signe del gir ni el signe corresponent de les coordenades. Aquest fet fa que sigui més fàcil l'ús de la funció atan2() per a determinar l'angle d'un vértex d'un triangle rectangle que la clàssica funció atan() tan utilitzada en programació en altres llenguatges. Amb la funció atan2() veureu doncs, que els problemes es redueixen. Només es necessita especificar dos paràmetres: un per al valor de Y i un altre per al valor de X. |
||
|
||
imatge
núm 1
|
||
|
||
|
» Per tal de veure un exemple d'aplicació d'aquesta funció creeu una nova pel·lícula. La idea és crear una simulació d'un clip que s'orienta en la direcció i sentit d'un altre clip. Observeu la següent pel·lícula per a veure un exemple.Proveu a moure el peix o el mosquit i veureu el canvis d'orientació aconseguits amb aquesta funció.
|
|
» Creeu dos clips de pel·lícula i inseriu a cada clip un botó amb la finalitat que es puguin arrossegar per l'escenari. » Anomeneu com a nom d'instància peix i mosquit respectivament els dos clips creats. » Doteu els dos clips de les accions necessàries per a que es puguin arrossegar per l'escenari. Programareu un clip d'aquests per a que s'orienti dinàmicament cap al segon clip. Com ja s'ha vist en altres pràctiques és una bona costum organitzar el codi en un clip apart, fora de l'escenari que controli les accions dels altres. Seguiu utilitzant aquesta tècnica d'organització de codi. » Creeu un altre clip fora de l'escenari i inseriu aquest codi: |
||
|
||
Amb aquest exemple cada vegada que entri un frame, s'executaran els dos blocs de codi. En el primer bloc de codi es calcula la distància entre les coordenades dels dos clips de pel·lícula. A tal efecte es creen les variables locals disty, distx que us serviran per emmagatzemar el valor de la distància entre els dos clips i depenent de la posició dels clips aquest valor pot ser positiu o negatiu, però com ja s'ha dir no us heu de preocupar ja que la funció atan2() us allibera de fer les conversions a valors absoluts de les distàncies. En el segon bloc es posa com a contingut de la variable gir_radians el valor retornat en radians de l'angle que hi ha entre aquests dos clips utilitzant la distància entre ells. Com la propietat _rotation treballa amb graus s'ha de convertir l'angle que ens retorna la funció matemàtica en radians a graus. Per aquesta raó la penúltima línia de codi s'encarrega d'aquesta conversió. Finalment s'aplican la rotació necessària al clip de pel·lícula utilitzant aquest valor en graus. Proveu d'arrossegar la vostra pel·lícula per a comprovar el correte funcionament similr a la pel·lícula de demostració. Segur que us ha agradat l'efecte aconseguit en la pel·lícula que acabeu de crear i us animeu a complicar una mica més les coses afegint nous clips que es puguin orientar uns envers els altres al vostre gust. Com exemple hem afegit un tauró que vigila al peix que es vol manjar mentre que el peix vigila l'nsecte formant una xarxa tròfica. |
||
Funcions trigonomètiques: sin(), cos(). | ||
Amb la següent pel·lícula, s'utilitzen aquests funcions per a dirigir (no només orientar) el clip de pel·lícula i que es desplaci en direcció al clip de pel·lícula (mosquit) escollit, però si arrossegeu el clip de pel·lícula objecte d'aquesta direcció cap el lloc de seguretat (cova), el peix s'orientarà buscant un altre objectiu.Si no ho aconseguiu el peix se'l menjarà. | ||
Com exemple es mostran unes línies de codi que fan primer l'orietació de l'objecte utilitzant la funció atan2() ja explica amb anterioritat i a continuació incrementant les coordenades X,Y per a que l'objecte les vagi modiicant anant cap l'objecte (mosquit) amb un desplaçament que ens ve donat per la funció sin() i cos() que ens marquen la posició en que es mourà. L'exemple és una petita aplicació aconseguida amb aquestes funcions però com a programdors en podeu desenvolupar moltes altres i com exemples d'idees, podríeu fer aplicacions de xarxes tròfiques de quasevol medi o ecositema on de forma gràfica qualsevol alumne port entendre ràpidament qui es menja a qui, què pasaria si falla una quantitat determianda d'individus augmentat o disminuint el nombre dels altres que formen la xarxa. |
||
El codi que permetet aquest moviment orientat del peix seria aquest: | ||
disty
= eval("_root.menjar"+_root.n)._y-_root.objeto._y; distx = eval("_root.menjar"+_root.n)._x-_root.objeto._x; _root.gir = Math.atan2(disty, distx)*180/(Math.PI); _root.objeto._rotation = _root.gir; _root.objeto._x = _root.objeto._x+Math.cos(Math.PI/180*_root.objeto._rotation)*9; _root.objeto._y = _root.objeto._y+Math.sin(Math.PI/180*_root.objeto._rotation)*9; |
||
En aquest codi podeu observar com mitjançant les funcions sin() i cos() es calcula la distància que ha de recorre el peix tenint en compte l'angle de rotació. | ||
En la propera pràctica continuarem treballant amb aquestes funcions per a crear altres aplicacions. | ||
Podeu desar ja aquest exercici al vostre disc dur. | ||