Teilwinkel zwischen 2 3d-vektoren... *verzweifel*
-
Hi,
Ich habe ein "kleines" Mathe problem, und hoffe, man kann mir helfen.
Folgende situation: ich habe einen Punkt im 3d-raum P1(0, 0, 1) und einen punkt p2(mit beliebigen werten). nun rätzele ich schon seit 3 tagen daran, wie man die 3 teilwinkel oder -rotationen zwischen den beiden punkten/vektoren errechnen kann (rotation um die x-, y-, und die z-achse)
wenn p2 z.b. die werte (0, 1, 0) hat, muss die rotation um die x achse 90 (-90?) grad sein, anderes beispiel: p2(1, 0, 0): rotation um die y achse um -90 grad. bei solchen punkten läösst sich das ja noch durch logik lösen, aber wie komme ich rechnerisch (ist zwar auch logisch, aber... ;-)) auf die 3 teilwinkel.
hoffe, ihr könnt mir helfen, danke schonmal
-
Um welche Achse rotierst du, wenn P2 = (1, 1, 0) ???
-
in welcher reihnfolge rotierst du?
-
tja, da fängt es schon an, bei p2=(1, 1, 0) müsste der punkt im coordinatensystem ja "oben rechts" liegen, also 45 f´grad jeweits um y- und z-achse.
Edit: geht aber auch anders, man kann ja auch 45 grad um x- und z-achse rotieren ich würde jedoch methode eins vorziehen, das ganze ist für eine virtuelle kamera, würde man also die zweite möglichkeit nehmen, würde die kamera den punkt ´"schief" ansehen...
ich rotiere erst um die x-, dann um die y-, und zuletzt um die z-achse.
-
Ich verstehe kein Wort.
-
Wozu brauchst du das denn? Bei einer virtuellen Kamera musst du ja quasi ein Koordinatensystem rotieren und nicht nur einen Vektor.
-
ok, also ich schreibe gerade eine kleine engine (eigentlich mehr ein directX wrapper). ich habe gemerkt, dass ich in vielen klassen variablen und funktionen gemeinsam habe, z.b. rotation und translation, etc. ich habe mich deshalb dazu entschlossen eine Matrix klasse zu coden. diese klasse kümmert sich darum, korrekte transformationsmatrizen auf der basis von translation,... zu "bauen". in dieser klasse habe ich unter anderen variablen 3 loats, RotationX, RotationY, RotationZ. bei einer rotation fülle ich einfach die vom user übergebenen werte in die variablen und lasse directx die matrix bauen. nun will ich aber objekte (u.a. die kamera), die diese klasse benutzen nichtr nur drehen, etc. können, sondern auch auf punkte ausrichten. die standart ausrichtung ist 1, 0, 0 (daher p1 aus meinem ersten posting). in der LookAt methode übergibt der user nun einen punkt. ich lasse directx wieder die arbeit mit der matrix machen, nun will ich aber die drei rotations variablen "upgedatet" haben, deshalb möchte ich die drei teilwinkel zwischen diesen beiden punkten wissen. ich brauche die lösung von daher nicht nur für die kamera. hoffe, es ist jetzt etwas klarer... *immernochverzweifel*
-
Servus,
so ganz ist's zwar nicht in Deinem Sinne, aber so kommst Du dann mit nur zwei Winkeln aus. Der Orientierungspunk sei (x,y,z) und Dein Ursprung (0,0,0), dann erhälst Du einen Drehungswinkel, wenn Du den Winkel zwischen (x,y,0) und z.B. (x,0,0) ausrechnstest, anschließend benutzt Du den (x,y,0) Vektor und rechnest den Winkel zwischen ihm und (x,y,z) aus, dadurch erhälst Du einen Raumwinkel. Theoretisch ist durch die Angabe der Länge von (x,y,z) als Radius nun die Position eindeutig bestimmt. Kurz: Umrechnung von kartesischen Koodinaten in Kugelkoordinaten.
Gruß Winn