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.Zero() | Erzeugt eine Null-Matrix |
JsgMat2.Unit() | Erzeugt eine Einheits-Matrix |
JsgMat2.Ok() | Testet, ob das Objekt vom Typ Array ist |
JsgMat2.Copy() | Kopiert eine Matrix |
JsgMat2.CopyTo(), Set() | Kopiert eine Matrix |
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 |
global JsgMat2.Zero( )
global JsgMat2.Unit( )
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]].
global JsgMat2.Ok( Any )
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); }
global JsgMat2.Copy( src )
Erzeugt eine neue Matrix aus den Komponenten der Matrix src.
global JsgMat2.CopyTo( src, dest )
global JsgMat2.Set( dest, src )
Kopiert die Komponenten der Matrix src in die Komponenten der Matrix dest.
global JsgMat2.RotatingToXY( x, y )
Gibt eine Rotations-Matrix zurück. Der Rotationswinkel ist gegeben durch den Winkel zwischen der X-Achse und dem Vektor [ x, y ].
global JsgMat2.Transformation( ScaleX, ScaleY, Rot, MoveX, MoveY )
Erzeugt eine Transformations-Matrix, welche einen 2D-Vektor mit JsgMat2.Trans() in einer Operation skaliert, rotiert und verschiebt.
global JsgMat2.Moving( x, y )
Multiplikation eines 2D-Punktes bzw. 2D-Vekors mit der hier erzeugten Matrix verschiebt den Punkt um (x,y) (siehe JsgMat2.Trans()).
global JsgMat2.Scaling( Sx, Sy )
Multiplikation eines Vektors mit der hier erzeugten Matrix skaliert die Komponenten des Vektors (siehe JsgMat2.Trans()).
global JsgMat2.Rotating( Angle )
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.
JsGraph.Mult( MatA, MatB )
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.
global JsgMat2.Move( Mat, x, y )
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.
global JsgMat2.Rotate( Mat, Angle )
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.
global JsgMat2.Scale( Mat, Sx, Sy )
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.
global JsgMat2.Trans( Mat, Vect )
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.
global JsgMat2.TransPolyXY( Mat, PolyX, PolyY, Size )
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