# 3d-rotation



## waldopax (4. Sep 2004)

hallo,

ich hab mir in java ne kleine 3d engine gebastelt, von der theorie her dürfte alles funktionieren, nur komischerweise wenn ich mein objekt um den ursprung drehen möchte verkleinert sich das objekt um die bei der drehung veränderte achse. d.h.

wenn sich das objekt um die y-achse dreht, wird das objekt auf der x- und z-achse kleinerskaliert

ich verwende folgende funktionen zum drehen um die y-achse

a = drehwinkel

x = cos a * x + sin a * z
z = cos a * z - sin a * x

ich kann mir vorstellen dass das problem durch die ungenauigkeit der werte kommt, aber eigentlich dürfte das kaum merklich und erst nach etlichen drehungen passieren, wenn überhaupt.

also wenn jemand eine lösung anbieten kann, möge er /sie sich bitte melden,

danke, patrick


----------



## Surma (4. Sep 2004)

Leider weis ich nicht woran das liegt, aber es gibt geschicktere Variant mit 4x4-Matrizen, wir ham da nen Link in der JLiB.
Undwie ich gerade sehe, geht er zur Zeit net... Mist, der war richtig gut. Naja, auf jeden fall kannst du mit 4x4 Matrizen alles auf einmal machen (Translation, Rotation, und noch was *g*)

Such mal bei google, das findeste was.

//edit:
NAARF! Mir faellt gerade was ein: Du weisst das die Winkelfunktionenfunktionen von Java Radians (Bogenmass) erwarten oder? Also wenn du jetzt sagt um 50° drehen, und uebergibst 50 (z.B an sin), dann rechnet er mit einem winkel von (50 * 180) / pi = 2864,79
= 344,79°
Was dann nachher bei den Additionen zum totalen Chaos fuehrt, was eben auch die Fehler erklaeren wuerde (weis jetzt nicht ob es die "richtigen" symptome dafuer sind)

MfG Surma


----------



## Beni (4. Sep 2004)

waldopax hat gesagt.:
			
		

> x = cos a * x + sin a * z
> z = cos a * z - sin a * x



Ich hoffe mal stark, in der 2. Rechnung wird das originale x verwendet?...

Wenn man die Gleichung auflöst, die Länge des Vektors x/z ist vor und nach der Rotation dieselbe:

(cos^2 a x^2 + 2 cos a sin a x z + sin^2 a z^2) + (cos^2 a z^2 - 2 cos a sin a x z + sin^2 a x^2 )
= x^2( cos^2 a + sin^2 a ) + z^2 (sin^2 a + cos^2 a ) + 2 x z ( cos a sin a - cos a sin a )
= x^2+z^2


----------



## waldopax (4. Sep 2004)

hi,

der kleine aber feine unterschied... hätt man ja selber drauf kommen können*ankopfhau*

natürlich hab ich das x direkt in die resource geschrieben und gleich wieder verwendet, is ja klar dass dann das ergebnis falsch wird...

danköö
pat


----------



## Surma (4. Sep 2004)

JUHU... ich lag total daneben


----------

