Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

07.12.2011, 15:05

Ja in dem Fall reicht 2x2. Aber dann versteh ich dein Problem nicht...


Das ist ein mathematisches: wie muss ich die einzelnen Felder dieser Matrix miteinander verwursten, so dass ich aus Eingangs-x- und -y-Werten zwei Ausngangs-x- und -y-Werte erhalte, welche die in der Matrix enthaltene Rotation/Skalierung reflektieren?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

13

07.12.2011, 15:34

M*v, immer noch... Matirx mal Vektor, wobei Vektoren ja quasie Matrizen mit einer Spalte (bzw. Zeile, je dachdem) sind.

14

08.12.2011, 07:38


M*v, immer noch... Matirx mal Vektor, wobei Vektoren ja quasie Matrizen mit einer Spalte (bzw. Zeile, je dachdem) sind.


Wenn ich damit schon in irgend einer Weise weiter gekommen wäre, hätte ich hier nicht gefragt - aber trotzdem Danke für die Hilfe :-(

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

15

08.12.2011, 07:55

Das war doch deine Frage:

Zitat

Wie sieht hier die Berechnung aus, wenn ich einen Koordinatenpunkt x,y mit dieser Matrix transformieren will?


Quellcode

1
2
3
4
5
6
7
8
9
10
mult(M, v){
        out = {M[0]*v[0]+M[1]*v[0], M[2]*v[1]+M[3]*v[1]}; // column major
        return out;
}

M = {1, 0,
        0, 1};
v = {2, -4}; // Beispiel

newV = mult(M*v);

16

08.12.2011, 09:08

Zitat

Das ist ein mathematisches: wie muss ich die einzelnen Felder dieser Matrix miteinander verwursten, so dass ich aus Eingangs-x- und -y-Werten zwei Ausngangs-x- und -y-Werte erhalte, welche die in der Matrix enthaltene Rotation/Skalierung reflektieren?


Ich versuche das mal zu entwirren:

Du hast eine Matrix A, welche eine Rotation und eine Skalierung "enthält".
Du suchst nun die die Werte für a) die Skalierung und b) die Rotation.

Dein Problem ist nun aber, dass eine "kombinierte" Matrix aus der Multiplikation mehrerer Matrizen errechnet wird. Nur ist die Matrizenmultiplikation nicht reversibel. Einer der Gründe, warum man auf die Reihenfolge der Operationen achten muss.

Grüße ...

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

17

08.12.2011, 12:21

Ich glaub du hast einfach die Matritzenmultiplikation noch nicht so ganz verstanden.
Schau dir mal das an: http://de.wikipedia.org/wiki/Falksches_Schema
Als Produkt zweier Matritzen ergibt sich einfach eine weitere Matrix deren Eintrag an Stelle ij dem Skalarprodukt der i-ten Zeile der ersten Matrix mit der j-ten Spalte der zweiten Matrix entspricht.

Werbeanzeige