 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 28.04.2005, 10:35 Titel: Winkel zwischen Vektoren |
|
|
Hi folks,
folgende Sache: ich hab zwei dreidimensionale Vektoren, beide mit Länge 1, also Einheitsvektoren.
Der eine ist "untransformiert", der andere um die Winkel RotX, RotY und RotZ gedreht.
Wie bekomme ich diese Winkel raus, wenn ich die beiden Vektoren hab?
Thx _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 28.04.2005, 10:52 Titel: |
|
|
alpha = arccos( ( v1 * v2 ) / ( |v1| * |v2| ) )
also in deinem fall da beide vektoren normalisiert sind:
alpha = arccos( ( v1 * v2 ) ) |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 28.04.2005, 10:54 Titel: |
|
|
Hmm, nee, ich meinte die drei Winkel um die ich den untransformierten Vektor rotieren muss (um x-, y- und zAchse) um auf den transformierten zu kommen.
Trotzdem danke  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 28.04.2005, 12:06 Titel: |
|
|
hm. probiere mal das:
alpha = arccos( ( v1 * v2 ) )
axis = v1 X v2
du kannst doch sicher per axis-angle rotations matrizen erstellen, oder?
v1 x v2 sollte dann wenn ich mich nicht irre die rotationsachse sein, und alpha dann der winkel um den gedreht wird. |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 28.04.2005, 15:05 Titel: |
|
|
Hmm, das klingt interessant. Aber weiß wirklich keiner wie man auf die Winkel direkt kommt?
Wenn ich mir jetzt eine Funktion für Axis-Angle-Rotationsmatrizen schreib, is das nämlich noch ne Fehlerquelle... _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 28.04.2005, 18:50 Titel: |
|
|
könnte auch sein, dass (wenn es einen mathe gott giebt so solle er mir vergeben ) du so dran kommst:
alpha = arccos( ( v1 * v2 ) )
axis = v1 X v2
rotX = axis.x * alpha;
rotY = axis.y * alpha;
rotZ = axis.z * alpha;
kann auch sein, dass das komplett falsch ist. ist nur so ein gedanke der mir gekommen ist. am besten mal zettel und stift schnappen und schaun obs funktioniert.
[edit]
ich hab grad mal versucht ein paar fälle durch zu spielen.. könnte funktionieren |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 28.04.2005, 20:11 Titel: |
|
|
War nicht (0.0f, 0.0f, 1.0f)X(0.0f, 1.0f, 0.0f) gleich (0.0f, 0.0f, 0.0f)?
Da wär doch dann das Punktprodukt auch immer 0.0f.
Hmm, ich hab das doch so:
Code: |
Mat Rot, RotX, RotY, RotZ;
RotX.Identity();
RotY.Identity();
RotZ.Identity();
Rot.Identity();
RotX=MatRotation(RotX, AngleX);
RotY=MatRotation(RotY, AngleY);
RotZ=MatRotation(RotZ, AngleZ);
Rot=Multiply(Rot, RotX);
Rot=Multiply(Rot, RotY);
Rot=Multiply(Rot, RotZ);
////////////////////////////////////////////////////////////////////////////////
// D A S H I E R!!!
[b]vTransformed = MultiplyVectorMatrix(vUntransformed, Rot);[/b] |
Ich will doch nur aus vTransformed und vUntransformed die AngleX, AngleY, und AngleZ haben...  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 29.04.2005, 08:37 Titel: |
|
|
das punktprodukt aus ( 0, 1, 0 ) und ( 0, 0, 1 ) ist 0, klar. Dsa Punktprodukt ist immer 0, wenn die bieden vektoren senkrecht zueinander sind (praktisch für mathe aufgaben )
aber (0,1,0)X(0,0,1) ist (1, 0, 0) also der vektor der senkrecht zu den beiden vektoren ist.
also sollte es so funktioniere:
Code: |
Vector3 rotAxis = vTransformed ^ vUntransformed ;
rotAxis.normalize();
Degree angle = Math.arccos( vTransformed * vUntransformed );
Real rotX = rotAxis[0] * angle;
Real rotY = rotAxis[1] * angle;
Real rotZ = rotAxis[2] * angle;
|
bin mri nur net sicher. |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 29.04.2005, 09:18 Titel: |
|
|
@drummer:
Das Kreuzprodukt ist nur eine Determinante, die du ganz normal lösen kannst. Der resultierende Vektor steht immer senkrecht auf den beiden Faktor-Vektoren, es sei denn, diese beiden Vektoren sind kollinear:
Code: |
a x b =
|e1 ax bx|
|e2 ay by|
|e3 az bz|
|
wobei e1, e2, e3 die Basisvektoren deines Vektorraumes darstellen(in einem orthognonalen System z.B. (1 | 0 | 0), (0 | 1 | 0) und (0 | 0 | 1), und ax, ay, az, bx etc sind die Koordinaten deiner Vektoren.
a, b und axb ergeben außerdem ein Rechts-System, ist auch wichtig zu wissen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 01.05.2005, 19:48 Titel: |
|
|
Hi,
ich überleg mir das schon den ganzen Tag, aber irgendwie hab ich ne Denkblockade.
Wie geht das im Umkehrschluss? Also das man aus den Winkeln den Vektor erhält.
Is mit Sicherheit total einfach, aber wie gesagt, Denkblockade.
Danke |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 01.05.2005, 20:27 Titel: |
|
|
Nahar hat Folgendes geschrieben: | Hi,
ich überleg mir das schon den ganzen Tag, aber irgendwie hab ich ne Denkblockade.
Wie geht das im Umkehrschluss? Also das man aus den Winkeln den Vektor erhält.
Is mit Sicherheit total einfach, aber wie gesagt, Denkblockade.
Danke |
Alle Basisvektoren um ihre jeweiligen Winkel drehen und alle drei resultierenden Vektoren addieren. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 03.05.2005, 14:26 Titel: |
|
|
Hmm, xardias' Lösung ist gut, aber der Arccus-Kosinus liegt immer zwischen 0 und Pi... muss aber zwischen -Pi und Pi liegen, sonst geht's net! HAt einer ne Idde? _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 03.05.2005, 14:31 Titel: |
|
|
 _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 03.05.2005, 16:00 Titel: |
|
|
wenn deine beiden vektoren normalisiert sind (wie du vorrausgesetzt hattest), wird das ergebnis von v1 * v2 wohl immer zwischen 0 und 3 liegen.
ansonsten musst du noch durch das produkt ihrer längen dividieren. siehe PeaceKillers formel |
|
Nach oben |
|
 |
|
|
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
|