Rotation eines Würfels II

Hi nochmal,
ich hab vor kurzem schonmal einen Artikel mit dem Thema geschrieben, der ist aber leider schon im Archiv gelandet. Für alle dies noch nicht / nicht mehr wissen: Ziel war die Rotation eines Würfels (also die Koordinaten der Eckpunkte) um seinen Mittelpunkt (^=Bezugspunkt) mithilfe des Kugelkoordinatensystem. Dabei wollte ich zuerst die Kugelkoord. der Ausgangseckpunkte berechnen und anschließend bei der Rücktransformation noch delta Phi und Theta hinzufügen, delta Theta und Phi sind die Winkelangaben um die der Punkt/Würfel weitergedreht wurde.
Wären dann folgende Formeln:

θ0=acos⁡(z0/r)
Φ0= atan2⁡(y0,x0)
z= r ∙ cos(⁡θ0 + dθ)
x=r ∙ sin⁡θ0 ∙ cos(⁡Φ0 + dΦ)

d steht für delta ( nicht für das d wie es in physikalischen Gleichungen vorkommt).

Es scheint wohl so als ob diese Methode (die Rücktransformation) nich so wirklich funktionieren würde, dass liegt nicht an der allgemeinen Rücktransformationsgleichung, sondern an dem dPhi /-Theta.
Mal ein einfachstes Beispiel (Drehung um x- Achse) bei dem die Gleichung versagt für einen Punkt:
θ0 = 55°
dθ = 125°
z= - r
z müsste hier aber - 0,5 *Kantenlänge sein

Kann mir irgendjemand die richtige Gleichung sagen, ich glaub dass ist irgendwas mit Matrizen oder so?. Hab da keine Ahnung von und würd glaub ich auch noch ein paar Jahre so bleiben :wink:

Gruß
AT

Hi AT,

ich finde deine Ausführung schon eher schwer zu verstehen. Das liegt zum Teil daran, dass du leider darauf verzichtest LaTeX zu benutzen und das du , meiner Meinung nach, auch nicht sehr strukturiert schreibst.

Na gut, genug der bösen Worte.

Aber so ganz Allgemein sehe ich dein Problem nicht.

  1. Was bedeutet?

\phi_{0}= arctan 2(x_{0},y_{0})

  1. r ist der Abstand deines Punktes vom Koordinatenursprung, in deinem Fall wohl vom Mittelpunkt des Würfels.

Für dein Rechenbeispiel bedeutet das, dass man hier eine Fall Unterscheidung machen muss.

2.1 Der Punkt halbiert eine Seite.

Damit ist r genau die halbe Kantenlänge. Und z ist wie du erwartest die negative halbe Kantenlänge.

2.2 Der Punkt halbiert keine Seite.

Damit ist r immer größer als die halbe Kantenlänge und somit auch der Betrag von z.
Der Widerspruch ist, meiner Ansicht nach, nicht, dass z ungleich der negativen halben Kantenlänge ist. Sondern dass du in diesem Fall eine unbegründete Erwartung stellst.

Wenn ich deine Erklärungen richtig verstanden und keinen Denkfehler habe sollte das alles so stimmen.

viele Grüße und die Anfangskritik bitte nicht als Beleidigung verstehen.

deus.sum

ich finde deine Ausführung schon eher schwer zu verstehen.
Das liegt zum Teil daran, dass du leider darauf verzichtest
LaTeX zu benutzen und das du , meiner Meinung nach, auch nicht
sehr strukturiert schreibst.

Das kommt bestimmt daher, dass ich mich kurz fassen wollte. Aber nochmal mein Vorhaben ausfürlich geschildert:

Man denkt sich einen Würfel. Diesen setzt man nun in ein dreidimensionales kartesisches Korrdinatensystem ein und zwar so, dass der Mittelpunkt des Würfels auf dem Ursprungspunkt des Koord.systems liegt. Nun will ich diesen Würfel um seinen Mittelpunkt drehen.

Jetzt meine Beispiel (absofort rede ich nicht mehr von dem ganzen Würfel, sondern nur noch für einen seiner Eckpunkte, indem Beispiel aus dem Startartikel wäre das der 2.):

Dreht man den Würfel einfach nach unten, dh um die x-Achse, beschreibt der Punkt ja einen Kreis (von der Seite her gesehen). Er befindet also immer gleichweit weg von der x-Achse und zwar logischerweise mit einem Radius, der der halbe Kantenlänge des Würfels entspricht. Also sind die größten, bzw. niedrigsten y- und z-Werte 0,5 * die Kantenlänge und -0,5* Kntl .

\setlength{\unitlength}{1mm}
\begin{picture}(60, 40)
\put(30,30){\circle{150}}
\put(30,30){\line(0,-1){10}}
\put(30,30){\line(0,1){10}}
\put(30,30){\line(1,0){10}}
\put(30,30){\line(-1,0){10}}
\end{picture}

Die Achsen sind von oben nach links: z, -y, -z, y

Um die Koordinaten dieser einfachen Drehung zu beschreiben, wollte ich das Kugelkoordinatensystem benutzen. So lässt sich die Drehung alleine durch den Winkel θ darstellen. Da der Punkt in der Sartwürfellage aber nicht bei θ = 0° liegt, muss man den Ausgangswinkel
\Theta_{0}
ausrechen und anschließend den „Drehwinkel“ hinzu addieren, welcher
\Delta \Theta_{0}
heißt.
Daraus egeben sich dann folgende Formeln:

\Theta_{0} = arccos(z_{0}/r)

und

z = r \cdot cos(\Theta_{0} + \Delta \Theta)

wobei r nicht r von eben (0,5 * Kntl.) ist, sondern

\sqrt{y^2 + x^2 + z^2}

Das gleiche gilt natürlich auch für den Azimutwinkel.

Jetzt die Daten zu dem Beispiel:

Sind im nächsten Beitrag wei zu lang ->

z_{0} = 5

x_{0} = 5
// für Beispiel unwichtig

y_{0} = -5
// für Beispiel unwichtig

\Theta_{0} = 55^\circ

\Delta \Theta = 360^\circ
// ganze Drehung

der kleinste z-Wert müsste jetzt für mein Vorhaben -5 und der größte 5 sein. Sie sind jedoch der -r und r (das r aus den Transformationsgleichungen, was ja auch völlig logisch ist. Irgendwann ist
cos(\Theta_{0} + \Delta \Theta) = 1
und dann ist z = r)

Ich wollte damit lediglich zeigen, dass mein Ansatz nicht funktioniert und dass ist wie gesagt nur eine einfache Drehung, bei Drehungen um den Polar- und Azimutwinkel gleichzeitig seh ich auch keine Möglichkeit meine Methode zu fixen.

Aber mein Ansatz ist eigentlich nicht wichtig für die Lösung des Artikels. Wichtig ist eine Methode zu finden (da es sie aber garantiert in der Mathematik gibt sollte es eher heißen, mir davon zu erzählen :wink: ) mit der man Rotationen beschreiben kann.

Gruß AT
PS: Keine Ahnung ob das jetzt strukturierter oder leichter zu verstehen war (glaub ja nicht :wink: ) aba auf jeden Fall ausfürlicher :smiley:.

Hallo,

Ich wollte damit lediglich zeigen, dass mein Ansatz nicht
funktioniert und dass ist wie gesagt nur eine einfache
Drehung, bei Drehungen um den Polar- und Azimutwinkel
gleichzeitig seh ich auch keine Möglichkeit meine Methode zu fixen.

richtig erkannt. Deine Idee ist schlicht keine Lösung für Dein Problem. Wenn Du aus den originalen Würfelpunkten neue Punkte derart berechnest, dass Du alle Theta-Winkel um beispielsweise 5° erhöhst (unter Beibehaltung der Phi-Winkel), dann wandern alle Punkte ein Stück „südlicher“. Das entspricht aber nicht einer Drehung, denn bei jeder Drehung um eine durch den Würfelmittelpunkt verlaufenden Achse wird die Hälfte der Punkte nördlicher, und die andere Hälfte südlicher (außer bei einer Drehung um die z-Achse, bei der alle Punkte auf ihrem Breitengrad bleiben).

Die richtige Methode ist r’ = D r. Darin bezeichnet r = (x, y, z) den Originalvektor, r’ = (x’, y’, z’) den Bildvektor und D die Drehmatrix, die etwas wüst aussieht, nämlich so:

D =
\left( \begin{array}{ccc}
c + (1-c) u^2 & (1-c)uv + sw & (1-c)uw - sv\
(1-c)uv-sw & c+(1-c)v^2 & (1-c)vw + su\
(1-c)uw+sv & (1-c)vw - su & c+(1-c)w^2
\end{array}
\right)

u, v, w sind die Koordinaten des Einheitsvektors, der in die Richtung der Drehachse zeigt, s := sinφ, c := cosφ mit φ als Drehwinkel. Das ist alles :smile:

Solltest Du Dich fragen, wie man eine Matrix mit einem Vektor multipliziert, verweise ich Dich mal an die Wikipedia.

Hilft Dir das weiter?

Gruß und ein schönes WE
Martin

Hi,
erstmal Danke, das ist doch schon mal ne Formel :smiley: . Ich hätte aba noch en paar Fragen. Aber mal nach der Reihe, also die erste:
Stimmen die folgenden Einheitsvektoren u,v,w bei einer Drehung um die x-Achse?
u=1;
v=0;
w=0;

So müsste es ja sein, wenn ich die Richtung der x-Achse angeben muss (vorrausgesetzt u, v, w repräsentiert x,y,z).

Gruß AT

Hallo,

Ich hätte aba noch en paar Fragen.

schieß los.

Stimmen die folgenden Einheitsvektoren u,v,w bei einer Drehung um die x-Achse?

u=1;
v=0;
w=0;

ja, klar. (1, 0, 0) ist der korrekte Drehachsen-Einheitsvektor für eine Drehung um die x-Achse. Er zeigt ja in x-Richtung und hat die Länge 1. Mehr wird von ihm nicht verlangt.

vorrausgesetzt u, v, w repräsentiert x,y,z.

Genau, so sind die Komponenten u, v, w des Drehachsen-Einheitsvektors zu verstehen.

Mit dem Wissen, dass die „zweidimensionale“ Drehmatrix ((c, s), (–s, c)) lautet, kann man sogar sofort angeben, zu was sich D bei Deiner (1, 0, 0)-Wahl vereinfachen muss, nämlich

D_x =
\left(
\begin{array}{ccc}
1 & 0 & 0\
0 & c & s\
0 & -s & c
\end{array}
\right)

Ob sich tatsächlich aus D dieses Dx ergibt, kannst Du schnell selbst nachprüfen.

Gruß
Martin

Also mal ein Beispiel:
x= 5;
y= -5;
z= 5;
\varphi = 45

r’ =
\left(
\begin{array}{ccc}
cos(45) + 1- cos(45) & 0 & 0 \
0 & cos(45) & sin(45) \
0 & -sin(45) & cos(45) \
\end{array}
\right)
\cdot
\left(
\begin{array}{ccc}
5 \
-5 \
5 \
\end{array}
\right)

\triangleq

\left(
\begin{array}{ccc}
5 & 0 & 0 \
0 & -3,54 & 3,54 \
0 & 3,54 & 3,54 \
\end{array}
\right)

D_x =

\left(

\begin{array}{ccc}

1 & 0 & 0\

0 & c & s\

0 & -s & c

\end{array}

\right)

Wie man bei der ersten Gleichung auch sieht, ist indem Fall Dx = D .

Jetzt bleibt eigentlich nur noch eine Frage:

Wie komm ich jetzt von der Matrix zu meinen drei Koordinaten, einfach die Zeilen aufaddieren?

Gruß AT

r’ =

\left(

\begin{array}{ccc}

cos(45) + 1- cos(45) & 0 & 0 \

0 & cos(45) & sin(45) \

0 & -sin(45) & cos(45) \

\end{array}

\right)

\cdot

\left(

\begin{array}{ccc}

5 \

-5 \

5 \

\end{array}

\right)

\triangleq

\left(

\begin{array}{ccc}

5 & 0 & 0 \

0 & -3,54 & 3,54 \

0 & 3,54 & 3,54 \

\end{array}

\right)

Wie komm ich jetzt von der Matrix zu meinen drei Koordinaten,
einfach die Zeilen aufaddieren?

Was um Himmels willen tust Du da? OK, Du hast (grummel…) offensichtlich den Satz überlesen, in dem ich schrieb, Du sollst selbst recherchieren, wie eine Matrix mit einem Vektor multipliziert wird, wenn Du das noch nicht kennst. Das geht nach einer ganz eigenen Regel vonstatten:

\left(
\begin{array}{ccc}
a_{11} & a_{12} & a_{13}\
a_{21} & a_{22} & a_{23}\
a_{31} & a_{32} & a_{33}
\end{array}
\right)
\left(
\begin{array}{c}
x\
y\
z
\end{array}
\right)

\left(
\begin{array}{c}
a_{11} x + a_{12}y + a_{13}z\
a_{21} x + a_{22}y + a_{23}z\
a_{31} x + a_{32}y + a_{33}z
\end{array}
\right)

oder in Kompaktform:

x_i’ = \sum_{k=1}^3 a_{ik},x_k

x’, y’ und z’ ergeben sich also als Skalarprodukte, indem jeweils ein _Zeilen_vektor der Matrix mit (x, y, z) skalarmultipliziert wird. Natürlich hat es seinen guten Grund, warum das so und nicht anders gemacht werden muss, aber das würde hier zu weit führen.

Martin

Du hast (grummel…)
offensichtlich den Satz überlesen, in dem ich schrieb, Du
sollst selbst recherchieren, wie eine Matrix mit einem Vektor
multipliziert wird, wenn Du das noch nicht kennst. Das geht
nach einer ganz eigenen Regel vonstatten:

\left(

\begin{array}{ccc}

a_{11} & a_{12} & a_{13}\

a_{21} & a_{22} & a_{23}\

a_{31} & a_{32} & a_{33}

\end{array}

\right)

\left(

\begin{array}{c}

x\

y\

z

\end{array}

\right)

=

\left(

\begin{array}{c}

a_{11} x + a_{12}y + a_{13}z\

a_{21} x + a_{22}y + a_{23}z\

a_{31} x + a_{32}y + a_{33}z

\end{array}

\right)

Nein, ich hab denn Satz schon gelesen. Ich habs ja auch so gemacht wie du es grade gesagt hast:

\left(
\begin{array}{ccc}

(cos(45) + 1- cos(45)) \cdot 5 & 0 \cdot -5 & 0 \cdot 5 \

0 \cdot 5 & cos(45) \cdot -5 & sin(45) \cdot 5 \

0 \cdot 5 & -sin(45) \cdot -5 & cos(45) \cdot 5 \

\end{array}

\right)

=

\left(

\begin{array}{ccc}

5 & 0 & 0 \

0 & -3,54 & 3,54 \

0 & 3,54 & 3,54 \

\end{array}
\right)

Mein Frage war wie ich hier von:

\left(
\begin{array}{ccc}
5 & 0 & 0 \
0 & -3,54 & 3,54 \
0 & 3,54 & 3,54 \
\end{array}
\right)

nach hier komme:

\left(
\begin{array}{ccc}
x’ \
y’ \
z’ \
\end{array}
\right)

und wenn ich das hier:

\left(

\begin{array}{c}

a_{11} x + a_{12}y + a_{13}z\

a_{21} x + a_{22}y + a_{23}z\

a_{31} x + a_{32}y + a_{33}z

\end{array}

\right)

richtig verstanden hab muss man die einzelnen Zeilen zusammen addieren.

Gruß AT

richtig verstanden hab muss man die einzelnen Zeilen zusammen addieren.

Jetzt raff ich, was Du gemeint hast. Und nehm das mit dem ungelesenen Satz zurück :smile:

Du hast mit

\left(
\begin{array}{ccc}
5 & 0 & 0 \
0 & -3,54 & 3,54 \
0 & 3,54 & 3,54 \
\end{array}
\right)

eine Matrix konstruiert, die es nicht gibt. Das Ergebnis einer Matrix-Vektor-Multiplikation ist ein Vektor (Du weißt das und hast deshalb das „entspricht“-Zeichen gesetzt, statt „=“).

Der Schritt von dieser nicht existierenden Matrix zum korrekten Ergebnisvektor ist der von Dir vermutete: Du musst nur Pluszeichen einfügen und alles ist formal wie inhaltlich richtig:

\vec{r},’

\left(
\begin{array}{c}
5 + 0 + 0 \
0 + (-3,54) + 3,54 \
0 + 3,54 + 3,54 \
\end{array}
\right)

\left(
\begin{array}{c}
5 \
0 \
7.071 \
\end{array}
\right)

ist der gedrehte Vektor und die Antwort auf Deine Frage.

Sorry wegen des Missverständnisses.

Martin

PS: Bei Drehungen ändern sich die Längen von Vektoren nicht – das ist ja die definierende Eigenschaft von Drehungen. Also muss, wenn (5, 0, 7.071) korrekt ist, dieser Vektor dieselbe Länge haben wie sein Original (5, –5, 5). Kommts hin? (Und klar, man kann auch ganz allgemein zeigen, dass es immer hinkommt. Die wüst aussehende Drehmatrix D hat ja die genau passenden Elemente dafür.).

Die Formel funktioniert super. Danke.

Ich hab auch noch ne zusätzliche Drehung von " r’ " um die y-Achse (ca.36°) getestet und (-0,1; 0; 8,55) herausbekommen. Das wäre zwar eine Abweichung von ~0,1, aber bei dem ganzen Runden, vor allem bei dem Drehwinkel, sollte das durchaus in Ordnung sein.

Gruß AT

Hallo,

das ist ja erfreulich. In diesem Fall sind der drehinvarianten Länge dann natürlich gewisse Toleranzen beim Überprüfen zuzugestehen. Wenn man runden muss, z. B. weil es die Ausgabe auf einem Rasterdevice (Monitor, Drucker) erfordert, sollte man immer erst das Endresultat (also den Pixelwert) runden, d. h. niemals irgendwelche Zwischenergebnisse.

Gruß und ein schönes WE
Martin

(Und nimm auch mal ne schiefe Achse… :wink: )