Die Point Klasse ist in AS3 hinzugekommen und entspricht mathematisch betrachtet Ortsvektoren.
Siehe auch die AS3 Referenz Point
Hier werden die meisten Eigenschaften und Methoden der Point Klasse an Beispielen erklärt. Siehe dazu auch die Referenz von Adobe. In diesem Beispiel geht es um: length, distance, normalize, add, clone, offset, equals
Ich stelle mir die Rechnungen mit Ortsvektoren, oder in Flash die Methoden der Point() Klasse immer vor, wie eine Rechnung, bei der es um Wege geht, die man zurücklegt. So wäre ein Point() ein Weg den ich vom Nullpunkt des Koordinatensystems bis zur x-y Koordinate des Punktes zurücklege. Im vorigen Beispiel haben wir zu Anfang 2 Wege P0 und P1. Dann wird P0 von P1 abgezogen. Ich stelle mir das so vor. Ich gehe zuerst vom Registrierpunkt (obere, linke Ecke der Hauptbühne) nach P1. Man sieht in der Grafik außerdem den Weg vom Registrierpunkt nach P0. Genau diese Wegstrecke gehe ich von P1 aus zurück und lande bei P2. In der Grafik ist es die blaue Linie. Der Pfeil müsste von P1 zurück in Richtung P2 weisen, also genau die entgegengesetzte Richtung des Weges vom Registrierpunkt nach P0.
Würde ich P1 von P0 abziehen P0.subtract(P1), so läge der Punkt außerhalb der Bühne im Quadranten links oben vom Registrierpunkt.
Mit der polar() Methode lassen sich viele Berechnungen, die etwas mit kreisförmiger Anordnung zu tun haben leichter berechnen. Einige ähnliche Beispiele, die auf andere Art berechnet werden, findet ihr inmeinen AS2 Tipps Trigonometrie.
Siehe auch folgendes Beispiel aus der Praxis, mein Tipp: Spirograph
Bei der Beschäftigung mit der Point Klasse, hatte ich noch 2 Ideen für statische Methoden, die man vielleicht hin und wieder mal gebrauchen kann.
Die Methode winkel() wird weiter oben bei Point.subtract() erklärt.
winkel(p0:Point, p1:Point):Number;
gibt den Winkel zurück, den die beiden Punkte innerhalb
des Koordinatensystems zueinander einnehmen
p0 bildet den Nullpunkt
--------------------------------------------------------------
turnedPoint(p0:Point, p1:Point, winkel:Number):Point
p0 ist der Nullpunkt, p1 ein zweiter Punkt
beide Punkte nehmen einen Winkel im Koordinatensystem ein
es wird als dritter Parameter ein Winkel erwartet
Wenn man p1 bei gleichem Radius um p0 um diesen Winkel weiterdreht,
ensteht eine neue Position
Es wird ein neuer Punkt zurückgegeben der an dieser gedrehten Position liegt
--------------------------------------------------------------
Im ersten Teil der Methode turnedPoint() wird genau wie bei winkel() einer neuer Punkt mittels Point.subtract() erstellt. Siehe Grafik oben.
Von diesem Punkt erhalte ich einen Radius zum Nullpunkt mittels p.length und den Winkel der Strecke vom Nullpunkt zum Punkt mittels atan2(y,x)
Mit diesen beiden Werten könnte man einen Punkt an gleicher Position nach der Point.polar(Radius, Winkel) Methode erstellen.
var pp:Point = Point.polar(p.length, Math.atan2(p.y,p.x));
Anstatt den Punkt an gleicher Stelle zu erstellen, kann man ihn auch gleich um den Parameter winkel drehen, indem ich den winkel-Wert hinzuaddiere.
var pp:Point = Point.polar(p.length, Math.atan2(p.y,p.x) + w / RAD);
Beachte, dass die polar() Methode einen Winkel in Bogenmaß erwartet und man daher den Parameter winkel von Grad in Bogenmaß umrechnen muss. Ich benutze dazu die Konstante RAD
public static const RAD:Number = 180 / Math.PI;
Es folgt eine Rechnung mit mehreren Schritten, die später gekürzt wird.
Nun errechne ich mir die vektorielle Differenz von p und pp und addiere diese dem eigentlichen Punkt, der neu errechnet werden soll, hinzu.
var pDif:Point = pp.subtract(p);
var p3:Point = pDif.add(p2);
return p3;
Stattdessen kann ich aber auch gleich das Ergebnis liefern und auf die letzten beiden Variablen verzichten:
return pp.subtract(p).add(p2);
Der Aufruf der statischen Funktionen in der fla
var P1:Point = new Point(0, 0); var P2:Point = new Point(200, 0); var P3:Point = PPPoint.turnedPoint(P1,P2,45); trace(P3); var winkel:Number= PPPoint.winkel(P1, P3); trace(winkel); trace(Point.distance(P1,P3));
Die Klasse PPPoint
package { /* copyright Michael Albers, Dortmund, www.pastorpixel.de Die PPPoint Klasse ist eine Formelsammlung, welche einige Funktionen mit Punkten bereitstellt. Bis jetzt sind es nur 2. -------------------------------------------------------------- winkel(p0:Point, p1:Point):Number; gibt den Winkel zurück, den die beiden Punkte innerhalb des Koordinatensystems zueinander einnehmen p0 bildet den Nullpunkt -------------------------------------------------------------- turnedPoint(p0:Point, p1:Point, winkel:Number):Point p0 ist der Nullpunkt, p1 ein zweiter Punkt beide Punkte nehmen einen Winkel im Koordinatensystem ein es wird als dritter Parameter ein Winkel erwartet Wenn man p1 bei gleichem Radius um den Punkt p0 dreht und zwar um die Gradzahl des Parameters winkel, ensteht eine neue Position. Es wird ein neuer Punkt zurückgegeben der an dieser gedrehten Position liegt -------------------------------------------------------------- */ import flash.geom.Point; public class PPPoint { public static const RAD:Number = 180 / Math.PI; // bogenmass = w/RAD; // grad = w*RAD; //---------------------------------------------------------------------- public static function winkel (p0:Point, p1:Point):Number { var P:Point; P = p1.subtract(p0); var w:Number = Math.atan2(P.y,P.x); return w*RAD; } //---------------------------------------------------------------------- public static function turnedPoint (p0:Point, p1:Point, w:Number):Point { var p:Point = p1.subtract(p0); var pp:Point = Point.polar(p.length, Math.atan2(p.y,p.x) + w/RAD); return pp.subtract(p).add(p1); } //---------------------------------------------------------------------- } }