+1 Daumen
2,9k Aufrufe

Hallo allerseits!

Mein Problem spielt sich im 3-dim. Raum ab. Ich muss Vektoren x um beliebige Rotationsachsen n um verschiedene Winkel alpha nach links drehen. Sowohl x als auch n starten vom Ursprung aus.

Ich habe versucht, einzelne Drehungen um die x-, y- und z-Achse mittels Matrix-Multiplikation zu einer passenden Gesamtdrehung um die Achse n zu kombinieren, aber die Ergebnisse sehen schlimm aus.

Ich bin echt am Verzweifeln, weil ich das nicht hinkriege, aber das am Montag fertig programmiert haben soll.

Hoffentlich kann mir hier ein genialer Geist helfen?

Avatar von

3 Antworten

+2 Daumen
 
Beste Antwort

Aloha :)

Ich gehe davon aus, dass die Drehachse \(\vec n\) auf die Länge 1 normiert ist. \(\vec x\) zeige vom Ursprung aus auf den zu drehenden Punkt. \(\vec x'\) sei dieser Vektor nach der Drehung. Den Vektor \(\vec x\) kannst du in einen Anteil parallel und einen Anteil senkrecht zu \(\vec n\) zerlegen:

$$\vec x=\vec x_\parallel+\vec x_\perp\quad;\quad \vec x_\parallel=\left(\,\vec n\cdot\vec x\,\right)\cdot\vec n\quad;\quad\vec x_\perp=\vec x-\vec x_\parallel$$

Der parallele Anteil \(\vec x_\parallel\) bleibt bei der Drehung ungeändert. Der senkrechte Anteil \(\vec x_\perp\) wird um den Faktor \(\cos\alpha\) kürzer, während senkrecht zu \(\vec n\) und \(\vec x_\perp\) der von \(\vec x_\perp\) weggenommene Anteil mit dem Faktor \(\sin\alpha\) anwächst. Damit lautet die Transformation:

$$\vec x'=\vec x_\parallel+\vec x_\perp\cos\alpha+\left(\vec n\times\vec x_\perp\right)\sin\alpha$$Ich drück' dir die Daumen, dass du es bis Montag schaffst!!!

Avatar von 152 k 🚀

Hallo Tschakabumba,

wenn man deine Idee so liest, klingt sie sehr plausibel und vielversprechend. Vor allem hat die Formel eine überschaubare Komplexität und Größe. Ich probiere das gleich mal aus. Die meisten Routinen habe ich bereits, muss eigentlich nur noch die Zerlegung in den parallelen und den senkrechten Anteil programmieren. Mir juckt es jetzt richtig in den Fingen, ich bin mal eben programmieren...

Danke dir schon mal.

Hallo nochmal !!!

Ich wollte nur kurz Rückmeldung geben...

Hat alles super geklappt, die Punkte werden perfekt gedreht, keine Bildartefakte.

Gestern hätte ich nicht gedacht, dass das so gut werden wird und vor allem, dass ich das pünktlich schaffe.

Sehr vielen Dank, du hast mir mein Wochenende gerettet!!!

Die beschriebene Abbildung lässt sich auch durch Matrizen beschreiben. Wie das geht und auch der oben gewählte Ansatz werden hier beschrieben:

https://de.wikipedia.org/wiki/Drehmatrix#Drehmatrizen_des_Raumes

0 Daumen

Falls ich dich recht verstehe.
Ich war selbst auch einmal Programmierer und stellte
mir die Aufgabe einen Würfel im Raum beliebig
um alle 3 Achsen drehen zu können.
Eckpunkt Würfel z.B. ( 1 | 1 | 1 )
Drehung um die y-Achse.
Ich stelle mir den Würfel vonoben betrachtet vor.
Die Koordinaten reduzieren sich auf ( 1 | 1 | - )
Die Koordinaten werden in Polarkoordinaten
( hoffentlich heißt das so ) umgerechnet
r Abstand w Winkel )
sin w = y / x = 1/1 = 90 °
r = √ ( 1^ + 1^ ) = 1.4142

Jetzt wird gedreht um 10 °:
w = 100 °
r bleibt bei der Drehung bestehen .
Koordinaten wieder zurückrechnen.
sin w =  = sin 100 = x / 1.4142
x = 1.3927
cos 100 = y / 1.3927

y = 0.6079
neue Koordinaten ( 1.3927 | 0.6079 | - )
in 3d
( 1.3927 | 0.6079 | 1 )

Geschrieben um 6:Uhr morgens
Ins Unreine. Ich müßte alles noch einmal
nachkontollieren.

Ich hoffe danach hast du gefragt.

Bin gern weiter behilflich.
Der Algorithmus bleibt für alle
3 Achsen derselbe und blieb somit beim
Programmieren derselbe und wurde mit den
entsprechenden Übergabeparametern (
Koordianten ) aufgerufen.

Eine Skizze kann ich auch anfertigen.

Avatar von 123 k 🚀

Ich habe mir gerade die Antwort von TKB
angesehen. Das scheint dasselbe wie meine
Antwort zu sein.

Hallo Georg,

deinen Vorschlag habe ich schon selbst ausprobiert. Ich wollte um jede Koordinaten-Achse einzeln drehen. Das ist aber fürchterlich schief gegangen. Das Ergebnis hängt im Allgemeinen sogar von der Reihenfolge ab, in der ich um die Koordinatenachsen drehe. Aber ich probiere deine konkrete Beschreibung gleich nochmal aus.

Vielen Dank erstmal.

Hat alles super geklappt, die Punkte werden perfekt gedreht, keine Bildartefakte.
Schön das der Algoritmus von TKB direkt so
gut bei dir geklappt hat.
Damit keine Artefakte entstehen habe ich auch
getestet
- ein zweites Bild im Hintergrund erstellen
und dann beide Bildschirme tauschen. Das war beim
Schneider 6128 Homecomputer damals möglich
  Das Programm funktionierte tadellos.

  So viel zu programmieren gab es auch nicht da
der Drehalgoritmus nur einmal programmiert werden mußte und dann für alle 3 Achsen genutzt werden
konnte.

  Bei Nachfragebedarf wieder melden

0 Daumen

Vielleicht hilft Dir diese Zusammenstellung weiter

https://www.geogebra.org/m/fdmmvvma


blob.gif

Avatar von 21 k

Hallo wächter,

danke dir für diesen Zusammenfassung. Die Formeln sind ja hammer kompliziert und mir, ehrlich gesagt, zu unkonkret. Eigentlich brauche ich nur Drehachse, Winkel und zu drehenden Punkt. Da ich bis Montag fertig sein muss, werde ich mir erstmal die anderen Lösungsvorschläge hier ansehen.

Aber Danke für deine Zeit.

Nun, Du musst Dich ja nicht durch die Herleitung arbeiten.

Der konkrete Teil sind 2 Drehmatrizen, eine für einen normierten Achsenvektor n und eine für einen beliebigen Achsenvektor. Das sollte für die Programmierung doch reichen, oder?

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community