matrix:rotation um eine beliebige Achse
-
Im neuen buch von David Scherfgen bin ich über eine Matrix gestolpert, die ich ehrlich gesagt nicht verstehe:
diese Matrix soll einen punkt im 3dimensionalen raum um eine beliebige achse rotieren können. Da ich aber gerne sachen verstehe, die ich schreibe,wollte ich mal fragen, ob jemand von euch weis, wie diese matrix hergeleitet wurde?
hab mich vorhin miteinem blatt papier vor die matrix gesetzt, und geschaut ob ich vielleicht die matritzen finde, die multipliziert wurden, um diese matrix zu erhalten, doch kam ich auf kein ergebnis. Vielleicht kennt von euch aber auch jemand ein gutes Buch, welches sich mit solchen sachen beschäftigt, und für das man nicht die komplette mathematische formelsprache können muss,vielleicht kann ich mir dann demnächst sowas selber herleitenx/y/z ist der vector der Achse,α ist der winkel um gedreht werden soll,und c ist die Differenz von 1-cos(α)
\left( \begin{array}{cccc} x^2\*c+cos(\alpha) & x\*y\*c -(z\*sin(\alpha)) & x\*z\*c+(y*sin(\alpha)) & 0\\ y\*x\*c+(z\*sin(\alpha)) & y^2\*c+cos(\alpha) & y\*z\*c-(x*sin(\alpha)) & 0 \\ z\*x\*c-(y\*sin(\alpha)) & z\*y\*c+(x\*sin(\alpha)) & z^2*c+cos(\alpha) & 0 \\ 0 & 0 & 0 & 1 \end{array} \right)falls das latex nicht so gut aussieht, sorry, aber ich beherrsche es noch nicht sonderlich
-
Zur Herleitung gibt es mehrere Möglichkeiten. Zunächst solltest Du folgendes beachten: wenn Du den Vektor e_i (der an der i-ten Stelle ne 1 hat und sonst 0en) an die Matrix dranmultiplizierst, dann kommt genau die i-te Spalte raus. Das heißt, um die Matrix zu bestimmen mußt Du nur wissen, was bei der Rotation mit den e_i passiert. Du könntest also versuchen rauszukriegen was bei Rotation um (x,y,z) um Winkel a mit den e_i passieren muß. Leider ist das nicht ganz trivial. Eine Möglichkeit ist da auf Quaternionen auszuweichen. Dort kannst Du sehr leicht eine Rotation um eine beliebige Achse definieren und dann für die e_i nachrechnen. Die Ergebnisse sind dann Deine Matrix-Spalten.
Dazu mußt Du allerdings wissen, daß Quaternionen rotieren. Das kannst Du entweder hinnehmen oder ebenfalls beweisen, wahr glaub ned so sehr schwer. Frag nach, wenn Du das auch brauchst.MfG Jester
-
das ist glaub ich auch nur die quaternion ausmultipliziert
\[x_{q}=x*sin(\frac{\alpha}{2})\] \[y_{q}=y*sin(\frac{\alpha}{2})\] \[z_{q}=y*sin(\frac{\alpha}{2})\] \[w_{q}=cos(\frac{\alpha}{2})\]
das hätten wir
Quarternion aus Rotationsvector und Winkelhttp://www.j3d.org/matrix_faq/matrfaq_latest.html
\[1-2\*y_{q}^2-2\*x_{q}^2 \] \[1-2\*y^2\*sin(\frac{\alpha}{2})^2-2\*x^2\*sin(\frac{\alpha}{2})^2\]
Bsp:
Herleitung des Rotmatrix(2,2) - Elementsals estes versuchen die sin^2 Dinge zu vereinfachen
\[cos(2*\gamma)=1-2*sin(\gamma)^2\] \[\gamma=\frac{\alpha}{2}\] \[cos(\alpha)=1-2*sin(\frac{\alpha}{2})^2\]
trigonometrische additions theoreme (Halbwinkelsätze)das ganze nach sin^2 umstellen
\[sin(\frac{\alpha}{2})^2= \frac{1-cos(\alpha)}{2} \]einsetzen
\[1-2\*y^2\*\frac{1-cos(\alpha)}{2}-2\*x^2\*\frac{1-cos(\alpha)}{2}\] \[1-y^2*(1-cos(\alpha))-x^2*(1-cos(\alpha))\] \[1-x^2-y^2+y^2\*cos(\alpha))+x^2\*cos(\alpha))\]der Richtungsvektor hat Länge 1
\[x^2+y^2+z^2=1\] \[z^2=1-x^2-y^2\]einsetzen
\[z^2+y^2\*cos(\alpha))+x^2\*cos(\alpha))\] \[z^2+cos(\alpha)(y^2+x^2)\]Einheitslänge des Vectors benutzen
\[x^2+y^2=1-z^2\]Term ersetzen
\[z^2+cos(\alpha)(1-z^2)\]ausmultiplizieren
\[z^2+cos(\alpha)-cos(\alpha)*z^2\]z^2 zusammenfassen
\[cos(\alpha)+z^2(1-cos(\alpha))\]
-
Hab keine Ahnung, was Du da gerade baust. Vielleicht kannst Du die ein oder andere Gleichheit hinzufügen und sagen was Du da überhaupt vor hast?
-
ähm ja?^^ kann mir jemand den zahlenkram da oben erklären? ich weis irgendwie nicht, wo da vorne und hinten ist
-
Hallo
Den Vektor der Drehachse kannst du auch als karthesische Koordinaten eines Punktes betrachten. Daraus lassen sich die "inversen" Kugelkoordinaten bestimmen. D.h. aus den karthesischen Koordinaten kannst du die Kugelkoordinaten bestimmen.
Um diese zwei Winkel, die du dadurch erhälst, rotierst du um zwei geeignete Basisachsen (je nachdem wie dein Koordinantensystem aufgebaut ist). Anschließend liegt die Drehachse auf einer der Basisachsen und du kannst eine der üblichen Rotationsmatrizen verwenden und um den gewünschten Winkel alpha drehen.
Die anfänglichen Rotationen macht man rückgängig und schon hat man es.D.h. deine Matrix sollte sich als Produkt von 5 gewöhnlichen Drehmatrizen ergeben.
Dass das jetzt wahrscheinlich niemand kappiert hat ist mir klar. Dass ich zuviel getrunken hab um es vorzurechnen oder mir sicher zu sein, dass es so klappt, muss euch klar sein.
Gruß, space
-
warum ignorierst Du meine Erklärung? zu kompliziert?