Algorithmus zu 3D-Rotationen

  • Hallo!

    (Ich hoffe ich bin hier im richtigen Forum, ich habe kein passenderes gefunden)

    Es gibt doch ein Theorem dass jede Folge von Rotationen im 3D-Raum auch durch eine einzige Rotation um eine beliebige Achse beschrieben werden kann.

    Bei der Verwendung von Rotationsmatrizen kann man diese einfach durch Multiplikation aller Matrizen der einzelnen Rotationen finden.

    Ich verwende aber die Axis-Angle-Repräsentation für die Speicherung der Rotationen (ein 3-elementiger Vektor gibt die Rotationsachse an, ein Skalar den Rotationswinkel um diese Achse). Frage: Wie kombiniere ich dort mehrere Rotationen zu einer einzelnen?

    Eine einfache Möglichkeit (zu der mir auch schon jemand geraten hat) wäre natürlich die einzelnen Rotationen in die Matrix-Darstellung zu konvertieren, dort die Rotationen durch Matrixmultiplikation zusammenzusetzten und schließlich die Rückkonvertierung in die Axis-Angle-Darstellung durchzuführen. Aber das gefällt mir nicht und ist außerdem nicht performant.

    Weiß jemand wie ich die Rotationen direkt in der Axis-Angle-Darstellung zusammensetze?

    mfg

  • Rotationen in Matrixdarstellung sind sehr problematisch. Ich hab persönlich die Erfahrung gemacht, dass das ganze nicht viel Sinn macht, sobald man mal etwas mehr machen will als eine normale Rotation.
    Die einzige brauchbare Lösung ist die Darstellung als Quaternionen. Bei diesen wäre die Kombination von Rotationen auch einfach eine Multiplikation von den beiden. Außerdem umgehst du damit den gimbal lock, der sehr böse sein kann.

    Mehr theoretische Info dazu:
    http://en.wikipedia.org/wiki/Quaternion

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Danke. Ich löse es jetzt mit Quaternionen weil man dort die Achse und den Winkel am leichtesten wieder extrahieren kann. Sonst wären mir Matrizen lieber gewesen (mehr als normale Rotationen brauche ich momentan ohnehin nicht und der Gimbal Lock kann ja bei Matrizen wie mir scheint auch nicht auftreten; nur bei Verwendung der Eulerschen Winkel), aber da ist es wesentlich komplizierter die Achse und den Winkel wieder herauszulesen.

  • Es gibt übrigens eh in jeder 3D-Library die diesen Namen verdient kompletten support für Quaternionen, da musst nix selber ausprogrammieren dann.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!