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

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

1

24.01.2014, 09:50

Normalenvektor von Rotationsachse berechnen

Hallo

Ist für viele hier bestimmt ein PillePalle-Problem.
Ich berechnen eine finale Rotationsmatrix indem ich die Rotationsmatrizen um die drei Achsen des Koordinatensystems multipliziere.
Also MRotFinal = MRotX * MRotY * MRotZ.
Ich möchte jetzt MRotFinal mit den drei Winkeln x, y und z (Drehwinkel um die entsprechnden Achsen des Koordinatensystems) direkt aufbauen um mir die Multiplikationen zu sparen.
Dafür möchte ich die Formel für die Rotationsmatrix um eine beliebige Rotationsachse benutzen.
Die Rotationsachse wird definiert durch einen Normalenvektor welcher in richtung der Rotationsachse zeigt.
Meine Frage ist jetzt wie ich diesen Normalenvektor aus den Rotationswinkeln x, y und z berechnen kann.

Vielen Dank
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

24.01.2014, 10:46

Wofür willst du das denn haben? Ggf sind nämlich Quaternion eher das was du suchst. Ansonsten gibt es auch eine direkte Berechnung der kompletten Rotationsmatrix indem man die Multiplikationen einfach mit den Funktionen durchführt (findet man auch irgendwo auf wiki-ggf auf englisch).
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

24.01.2014, 10:52

Du sparst dabei nix. Aber Du kannst natürlich die Matrix-Multiplikationen von Hand für die drei einzelnen Rotationsmatrizen ausführen und bekommst eine Bildungsvorschrift für die finale Matrix. Damit sparst Du die drei Matrix-Multiplikationen, hast aber immernoch 6 Sinus/Cosinus-Funktionen. Das hat in der Matrix&Quaternion-FAQ auch schon jemand getan, aber halt nur für eine der zwölf möglichen Euler-Winkel-Varianten. Welchen der Euler-Winkel-Systeme Du benutzt, musst Du schon selbst wissen. Und rein statistisch stehen die Chancen eher schlecht, dass Deine Methode ausgerechnet die ist, die in der FAQ ausgeformelt wurde :-)

Und allgemein der Hinweis bei Optimierungsthemen: profile zuerst und fange dann an zu optimieren. Mit an Sicherheit grenzender Wahrscheinlichkeit hast Du das noch nicht profiled und optimierst hier auf Verdacht. Ich glaube nämlich, dass ein sinnvoll vektorisierender Compiler eine Matrix-Multiplikation in SSE2-Instruktionen abhandeln kann, weswegen die Matrixmultiplikation nicht mehr nennenswert Anteil am Gesamtsystem hat.

[edit] Und weil Nox es schon angesprochen hat: Euler-Winkel sind allgemein eine wenig zukunftsträchtige Idee. Quaternions und gezielte Rotationen nach dem tatsächlichen Bedarf anstatt einem Dreier-Tuple Winkeln sind die bessere Lösung.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

4

24.01.2014, 13:35

Danke für die Antworten.
Werde mich mal mit Quaternions beschäftigen.
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Werbeanzeige