Eine 3x4 Matrix kann zum Transformieren von Vektoren JsgVect3 verwendet werden. Im Gegensatz zu einer JsgMat3 kann eine JsgMat3 den Vektor auch verschieben (Translation).
JsgMat3.Zero() | Erzeugt eine Null-Matrix |
JsgMat3.Unit() | Erzeugt eine Einheits-Matrix |
JsgMat3.FromVect() | Erzeugt eine Matrix aus drei JsgVect3 Vektoren |
JsgMat3.Moving() | Erzeugt eine Translations-JsgMat3 |
JsgMat3.Scaling() | Erzeugt eine Skalierungs-JsgMat3 |
JsgMat3.RotatingX() JsgMat3.RotatingY() JsgMat3.RotatingZ() | Erzeugt eine Rotations-JsgMat3 um eine der Basis-Achsen |
JsgMat3.Copy() | Kopiert eine JsgMat3 |
JsgMat3.CopyTo(), Set() | Kopiert eine JsgMat3 in eine andere |
JsgMat3.Mult() | Matrizen-Multiplikation |
JsgMat3.MultTo() | Matrizen-Multiplikation |
JsgMat3.Trans() | Multipliziert einen JsgVect3 mit einer JsgMat3 und gibt einen resultierenden neuen Vektor zurück |
JsgMat3.TransTo() | Multipliziert einen JsgVect3 mit einer JsgMat3 |
JsgMat3.TransXYZTo() | Multipliziert einen Vektor (x,y,z) mit einer JsgMat3 |
JsgMat3.TransList() | Multipliziert eine JsgVect3List Vektor-Liste mit einer JsgMat3 Matrix |
JsgMat3.TransGrid() | Multipliziert ein JsgVect3Grid Vektor-Gitter mit einer JsgMat3 Matrix |
global JsgMat3.Zero( )
global JsgMat3.Unit( )
Eine JsgMat3 wird als Array[3][4] aus Zahlen dargestellt. Der erste Array-Index gibt die Zeile der zweite Index die Spalte an: a12 = mat[1][2]. Eine JsgMat3 kombiniert Skalierungen, Rotationen und Translationen. Mit JsgMat3.Trans() kann ein JsgVect3 mit einer JsgMat3 transformiert werden.
Eine Einheitsmatrix kann mit der Funktion JsgMat3.Unit() erstellt werden. Sie hat folgende Form: [[1,0,0,0][0,1,0,0][0,0,1,0]].
global JsgMat3.FromVect( v1, v2, v3 )
Erzeugt eine Matrix aus drei Vektoren. Der erste Vektor wird zur ersten Zeile der neuen Matrix usw. Die vierte Spalte der Matrix wird mit Nullen aufgefüllt.
Return = [ [ v1[0]..v1[2], 0 ], [ v2[0]..v2[2], 0 ], [ v3[0]..v3[2], 0 ] ]
Das folgende Beispiel zeigt, wie man aus einer 3x3 Matrix eine JsgMat3 erzeugt:
var mat3x3 = [ [ a00, a01, a02 ], [ a10, a11, a12 ], [ a20, a21, a22 ] ]; var mat3D = JsgMat3.FromVect( mat3x3[0], mat3x3[1], mat3x3[2] );
global JsgMat3.Copy( Mat )
global JsgMat3.CopyTo( src, dest )
global JsgMat3.Set( dest, src )
global JsgMat3.Moving( x, y, z, Mat )
Multiplikation eines Punktes mit der hier erzeugten Matrix verschiebt den Punkt um den Vektor (x,y,z) (siehe JsgMat3.Trans()).
Wenn Mat nicht definiert ist, wird eine Translations-Matrix zurückgegeben, welche um den Vektor Vect verschiebt. Wenn Mat definiert ist, wird die Translations-Matrix mit Mat multipliziert und die resultierende Matrix wird zurückgegeben. Auf diese Weise können mehrere Transformationen verschachtelt werden:
var trans = JsgMat3.Moving( x, y, z, JsgMat3.RotatingZ( a, JsgMat3.Scaling( sx, sy, sz ) ) );
In obigem Beispiel wird zuerst eine Skalierungs-Matrix erzeugt, dann diese mit einer Rotations-Matrix um die Z-Achse multipliziert und diese schliesslich mit einer Translations-Matrix Multipliziert. Die resultierende Matrix trans ist somit die Transformationsfolge Move * RotZ * Scale.
Beachte: Bei zusammengestzten Matrizen wird immer in der Reihenfolge von rechts nach links transformiert.
global JsgMat3.Scaling( Sx, Sy, Sz, Mat )
Multiplikation eines Vektors mit der hier erzeugten Matrix skaliert die Komponenten des Vektors (siehe JsgMat3.Trans()).
Wenn Mat nicht definiert ist, wird eine Skalierungs-Matrix aus den Werten Sx bis Sz zurückgegeben. Wenn Mat definiert ist, wird die Skalierungs-Matrix mit Mat multipliziert und die resultierende Matrix wird zurückgegeben. Auf diese Weise können mehrere Transformationen verschachtelt werden:
var trans = JsgMat3.Moving( [x,y,z], JsgMat3.Scaling( sx, sy, sz, JsgMat3.RotatingZ( a ) ) );
In obigem Beispiel wird zuerst eine Rotations-Matrix erzeugt, dann diese mit einer Skalierungs-Matrix multipliziert und diese schliesslich mit einer Translations-Matrix Multipliziert. Die resultierende Matrix trans ist somit die Transformationsfolge Move * Scale * RotZ.
Beachte: Bei zusammengestzten Matrizen wird immer in der Reihenfolge von rechts nach links transformiert.
global JsgMat3.RotatingX( Angle, Mat )
global JsgMat3.RotatingY( Angle, Mat )
global JsgMat3.RotatingZ( Angle, Mat )
Multiplikation eines Vektors mit der hier erzeugten Matrix rotiert den Vektor um den Winkel Angle um die entsprechende Achse (siehe JsgMat3.Trans()).
Wenn Mat nicht definiert ist, wird eine Rotations-Matrix zurückgegeben. Wenn Mat definiert ist, wird die Rotations-Matrix mit Mat multipliziert und die resultierende Matrix wird zurückgegeben. Auf diese Weise können mehrere Transformationen verschachtelt werden:
var trans = JsgMat3.Moving( [x,y,z], JsgMat3.RotatingZ( a, JsgMat3.Scaling( sx, sy, sz ) ) );
In obigem Beispiel wird zuerst eine Skalierungs-Matrix erzeugt, dann diese mit einer Rotations-Matrix um die Z-Achse multipliziert und diese schliesslich mit einer Translations-Matrix Multipliziert. Die resultierende Matrix trans ist somit die Transformationsfolge Move * RotZ * Scale.
Beachte: Bei zusammengestzten Matrizen wird immer in der Reihenfolge von rechts nach links transformiert.
JsGraph3D.Mult( MatA, MatB )
Multipliziert zwei JsgMat3 Matrizen miteinander. Mathematisch werden die beiden Matrizen um eine Zeile [0,0,0,1] zu einer quadratischen Matrix ergänzt, bevor diese multipliziert werden können. Bei der resultierenden 4x4 Matrix ist die letzte Zeile immer auch [0,0,0,1] und wird daher wieder entfernt. Dadurch entsteht die zurückgegebene JsgMat3 3x4 Matrix.
global JsgMat3.Mult( MatA, MatB, to )
Analog der Funktion JsgMat3.Mult(), speichert das Resultat jedoch in der übergebenen Matrix to.
global JsgMat3.Trans( Mat, Vect )
Multipliziert den Vektor Vect mit der Matrix vom Typ JsgMat3 (3x4-Matrix) und gibt das Resultat als neuen Vektor vom Typ JsgVect3 zurück.
Die Transformation eines Vektors mit einer JsgMat3 (3x4-Matrix) ermöglicht Skalierung, Rotation, Scherung und Translation des Vektors. Mit einer 3x3-Matrix JsgMat3 hingegen sind keine Translationen möglich, siehe JsgMat3.Trans().
global JsgMat3.TransTo( Mat, Vect )
Multipliziert den Vektor Vect mit der Matrix vom Typ JsgMat3 (3x4-Matrix). Das Resultat wird in den Vektor Vect kopiert. Der Vektor Vect wird somit geändert.
Die Transformation eines Vektors mit einer JsgMat3 (3x4-Matrix) ermöglicht Skalierung, Rotation, Scherung und Translation des Vektors. Mit einer 3x3-Matrix JsgMat3 hingegen sind keine Translationen möglich, siehe JsgMat3.TransTo().
global JsgMat3.TransXYZTo( Mat, x, y, z, toVect )
Siehe JsgMat3.TransTo()
global JsgMat3.TransList( Mat, VectList )
Multipliziert die Matrix Mat mit allen Vektoren der Vektor-Liste VectList und erzeugt eine neue Vektor-Liste mit den resultierenden Vektoren.
global JsgMat3.TransGrid( Mat, VectGrid )
Multipliziert die Matrix Mat mit allen Vektoren des Vektor-Gitters VectGrid und erzeugt ein neues Vektor-Gitter mit den resultierenden Vektoren.