(Spezielle) Matrixes rechnen

Hallo,

ist es möglich, einen Vektor3x1 mit einer Matrix4x4 zu addieren und zu multiplizieren - oder begehe ich da mathematisch einen Fehler? Und wie heißt der richtige mathematische Begriff, wenn um einen Vektor3x1 um eine Komponente zu erweitern?

Zum Bleistift:

glm::mat3 nm = glm::inverseTranspose(glm::mat3(model));```

Addieren nicht. Multiplizieren ja. Einen Begriff dafür, einen 3D-Vektor zu einem 4D-Vektor zu “erweitern” wüßte ich spontan nicht. Aber WIE diese Erweiterung stattfindet, ist in diesem Fall vielleicht wichtig: Wenn man eine 4x4-Matrix mit einem 3D-Vektor multiplizieren will, kann man die 4. Komponente des zu erstellenden Vektors (auf einen beliebigen Wert, aber üblicherweise) entweder auf 1.0 oder auf 0.0 setzen. Wenn man ihn auf 1.0 setzt, wird der 3D-Vektor als Punkt interpretiert. D.h. er wird durch den Translationsanteil der Matrix auch verschoben. Wenn man ihn auf 0.0 setzt, wird der 3D-Vektor nur als “Richtungsvektor” angesehen. D.h. er wird rotiert, geschert und skaliert, aber der Translationsanteil der Matrix spielt keine Rolle.

Vielen Dank, das war genau die Erklärung, die ich suchte. Eine Frage noch, wird der Vektor3x1 VOR oder NACH der Multiplikation um die 4. Komponente (bei uns 1 respektive 0 interpretiert) erweitert?

Hm. Er muss VOR der Multiplikation erweitert werden weil man eine 4x4-Matrix nicht mit einem 3D-Vektor multiplizieren kann.

Okay, ich hab mal ein Beispiel, kannst du bitte sagen, ob es richtig ist, oder wo ich jetzt den Denkfehler hab?:

PunktTranslationUmTranslationsvektor(Vektor3x1 punkt, Vektor3x1 translation):
punkt = (1.00,2.00,3.00)T
translation = (3.00,2.00,1.00)T
(1.00,2.00,3.00)T + ((3.00,0.00,0.00,0.00), (0.00,2.00,0.00,0.00), (0.00,0.00,1.00,0.00), (0.00,0.00,0.00,0.00))T = (4.00,4.00,4.00)T

Der Punkt (1,2,3) soll um den Vektor (3,2,1) verschoben werden. Das kann ich doch gar nicht durch Addition mit einer 4x4-Mat erreichen?

Um den Punkt (x,y,z) um (dx,dy,dz) zu verschieben, muss man ihn von links mit der unten angedeuteten Matrix multiplizieren.


1 0 0 dx       x
0 1 0 dy       y
0 0 1 dz       z
0 0 0  1       1 

(Nichts “addieren”…)

Hab vielen Dank…

*** Edit ***

Hier steht’s auch noch-mal:

Multiplying matrices and vectors - Math Insight

„So, if A is an m×n matrix (i.e., with n columns), then the product Ax is defined for n×1 column vectors x. If we let Ax=b, then b is an m×1 column vector.“

Noch ne Frage, wie nennt man bei einem 4x1-Vektor die Variable der 4. Komponente üblicherweise, wenn nicht x_1,…,x_4? Alphabet doch nur bis z. Und wäre diese Schreibweise nu richtig:

punktErw = (1.00,2.00,3.00,1.00)T
translation = (3.00,2.00,1.00)T
((1.00,0.00,0.00,3.00), (0.00,1.00,0.00,2.00), (0.00,0.00,1.00,1.00), (0.00,0.00,0.00,1.00))T * (1.00,2.00,3.00,1.00)T = (4.00,4.00,4.00,1.00)T

wolfram kann es computen, aber . * oder x?

w ist üblich

x,y,z,w (omega)

Homogenisieren bzw. Homogene Koordinaten

http://www.math.kit.edu/iag2/~globke/media/koordinaten.pdf

Danke Leute, Tadschikistan tatsächlich etwas eingerostet. Aber mit Hilfe klappe ich es jetzt. [emoji5]
Thema vorerst done/closed.

*** Edit ***

Noch ne Frage. Drehung um die x-Achse. Mal ein paar Werte:

punktErw = (0.00,5.00,0.00,1.00)T
alphaDeg = 45
radians = 0.7853981633974483
((1.00,0.00,0.00,0.00), (0.00,0.71,-0.71,0.00), (0.00,0.71,0.71,0.00), (0.00,0.00,0.00,1.00))T * (0.00,5.00,0.00,1.00)T = (0.00,3.54,3.54,1.00)T

punktErw = (0.00,5.00,0.00,1.00)T
alphaDeg = 90
radians = 1.5707963267948966
((1.00,0.00,0.00,0.00), (0.00,0.00,-1.00,0.00), (0.00,1.00,0.00,0.00), (0.00,0.00,0.00,1.00))T * (0.00,5.00,0.00,1.00)T = (0.00,0.00,5.00,1.00)T

punktErw = (0.00,5.00,0.00,1.00)T
alphaDeg = 180
radians = 3.141592653589793
((1.00,0.00,0.00,0.00), (0.00,-1.00,-0.00,0.00), (0.00,0.00,-1.00,0.00), (0.00,0.00,0.00,1.00))T * (0.00,5.00,0.00,1.00)T = (0.00,-5.00,0.00,1.00)T

a) Sind die Werte richtig?
b) Wie hat man sich das vorzustellen?
ba) z-Achse zeigt nach vorne zum User oder nach hinten?
bb) Es wird nicht linksrum / gg. den Uhrzeigersinn gedreht?
bc) Ich hätte erwartet, der Punkt wandert erst nach unten (und nach vorne) und dann wieder nach oben (und nach hinten), mehr sieht man bei einer Drehung um die x-Achse nicht. Ist das richtig?

Hallo Marco,

(es eilt), könntest Du mir bitte sagen, ob die im Anhang als Bild befindliche (Beispiel)-Rechnung richtig ist? Insbesondere bei Reihe 3. und Spalte 3. bin ich mir unsicher. Vielen Dank schonmal.

Lass’ doch den Unit-Test laufen :o)
Mal im Ernst, ich werde jetzt sicher nicht händisch-symbolisch irgendwelche Matrizen berechnen…

Naja, keine Hilfe bekunden, ist auch eine Hilfe. Wie ich inzwischen weiß, ist das hinter dem =-Zeichen falsch. Jemand anderes vielleicht helfen?

Also erstmal ist sin(0°), sin(180°), cos(90°) und cos(270°), damit kannst du dir schonmal ein großteil der Zahlen da oben streichen. Außerdem ist alles dort oben um 90° davon versetzt “1” bzw. -1, was die gesammte Rechnung nurnoch zu einem Vorzeichenwechsel machen sollte.

Ich hab das mal in meinen Java Code der nach OGL-Orientierung berechnet eingegeben


[-1,00][0,00][0,00][0,00]
[0,00][1,00][0,00][0,00]
[0,00][0,00][-1,00][0,00]
[0,00][0,00][0,00][1,00]
*
[1,00][0,00][0,00][0,00]
[0,00][0,00][1,00][0,00]
[0,00][-1,00][0,00][0,00]
[0,00][0,00][0,00][1,00]
*
[1,00][0,00][0,00][0,00]
[0,00][1,00][0,00][0,00]
[0,00][0,00][1,00][0,00]
[0,00][0,00][0,00][1,00]
=
[-1,00][0,00][0,00][0,00]
[0,00][0,00][1,00][0,00]
[0,00][1,00][0,00][0,00]
[0,00][0,00][0,00][1,00]

Wie sind deine Matrizen orientiert? Nach OGL oder Richtig?

Guten Morgen,

Ich hab es mit Java rechnen lassen, sollte eigtl. sicher sein. An der Zwischenrechnung sieht man die Orientierung.

Das stimmt, aber wenn 17° oder 18° wird es brenzlig.

Kann jetzt nochmal jemand richtig oder falsch sagen?

Edit: In welchem Format benötigt ihr die Ausgabe?