WaBis

walter.bislins.ch

JSG3D: JsgMat3

JsgMat3 Klasse

JsgMat3 Array[3][4] of Number = [
 [ m11, m12, m13, x ],
 [ m21, m22, m23, y ],
 [ m31, m32, m33, z ]
]

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 Funktionen

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() 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

JsgMat3.Zero(), Unit()

global JsgMat3.Zero( )
global JsgMat3.Unit( )

Return: JsgMat3

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]].

JsgMat3.FromVect()

global JsgMat3.FromVect( v1, v2, v3 )

v1, v2, v3: JsgVect3
Return: JsgMat3

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] );

JsgMat3.Copy()

global JsgMat3.Copy( Mat )

Mat: JsgMat3
Return: JsgMat3

JsgMat3.CopyTo()

global JsgMat3.CopyTo( src, dest )

src: JsgMat3
dest: JsgMat3
Return dest: JsgMat3

JsgMat3.Moving()

global JsgMat3.Moving( x, y, z, Mat )

x, y, z: Number
Mat: JsgMat3; Optional; Default = null
Return: JsgMat3

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.

JsgMat3.Scaling()

global JsgMat3.Scaling( Sx, Sy, Sz, Mat )

Sx, Sy, Sz: Number
Mat: JsgMat3; Optional; Default = null
Return: JsgMat3

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.

JsgMat3.RotatingX(), RotatingY(), RotatingZ()

global JsgMat3.RotatingX( Angle, Mat )
global JsgMat3.RotatingY( Angle, Mat )
global JsgMat3.RotatingZ( Angle, Mat )

Angle: Number
Winkel im Bogenmass
Mat: JsgMat3; Optional; Default = null
Return: JsgMat3

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.

JsgMat3.Mult()

JsGraph3D.Mult( MatA, MatB )

MatA, MatB: JsgMat3
Return: JsgMat3

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.

JsgMat3.MultTo()

global JsgMat3.Mult( MatA, MatB, to )

MatA, MatB: JsgMat3
to: JsgMat3
Ziel-Matrix
Return to: JsgMat3

Analog der Funktion JsgMat3.Mult(), speichert das Resultat jedoch in der übergebenen Matrix to.

JsgMat3.Trans()

global JsgMat3.Trans( Mat, Vect )

Mat: JsgMat3
Transformationsmatrix
Vect: JsgVect3
Zu transformierender Vektor
Return: JsgVect3

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().

JsgMat3.TransTo()

global JsgMat3.TransTo( Mat, Vect )

Mat: JsgMat3
Transformationsmatrix
Vect: JsgVect3
Zu transformierender Vektor
Return: 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().

JsgMat3.TransXYZTo()

global JsgMat3.TransXYZTo( Mat, x, y, z, toVect )

Mat: JsgMat3
Transformationsmatrix
x, y, z: Number
Zu transformierender Vektor
toVect: JsgVect3
Zielvektor
Return toVect: JsgVect3

Siehe JsgMat3.TransTo()

JsgMat3.TransList()

global JsgMat3.TransList( Mat, VectList )

Mat: JsgMat3
VectList: JsgVect3List
Return: JsgVect3List

Multipliziert die Matrix Mat mit allen Vektoren der Vektor-Liste VectList und erzeugt eine neue Vektor-Liste mit den resultierenden Vektoren.

JsgMat3.TransGrid()

global JsgMat3.TransGrid( Mat, VectGrid )

Mat: JsgMat3
VectGrid: JsgVect3Grid
Return: JsgVect3Grid

Multipliziert die Matrix Mat mit allen Vektoren des Vektor-Gitters VectGrid und erzeugt ein neues Vektor-Gitter mit den resultierenden Vektoren.

Weitere Infos zur Seite
Erzeugt Mittwoch, 27. Januar 2016
von wabis
Zum Seitenanfang
Geändert Samstag, 30. September 2017
von wabis