JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=06102ad6b827a0870dbe9c39617dff24Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Winkel zwischen Vektoren

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 28.04.2005, 10:35    Titel: Winkel zwischen Vektoren Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 28.04.2005, 10:52    Titel: Antworten mit Zitat

alpha = arccos( ( v1 * v2 ) / ( |v1| * |v2| ) )

also in deinem fall da beide vektoren normalisiert sind:

alpha = arccos( ( v1 * v2 ) )
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 28.04.2005, 10:54    Titel: Antworten mit Zitat

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 Smile
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 28.04.2005, 12:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 28.04.2005, 15:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 28.04.2005, 18:50    Titel: Antworten mit Zitat

könnte auch sein, dass (wenn es einen mathe gott giebt so solle er mir vergeben Wink ) 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
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 28.04.2005, 20:11    Titel: Antworten mit Zitat

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... Sad
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 29.04.2005, 08:37    Titel: Antworten mit Zitat

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 Wink )
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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 29.04.2005, 09:18    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 19:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 20:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 03.05.2005, 14:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 03.05.2005, 14:31    Titel: Antworten mit Zitat


_________________
»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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 03.05.2005, 16:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
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

Impressum