This is a discussion on Teorema di Pitagora con Actionscript 3.0 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; In questo articolo vedremo come applicare il teorema di Pitagora ad Actionscript 3.0 .
Questo teorema ci permette di calcolare ...
In questo articolo vedremo come applicare il teorema di Pitagora ad Actionscript 3.0 .
Questo teorema ci permette di calcolare la distanza in pixels tra 2 punti tenendo conto sia delle coordinate X , sia delle coordinate Y dei punti.
Il teorema ha diverse applicazioni pratiche quando si sviluppa con Flash, ma le vedremo più avanti nel corso degli articoli che pubblicherò su questo argomento.
Per ora soffermiamoci a capire come calcolare questa distanza.
Vediamo come...
Creo un FLA che salvo con nome ' pitagora.fla ', al cui interno posiziono due MovieClip ( di qualsiasi forma ) e alle quali assegno nomi istanze ' clip_0_mc ' e ' clip_1_mc ' .
Creo la Document Class, un file AS che salvo con nome ' Pitagora.as ', implementata in questo modo:
Code:
package
{
import flash.display.MovieClip;
import flash.text.TextField;
public class Pitagora extends MovieClip
{
public function Pitagora()
{
calcolaDistanza();
}
private function calcolaDistanza():void
{
var distanzaX:Number=clip_0_mc.x-clip_1_mc.x;
var distanzaY:Number=clip_0_mc.y-clip_1_mc.y;
var distanza_reale:Number=Math.sqrt(distanzaX*distanzaX+distanzaY*distanzaY);
distanza_txt.text=distanza_reale.toString();
}
}
}
Risultato:
Analizziamo il codice.
Il teorema di pitagora dice:
In ogni triangolo rettangolo la somma delle superfici dei quadrati costruiti sui cateti è equivalente alla superficie del quadrato costruito sull' ipotenusa.
Nel caso di Flash, quali sono i due cateti e quale l' ipotenusa ?
Il primo cateto è formato dalla distanza tra le coordinate X dei 2 punti ( in questo caso le coordinate X delle due MovieClip )
il secondo cateto è formato dalla distanza tra le coordinate Y dei 2 punti ( in questo caso le coordinate Y delle due MovieClip )
L' ipotenusa è quella che rappresenta la distanza che vogliamo calcolare.
Quindi, avendo i due cateti, basta applicare il teorema di Pitagora in questo modo:
calcolo la lunghezza del primo cateto:
var distanzaX:Number=clip_0_mc.x-clip_1_mc.x;
calcolo la lunghezza del secondo cateto
var distanzaY:Number=clip_0_mc.y-clip_1_mc.y;
NB: In base alla posizione delle due MovieClip potremmo trovarci con i valori dei cateti negativi ma il teorema dice la loro lunghezza al quadrato e quindi qualsiasi numero al quadrato ( sia negtivo che positivo ) da come risultato un numero positivo.
Calcolo la distnza dell' ipotenusa ( quindi la distanza tra i due punti ) con Math.sqry ( sarebbe numero al quadrato di...) di cateto1 per cateto1 + cateto2 per cateto2
var distanza_reale:Number=Math.sqrt(distanzaX*distanza X+distanzaY*distanzaY);
infine visualizzo la distanza in un campo di testo ( questo è ha scopo per questo tutorial, in altri articoli vedremo cosa potremmo farcene di questo valore )
distanza_txt.text=distanza_reale.toString();
In questo altro esempio, ripeto tutti i calcoli all' interno di un intervallo ENTER_FRAME , quindi trascinate le palline per vedere la distanza
e questa è la classe che uso:
Code:
package
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.events.Event;
import flash.events.MouseEvent;
public class Pitagora2 extends MovieClip
{
public function Pitagora2()
{
init();
}
private function init():void
{
stage.frameRate=31;
clip_0_mc.buttonMode=true;
clip_1_mc.buttonMode=true;
this.addEventListener(Event.ENTER_FRAME,calcolaDistanza);
clip_0_mc.addEventListener(MouseEvent.MOUSE_DOWN,muoviClip);
clip_0_mc.addEventListener(MouseEvent.MOUSE_UP,fermaClip);
clip_1_mc.addEventListener(MouseEvent.MOUSE_DOWN,muoviClip);
clip_1_mc.addEventListener(MouseEvent.MOUSE_UP,fermaClip);
}
private function calcolaDistanza(e:Event):void
{
var distanzaX:Number=clip_0_mc.x-clip_1_mc.x;
var distanzaY:Number=clip_0_mc.y-clip_1_mc.y;
var distanza_reale:Number=Math.sqrt(distanzaX*distanzaX+distanzaY*distanzaY);
distanza_txt.text=distanza_reale.toString();
}
private function muoviClip(m:MouseEvent):void
{
m.target.startDrag();
}
private function fermaClip(m:MouseEvent):void
{
m.target.stopDrag();
}
}
}