Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
thomas_x
Anmeldedatum: 14.05.2007 Beiträge: 133
|
Verfasst am: 24.01.2008, 15:51 Titel: Meine privaten Sorgen |
|
|
Hallo,
für eine Anwendung in der Computergraphik möchte ich eine allgemeine Drehmatrix in Drehungen um die Koordinatenachsen zerlegen. Leider steh ich total auf dem Schlauch. Wenn das jemandem hier leicht fällt, wärs nett wenn er mich nicht dumm sterben läßt. Danke im vorraus. |
|
Nach oben |
|
|
Uli
Anmeldedatum: 09.06.2006 Beiträge: 472
|
Verfasst am: 24.01.2008, 20:55 Titel: |
|
|
Eine Möglichkeit sind die Eulerschen Winkel
Wenn du eine Matrix vorliegen hast, bekommst du mehr Bestimmungsgleichungen als genug für diese 3 Winkel.
Gruß, Uli |
|
Nach oben |
|
|
zeitgenosse
Anmeldedatum: 21.06.2006 Beiträge: 1811
|
Verfasst am: 24.01.2008, 22:49 Titel: |
|
|
Es gibt verschiedene Wege zur Beschreibung der räumlichen Orientierung wie die bereits genannten Eulerwinkel oder aber auch die Hamiltonschen Quaternionen. In der Robotik bedient man sich zur Berechnung kinematischer Ketten gerne der Denavit-Hartenberg-Konvention sowie der Jakobi-Matrizen.
Ganz simpel und für Einsteiger:
Für Rotationen, Skalierungen und Verschiebungen im euklidischen 3D-Raum werden 4x4-Matrizen benötigt:
http://www.datacomm.ch/chs/Container/Mathematik/3d_matrizen.jpg
entnommen aus:
3D-Programmierung mit Delphi von H.-G. Schumann
DirectX erledigt dann den Rest.
Gr. zg |
|
Nach oben |
|
|
lazyjones
Anmeldedatum: 01.01.2007 Beiträge: 312
|
Verfasst am: 25.01.2008, 10:47 Titel: |
|
|
Ich schlage folgendes vor: Man multipliziert die drei "normalen" Drehmatrizen (http://de.wikipedia.org/wiki/Drehmatrix#Drehmatrizen_des_Raumes_R.C2.B3) miteinander. Für die erste Drehmatrix nennt man den Winkel a1, für die zweite Matrix a2 und für die dritte a3.
Heraus kommt natürlich eine 3x3 Matrix mit komplizierten Einträgen.
Jetzt kann man vermutlich durch Vergleich der einzelnen Matrixelemente auf die Winkel a1, a2 und a3 schließen, so dass die Kette der drei Drehmatrizen eindeutig festgelegt ist.
Es würde die Rechnung sicherlich etwas übersichtlicher gestalten, wenn man sin(a1) == sa1, cos(a1)== ca1, sin(a2) == sa2, cos(a2)== ca2,sin(a3) == sa3, cos(a3)== ca3 abkürzt.
Edit:
Wie ich gerade sehe, hat Uli einen Link gesetzt, in dem das bereits multipliziert wurde:
http://de.wikipedia.org/wiki/Eulersche_Winkel#Luftfahrtnorm_.28DIN_9300.29_.28Yaw-Pitch-Roll.2C_Z.2CY.E2.80.99.2CX.E2.80.99.E2.80.99.29 |
|
Nach oben |
|
|
thomas_x
Anmeldedatum: 14.05.2007 Beiträge: 133
|
Verfasst am: 25.01.2008, 11:16 Titel: |
|
|
Hi Lazyjones,
das ist zwar der 'harte' Weg, aber anscheinend der einzig gangbare. Übrigens kriege ich 4x4 Matritzen, da ich in homogenen koordinaten rechne. Das macht aber fast keinen zusätzlichen Aufwand.
Danke für alle Antworten! |
|
Nach oben |
|
|
lazyjones
Anmeldedatum: 01.01.2007 Beiträge: 312
|
Verfasst am: 25.01.2008, 11:32 Titel: |
|
|
Gern geschehen!
Übrigens habe ich durch dein Posting jetzt mal nachgesehen was denn homogene Koordinaten sind. Wow, hab' ich mal wieder was gelernt. Danke! |
|
Nach oben |
|
|
thomas_x
Anmeldedatum: 14.05.2007 Beiträge: 133
|
Verfasst am: 25.01.2008, 12:50 Titel: |
|
|
Homogene Koordinaten sind in der Computergraphik total nützlich. Wenn Du -wie ich- in OpenGL programmierst, begegnen Sie dir auf Schritt und Tritt.
Ich hab mir in Maxima die allgemeine Rotationsmatrix aus Rotationen um die Koordinatenachsen herbeimultipliziert. Ich erhalte durch Koeffizientenvergleich ein nichtlineares Gleichungssystem mit 6 unbekannten (je sin und cos der 3 Winkel), das ich mit Newton-Raphson numerisch angehe. Mal schauen, ob das klappt... Das Dumme ist, das ich in C++ programmieren muß und für Numerik aber lieber Fortran90 nehme. |
|
Nach oben |
|
|
lazyjones
Anmeldedatum: 01.01.2007 Beiträge: 312
|
Verfasst am: 25.01.2008, 14:30 Titel: |
|
|
Ich habe mit Grafikprogrammierung und insbesondere OpenGL noch nie etwas zu tun gehabt.
Zunächst mal verstehe ich jetzt nicht, warum das Gleichungssystem nichtlinear ist. Der Link den ich gesendet hatte war doch linear in sin(x) und cos(x)!?
Weiterhin könnte es vielleicht numerisch was bringen, sin(x) durch cos(x) auszudrücken, da die nicht unabhängig sind wären es nur noch 3 Unbekannte.
Ich denke, dass man die Lösung exakt hinschreiben kann ohne aufwändige Numerik. |
|
Nach oben |
|
|
thomas_x
Anmeldedatum: 14.05.2007 Beiträge: 133
|
Verfasst am: 25.01.2008, 14:59 Titel: |
|
|
lazyjones hat Folgendes geschrieben: |
...
Zunächst mal verstehe ich jetzt nicht, warum das Gleichungssystem nichtlinear ist. Der Link den ich gesendet hatte war doch linear in sin(x) und cos(x)!?
Weiterhin könnte es vielleicht numerisch was bringen, sin(x) durch cos(x) auszudrücken, da die nicht unabhängig sind wären es nur noch 3 Unbekannte.
Ich denke, dass man die Lösung exakt hinschreiben kann ohne aufwändige Numerik. |
Wenn man nur nen Hammer als Werkzeug hat, sieht jedes Problem aus wie ein Nagel- mein Hammer ist die Numerik
Aber im Ernst: Erstens sehen meine Matritzen anders aus, weil ich andere Konventionen verwende- die Reihenfolge der Drehungen ist bei mir anders. Zum zweiten führen auch die im Link angegebenen Matritzen nicht auf lineare Gleichungssysteme, da Produkte der Unbekannten auftauchen- das darf nicht sein!
Zum dritten: Wenn ich mich auf drei Variablen beschränke muss ich einen asin / acos verwenden, um den Winkel zu kriegen. Die haben aber nur einen Wertebereich von Pi. Habe ich aber sinus und cosinus, kann ich atan2 verwenden- damit habe ich den vollen Wertebereich von 2Pi! Deswegen ist es -glaub ich- eher geschickt, die vollen sechs Unbekannten durchzuziehen. Numerisch ist der Mehraufwand vernachlässigbar. |
|
Nach oben |
|
|
Ich
Anmeldedatum: 29.06.2006 Beiträge: 624
|
Verfasst am: 25.01.2008, 15:52 Titel: |
|
|
Du hast immer mindestens einen Wert (cos oder sin), den du einfach ablesen kannst. Tu das einfach und arbeite dich der Reihe nach durch. |
|
Nach oben |
|
|
thomas_x
Anmeldedatum: 14.05.2007 Beiträge: 133
|
Verfasst am: 25.01.2008, 16:17 Titel: |
|
|
Ich hat Folgendes geschrieben: | Du hast immer mindestens einen Wert (cos oder sin), den du einfach ablesen kannst. Tu das einfach und arbeite dich der Reihe nach durch. |
In Maxima erhalte ich:
matrix([ca2*ca3,-ca2*sa3,sa2],[ca1*sa3+ca3*sa1*sa2,ca1*ca3-sa1*sa2*sa3,-ca2*sa1],[sa1*sa3-ca1*ca3*sa2,ca1*sa2*sa3+ca3*sa1,ca1*ca2])
Das gibt mir sa2, aber wie weiter? Ich kenne ja das Vorzeichen von ca2 nicht.
Aber ich glaube, ich könnte so vorgehen: Ich nehme ein Vorzeichen an und berechne daraus ca1, sa1, ca2 und sa2. Durch einsetzen in eine weitere Gleichung seh ich obs stimmt und drehe es -falls nicht- einfach um.
Manchmal sieht man den Wald vor lauter Bäumen nicht |
|
Nach oben |
|
|
thomas_x
Anmeldedatum: 14.05.2007 Beiträge: 133
|
Verfasst am: 25.01.2008, 16:43 Titel: |
|
|
Ich habs. Es funktioniert auch schon Nochmals Danke an alle!!! |
|
Nach oben |
|
|
Ich
Anmeldedatum: 29.06.2006 Beiträge: 624
|
Verfasst am: 25.01.2008, 17:00 Titel: |
|
|
Ich behaupte jetzt einfach mal, dass das Vorzeichen von ca2 frei wählbar ist. |
|
Nach oben |
|
|
thomas_x
Anmeldedatum: 14.05.2007 Beiträge: 133
|
Verfasst am: 25.01.2008, 21:19 Titel: |
|
|
Ich hat Folgendes geschrieben: | Ich behaupte jetzt einfach mal, dass das Vorzeichen von ca2 frei wählbar ist. |
Tatsächlich wird das Stück Programm, das die Vorzeichen ggf umdreht, anscheinend nie aufgerufen. Das versteh ich nicht. Wenn zB a2 = 180° ist muss ca2 doch -1 sein. Sehr komisch. |
|
Nach oben |
|
|
|