Meine privaten Sorgen

 
Neues Thema eröffnen   Neue Antwort erstellen    Alpha Centauri Foren-Übersicht -> Sonstiges Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
thomas_x



Anmeldedatum: 14.05.2007
Beiträge: 133

BeitragVerfasst am: 24.01.2008, 15:51    Titel: Meine privaten Sorgen Antworten mit Zitat

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. Wink
Nach oben
thomas_x is offline Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Uli



Anmeldedatum: 09.06.2006
Beiträge: 472

BeitragVerfasst am: 24.01.2008, 20:55    Titel: Antworten mit Zitat

Eine Möglichkeit sind die Eulerschen Winkel

Wenn du eine Matrix vorliegen hast, bekommst du mehr Bestimmungsgleichungen als genug für diese 3 Winkel. Smile

Gruß, Uli
Nach oben
Uli is offline Benutzer-Profile anzeigen Private Nachricht senden
zeitgenosse



Anmeldedatum: 21.06.2006
Beiträge: 1811

BeitragVerfasst am: 24.01.2008, 22:49    Titel: Antworten mit Zitat

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
zeitgenosse is offline Benutzer-Profile anzeigen Private Nachricht senden
lazyjones



Anmeldedatum: 01.01.2007
Beiträge: 312

BeitragVerfasst am: 25.01.2008, 10:47    Titel: Antworten mit Zitat

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
lazyjones is offline Benutzer-Profile anzeigen Private Nachricht senden
thomas_x



Anmeldedatum: 14.05.2007
Beiträge: 133

BeitragVerfasst am: 25.01.2008, 11:16    Titel: Antworten mit Zitat

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
thomas_x is offline Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
lazyjones



Anmeldedatum: 01.01.2007
Beiträge: 312

BeitragVerfasst am: 25.01.2008, 11:32    Titel: Antworten mit Zitat

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
lazyjones is offline Benutzer-Profile anzeigen Private Nachricht senden
thomas_x



Anmeldedatum: 14.05.2007
Beiträge: 133

BeitragVerfasst am: 25.01.2008, 12:50    Titel: Antworten mit Zitat

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
thomas_x is offline Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
lazyjones



Anmeldedatum: 01.01.2007
Beiträge: 312

BeitragVerfasst am: 25.01.2008, 14:30    Titel: Antworten mit Zitat

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
lazyjones is offline Benutzer-Profile anzeigen Private Nachricht senden
thomas_x



Anmeldedatum: 14.05.2007
Beiträge: 133

BeitragVerfasst am: 25.01.2008, 14:59    Titel: Antworten mit Zitat

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 Smile

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
thomas_x is offline Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ich



Anmeldedatum: 29.06.2006
Beiträge: 624

BeitragVerfasst am: 25.01.2008, 15:52    Titel: Antworten mit Zitat

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
Ich is offline Benutzer-Profile anzeigen Private Nachricht senden
thomas_x



Anmeldedatum: 14.05.2007
Beiträge: 133

BeitragVerfasst am: 25.01.2008, 16:17    Titel: Antworten mit Zitat

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 Smile
Nach oben
thomas_x is offline Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
thomas_x



Anmeldedatum: 14.05.2007
Beiträge: 133

BeitragVerfasst am: 25.01.2008, 16:43    Titel: Antworten mit Zitat

Ich habs. Es funktioniert auch schon Smile Nochmals Danke an alle!!!
Nach oben
thomas_x is offline Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ich



Anmeldedatum: 29.06.2006
Beiträge: 624

BeitragVerfasst am: 25.01.2008, 17:00    Titel: Antworten mit Zitat

Ich behaupte jetzt einfach mal, dass das Vorzeichen von ca2 frei wählbar ist.
Nach oben
Ich is offline Benutzer-Profile anzeigen Private Nachricht senden
thomas_x



Anmeldedatum: 14.05.2007
Beiträge: 133

BeitragVerfasst am: 25.01.2008, 21:19    Titel: Antworten mit Zitat

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
thomas_x is offline Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Alpha Centauri Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Nutzungsbedingungen des Forums Alpha Centauri
Impressum: Karl Hilpolt,
Paradeplatz, 8001 Zürich, Schweiz
e-mail: webmaster (at) relativ-kritisch (dot) net