WaBis

walter.bislins.ch

JSG: JsgMat2

JsgMat2 ist eine Matrix Klasse, welche Vektoren transformiert.

JsgMat2 Klasse

JsgMat2 Array[2][3] of Number = [
 [ m11, m12, x ],
 [ m21, m22, y ]
]

Eine 2x3 Matrix kann zum Transformieren von Vektoren JsgVect2 verwendet werden. Im Gegensatz zu einer 2x2 Matrix kann eine JsgMat2 den Vektor auch verschieben (Translation).

Eigentlich würde man für solche Transformationen und Matrix-Multiplikationen eine 3x3 Matrix hernehmen. Da aber die letzte Zeile dieser Matrix immer [ 0, 0, 1 ] ist, kann man diese auch weglassen. Dies muss einfach bei den Matrix-Berechnungen berücksichtigt werden.

JsgMat2 Funktionen

JsgMat2.Zero() Erzeugt eine Null-Matrix
JsgMat2.Unit() Erzeugt eine Einheits-Matrix
JsgMat2.Ok() Testet, ob das Objekt vom Typ Array ist
JsgMat2.RotatingToXY() Erzeugt eine Rotatioms-Matrix, wobei der Rotations-Winkel durch einen Vektor definiert wird
JsgMat2.Transformation() Erzeugt eine Transformations-Matrix, bei der die Skalierung, Rotation und Translation vorgegeben werden können
JsgMat2.Moving() Erzeugt eine Translations-Matrix
JsgMat2.Scaling() Erzeugt eine Skalierungs-Matrix
JsgMat2.Rotating() Erzeugt eine Rotations-Matrix
JsgMat2.Mult() Matrizen-Multiplikation
JsgMat2.Trans() Multipliziert einen JsgVect2 mit einer JsgMat2
JsgMat2.TransPolyXY() Transformiert die Koordinaten eines Polygons mit einer JsgMat2-Matrix

JsgMat2.Zero(), Unit()

global JsgMat2.Zero( )
global JsgMat2.Unit( )

Return: JsgMat2

Eine JsgMat2 Matrix wird als Array[2][3] aus Zahlen dargestellt. Der erste Array-Index gibt die Zeile der zweite Index die Spalte an: a12 = mat[1][2]. Eine JsgMat2 kombiniert Skalierungen, Rotationen und Translationen auf einen JsgVect2 Vektor. Mit JsgMat2.Trans() kann ein JsgVect2 mit einer JsgMat2 transformiert werden.

Eine Einheitsmatrix kann mit der Funktion JsgMat2.Unit() erstellt werden. Sie hat folgende Form: [[1,0,0][0,1,0]].

JsgMat2.Ok()

global JsgMat2.Ok( Any )

Any: -
Irgend ein Objekt oder undefiniert
Return: Boolean
true, wenn Any ein Array ist

Diese Funktion kann dazu verwendet werden, um schnell zu prüfen, ob eine Variable oder ein Funktions-Parameter definiert ist und allenfalls vom Typ JsgMat2 ist. Letzteres wird aus Performacegründen nicht komplett getestet. So wird nur geschaut, ob es sich um einen beliebigen Array handelt.

Die Funktion Ok ist wiefolgt implementiert:

function JsgMat2.Ok( Any ) {
  return xArray(Any);
}

JsgMat2.RotatingToXY()

global JsgMat2.RotatingToXY( x, y )

x, y: Number
Komponenten eines 2D Vektors, welche den Rotationswinkel bestimmen
Return: JsgMat2

Gibt eine Rotations-Matrix zurück. Der Rotationswinkel ist gegeben durch den Winkel zwischen der X-Achse und dem Vektor [ x, y ].

JsgMat2.Transformation()

global JsgMat2.Transformation( ScaleX, ScaleY, Rot, MoveX, MoveY )

ScaleX, ScaleY: Number
Skalierungsfaktoren
Rot: Number
Rotationswinkel im Bogenmass
MoveX, MoveY: Number
Verschiebungsvektor
Return: JsgMat2

Erzeugt eine Transformations-Matrix, welche einen 2D-Vektor mit JsgMat2.Trans() in einer Operation skaliert, rotiert und verschiebt.

JsgMat2.Moving()

global JsgMat2.Moving( x, y )

x, y: Number
Return: JsgMat2

Multiplikation eines 2D-Punktes bzw. 2D-Vekors mit der hier erzeugten Matrix verschiebt den Punkt um (x,y) (siehe JsgMat2.Trans()).

JsgMat2.Scaling()

global JsgMat2.Scaling( Sx, Sy )

Sx, Sy: Number
Return: JsgMat2

Multiplikation eines Vektors mit der hier erzeugten Matrix skaliert die Komponenten des Vektors (siehe JsgMat2.Trans()).

JsgMat2.Rotating()

global JsgMat2.Rotating( Angle )

Angle: Number
Winkel im Bogenmass
Return: JsgMat2

Multiplikation eines Vektors mit der hier erzeugten Matrix rotiert den Vektor um den Winkel Angle in der XY-Ebene (siehe JsgMat2.Trans()). Positive Winkel rotieren gegen den Uhrzeigersinn.

JsgMat2.Mult()

JsGraph.Mult( MatA, MatB )

MatA, MatB: JsgMat2
Return: JsgMat2

Multipliziert zwei JsgMat2 Matrizen miteinander.

Mathematisch werden die beiden Matrizen um eine Zeile [0,0,1] zu einer quadratischen Matrix ergänzt, bevor diese multipliziert werden können. Bei der resultierenden 3x3 Matrix ist die letzte Zeile immer auch [0,0,1] und wird daher wieder entfernt. Dadurch entsteht die zurückgegebene JsgMat2 2x3 Matrix.

JsgMat2.Move()

global JsgMat2.Move( Mat, x, y )

Mat: JsgMat2
x, y: Number
Return: [[JsgMat2

Erzeugt mittels der Funktion JsgMat2.Moving() aus x und y eine Verschiebungs-Matrix und multipliziert die Matrix Mat mit dieser. Die neue resultierende Matrix wird zurückgegeben.

Wenn ein Vektor mit der resultierenden Matrix transformiert wird, entspricht dies der Kombination der Verschiebung plus der Transformation mit Mat in dieser Reihenfolge.

JsgMat2.Rotate()

global JsgMat2.Rotate( Mat, Angle )

Mat: JsgMat2
Angle: Number
Return: [[JsgMat2

Erzeugt mittels der Funktion JsgMat2.Rotating() aus Angle eine Rotations-Matrix und multipliziert die Matrix Mat mit dieser. Die neue resultierende Matrix wird zurückgegeben.

Wenn ein Vektor mit der resultierenden Matrix transformiert wird, entspricht dies der Kombination der Rotation plus der Transformation mit Mat in dieser Reihenfolge.

JsgMat2.Scale()

global JsgMat2.Scale( Mat, Sx, Sy )

Mat: JsgMat2
Sx, Sy: Number
Return: [[JsgMat2

Erzeugt mittels der Funktion JsgMat2.Scaling() aus Sx und Sy eine Skalierungs-Matrix und multipliziert die Matrix Mat mit dieser. Die neue resultierende Matrix wird zurückgegeben.

Wenn ein Vektor mit der resultierenden Matrix transformiert wird, entspricht dies der Kombination der Skalierung plus der Transformation mit Mat in dieser Reihenfolge.

JsgMat2.Trans()

global JsgMat2.Trans( Mat, Vect )

Mat: JsgMat2
Transformationsmatrix
Vect: JsgVect2
Zu transformierender Vektor

Multipliziert den Vektor Vect mit der Matrix Mat vom Typ JsgMat2. Das Resultat wird in den Vektor Vect kopiert. Der Vektor Vect wird somit geändert.

Die Transformation eines 2D-Vektors mit einer JsgMat2 Matrix ermöglicht Skalierung, Rotation, Scherung und Translation des Vektors. Mit einer 2x2-Matrix hingegen wäre keine Translationen möglich.

JsgMat2.TransPolyXY()

global JsgMat2.TransPolyXY( Mat, PolyX, PolyY, Size )

Mat: JsgMat2
Transformations-Matrix
PolyX, PolyY: Array of Number
X und Y Koordinaten eines Polygons
Size: Number; Optional; Default = PolyX.length
Anzahl zu transformierender Koordinaten

Ein JsgPolygon speichert die Punkte als separate X- und Y-Arrays. Da diese Arrays intern grösser sein können als die aktuelle Anzahl der Punkte des Polygons, wird auch die Grösse des Polygons im Poperty Size gespeichert (siehe JsgPolygon).

Diese Funkion kann zum Transformieren eines solchen Polygons verwendet werden. Das Resultat der Transformation wird in den Arrays PolyX und PolyY zurückgegeben. Diese Array werden also verändert.

var poly = CreatePolygon(); // returns a JsgPolygon
JsgMat2.TransPolyXY( mat, poly.X, poly.Y, poly.Size );
g.Polygon( poly ); // zeichne Polygon

Weitere Infos zur Seite
Erzeugt Dienstag, 2. Februar 2016
von wabis
Zum Seitenanfang
Geändert Mittwoch, 17. Februar 2016
von wabis