Autor |
Nachricht |
Pat84
Anmeldungsdatum: 11.03.2010 Beiträge: 9
|
Pat84 Verfasst am: 11. März 2010 16:27 Titel: Drehung um alle Achsen -> bestimmung der Drehwinkel |
|
|
Hallo,
ich habe ein Programm für einen CFD-Code geschrieben und möchte dieses erweitern, nur leider stehe ich jetzt vor einer schwierigen Aufgabe:
Ich habe einen beliebigen Einheitsvektor im Raum, der in einem anderen Koordinatensystem die X-Achse darstellt. Nun möchte ich meine X-Achse (Vektor 1,0,0) durch rotieren aller Achsen nacheinander (erst x -> y -> z) die Winkel in den Drehmatrizen bestimmen. Ich habe eine analytische Lösung, allerdings bekomme ich dort immer nur maximal Pi/4 und den negativen Gegenpart. Kann die Bestimmung der Transformationsmatrix auch eleganter lösen?
MfG
Pat84
|
|
|
Pat84
Anmeldungsdatum: 11.03.2010 Beiträge: 9
|
Pat84 Verfasst am: 11. März 2010 21:02 Titel: |
|
|
Ich habe noch mal Überlegungen angestellt und bin darauf gekommen, dass man nicht beliebig drehen kann, sondern in einer gewissen Reihenfolge vorgehen muss.
In meinem Fall muss man sich vorstellen, dass sich eine kegelartige Verengung im einem Rohr (Düse), mit der X-Achse als Achse, irgendwo im Raum befindet. Auf dieser Verengung ist ein Punkt und dessen Flächennormale gegeben. Von diesem Punkt aus geht ein kleiner Kanal ab, dessen Durchsatz ich analytisch berechne. Die Richtung des Rohres ist in einem anderen Koordinatensystem. In diesem Koordinatensystem wäre die Y-Achse die Flächennormale und der Ursprung der Punkt auf der Verengung.
Nun ist meine Überlegung, dass man erst um die Z-Achse Rotiert und dann um die X-Achse. Der Vektor, der am Ende der Rotation herauskommen soll ist Bekannt: der Normalenvektor der Verengung. Der Vektor zu Beginn auch: die Y-Achse.
Vielleicht ist mein Fall jetzt klarer. Momentan benutze ich erst die Z-Rotationsmatrix und dann auf den ein mal rotierten Vektor die X-Rotationsmatrix. Da ich immer nur eine Unbekannte habe, kann ich mit Trigonometrischer Umformung, der PQ-Formel und anschließend dem Arcsin den Winkel berechnen. Leider ist das Ergebnis mehr oder weniger schlecht, denn ich bekomme nur einen Winkel bis 90°. 225° sind also 45° und -45° ( Wegen der Wurzel unter der PQ-Formel). Eine Fallunterscheidung und ein Algorithmus zum Aufsummieren des restlichen Winkels Fällt mir auch nicht ein.
Eine ganz andere Art um an die Transformationsmatrix zu kommen wäre da viel besser.. Wenn es eine Gibt.
|
|
|
VeryApe
Anmeldungsdatum: 10.02.2008 Beiträge: 3248
|
VeryApe Verfasst am: 11. März 2010 21:22 Titel: |
|
|
Skizzen sind oft aussagekräftiger.
|
|
|
Pat84
Anmeldungsdatum: 11.03.2010 Beiträge: 9
|
|
|
Pat84
Anmeldungsdatum: 11.03.2010 Beiträge: 9
|
Pat84 Verfasst am: 15. März 2010 15:05 Titel: |
|
|
Sagt mal.. gibt es eine Möglichkeit ohne arcsin auf das Bogenmaß zu kommen, dass hinter einem Sinus steckt?
|
|
|
DrStupid
Anmeldungsdatum: 07.10.2009 Beiträge: 5044
|
DrStupid Verfasst am: 17. März 2010 22:01 Titel: |
|
|
Pat84 hat Folgendes geschrieben: | Jetzt möchte ich die beiden Winkel herausfinden, damit ich eine Transformationsmatrix erstellen kann und den in Koord 2. befindlichen Vektor in Koord. 1 überführen kann.
Für diese gilt:
Wobei z.B. die Y-Achse ist (0/1/0) und mein Flächennormalenvektor. |
Wenn ich Dich richtig verstanden habe, brauchst Du die Winkel nur, um die Transformationsmatrix zu berechnen. Ich hätte einen Weg, um die Matrix ohne irgendwelche Winkel zu berechnen:
Die Matrix soll die Basisvektoren
, und
des ursprünglichen Koordinatensystems in die Basisvektoren
des neuen Koordinatensystems überführen. Das kann die Matrix in diesem einfachen Fall leisten, wenn ihre Spaltenvektoren gleichzeitig die Basisvektoren des neuen Koordinatensystems sind. Damit steht einer der drei Spaltenvektoren bereits fest:
Um an die anderen Basisvektoren zu kommen, muss ich das Ganze ein wenig einschränken. Prinzipiell gibt es unendlich viele Transformationen, die die Y-Achse in die richtige Richtung drehen. Du hast Dich aber schon für eine dieser Möglichkeiten entschieden, indem das Koordinatensystem nacheinander erst um die Z-Achse und dann um die X-Achse des alten Koordinatensystems gedreht wird. Das hat zur Folge, dass die neue Z-Achse in der YZ-Ebene des alten Koordinatensystems liegt und damit senkrecht auf der alten X-Achse steht. Mathematisch heißt das
Daraus folgt schon mal
Die nächste Einschränkung besteht darin, dass alle Basisvektoren senkrecht aufeinander stehen. Das bedeutet beispielsweise
Daraus folgt
Schließlich sollen alle Basisvektoren auch noch die Länge 1 haben:
und damit ist der nächste Basisvektor schon fast komplett:
Jetzt muss ich nur noch das Vorzeichen wiederfinden, das bei der Normierung verloren gegangen ist. Das muss so gewählt werden, dass die X-Achse unverändert bleibt, wenn die neue Y-Achse mit der alten zusammen fällt und schon ist der zweite Basisvektor fertig:
Beim letzen Vektor könnte ich jetzt genauso vorgehen, indem ich ihn senkrecht zu den beiden anderen stelle, normiere und das resultierende Gleichungssystem löse. Aufgrund der einfachen Metrik geht das aber viel einfacher:
Und schon habe ich die Transformationsmatrix:
Für den Fall, dass ich mich verrechnet habe, weißt Du jetzt ja, wie Du Dir die Tranbsformation selbst basteln kannst.
|
|
|
|
|