3D Point rotieren lassen

Developer_X

Top Contributor
Hi.
Ich habe mal eine Frage:
Wie lautet die Formel um einen 3D Punkt um einen anderen rotieren zu lassen?

Kann mir jemand bitte die Formeln sagen, für die rotation um die X,Y, und Z Achsen,
mit folgendem inhalt:

  • 3D Punkt Coordinaten
  • RotationsPunkt Coordinaten
  • Rotations Winkel

Danke Developer_X
 

Developer_X

Top Contributor
Ich habe ne Klasse Point3D geschrieben.
Java:
Point3D a = new Point3D(0,0,1-5);

Point3D rot_Point = new Point3D(0,0,0);

double new_x,new_y,new_z;
// rotiere mit den ganzen codes aber nur new_x und new_z sollen verändert werden durch die rotation

a = new Point3D(new_x,new_y,new_z);
Muss das denn unbedingt mit Matrixen passieren?
Ich meine bei der Rotation um die Y Axe zum Beispiel, rotiert im grunde genommen immer nur x und z, also die coordinaten verändern sich. Vorher, beim x-Shooter, wo ihr mir geholfen habt, da hattet ihr auch so ne art formel, die könnte man hier auch einbauen. ich will eine simple rotation.

Kannste mir helfen?

Developer_X
 
S

Spacerat

Gast
Es sollten matritzen sein, weil alles andere iwie keinen Sinn macht. Würdest du dich nicht ständig an den Klassen Point oder Vector festbeissen, hättest du mit Sicherheit schon eine Klasse Matrix fertig. In dieser die Methoden [c]rotate()[/c], [c]rotX()[/c], [c]rotY()[/c], [c]rotZ()[/c] und [c]transform()[/c] o.ä.
 

Developer_X

Top Contributor
Ich hatte da mehr an sowas gedacht:
Java:
	Point3D a = new Point3D(-1,-1,0);
	
	//,... in der Methode math
	
	rot++;
	double pointX=(-1*Math.cos(Math.toRadians(rot)+Math.toRadians(90))); 
	double pointY=(-1*Math.sin(Math.toRadians(rot)+Math.toRadians(90)));
		
	a = new Point3D(pointX,pointY,a.z);

Developer_X
 

Developer_X

Top Contributor
Es sollten matritzen sein, weil alles andere iwie keinen Sinn macht. Würdest du dich nicht ständig an den Klassen Point oder Vector festbeissen, hättest du mit Sicherheit schon eine Klasse Matrix fertig. In dieser die Methoden [c]rotate()[/c], [c]rotX()[/c], [c]rotY()[/c], [c]rotZ()[/c] und [c]transform()[/c] o.ä.

Ich trau mich nicht mit Matrix zu arbeiten, da ich keine Ahnung habe, wie ich das machen soll.
 

Soulfly

Bekanntes Mitglied
Wenn deine Rechnung nimmst und dann einmal Matrizenrechnung dir anlernst, was du solltest, dann wirst du merken, dass das was du da machst nichts anderes als eine manuelle Matrizentransformation für die Rotation um die Z Achse ist. Nichts anderes ist das, wobei deines noch falsch ist.

x = x * cos(rot) - y * sin(rot)
y = x * sin(rot) + y * con(rot)

Guck die Matrizen und Vektoren an sonst wird das nichts!

Greetz,
 
Zuletzt bearbeitet:

Developer_X

Top Contributor
Wie ich sehe, habe ich keine Chance mehr, ohne Vectoren und Matrizen zu arbeiten, mir bleibt wohl nichts anderes mehr übrig, ich muss endlich Trigonometrie und Matrizen Rechnung lernen, dann habe ich keine Probleme mehr.

Danke für eure Hilfen, Developer-X
 

Developer_X

Top Contributor
Wenn ich euch aber noch einmal belästigen dürfte :
Es gibt ja 3 Möglichkeiten zu rotieren.
Könnt ihr mir noch einmal helfen?

Code:
x = x * cos(rot) - y * sin(rot)
y = x * sin(rot) + y * con(rot)
z = z
Ist für mich Z-Achsen-Rotation.

Wie gehen die anderen beiden?
X-Achsen-Rotation
und
Y-Achsen-Rotation

Danke, Developer_X
 

Developer_X

Top Contributor
Sagen wir es mal so, bei mir dreht das Programm durch

Java:
				points[a][b] = new Point3D(-(x/2*1)+a*1 +gr.x,this.y[a][b]+gr.y,-(z/2*1)+b*1 +gr.z);
			
			//	Rotate around the Z-Axis
				x = points[a][b].x * Math.cos(Math.toRadians(gr.rot_z+90)) - points[a][b].y * Math.sin(Math.toRadians(gr.rot_z+90));
				y = points[a][b].x * Math.sin(Math.toRadians(gr.rot_z+90)) + points[a][b].y * Math.cos(Math.toRadians(gr.rot_z+90));
				z = points[a][b].z;
				
				points[a][b] = new Point3D(x,y,z);
			
			//	Rotate around the Y-Axis
				x = points[a][b].x * Math.cos(Math.toRadians(gr.rot_y+90)) - points[a][b].z * Math.sin(Math.toRadians(gr.rot_y+90));
				y = points[a][b].y;
				z = points[a][b].x * Math.sin(Math.toRadians(gr.rot_y+90)) + points[a][b].z * Math.cos(Math.toRadians(gr.rot_y+90));

				points[a][b] = new Point3D(x,y,z);
				
			//	Rotate around the X-Axis
				x = points[a][b].x;
				y = points[a][b].x * Math.sin(Math.toRadians(gr.rot_x+90)) + points[a][b].z * Math.cos(Math.toRadians(gr.rot_x+90));
				z = points[a][b].x * Math.cos(Math.toRadians(gr.rot_x+90)) - points[a][b].z * Math.sin(Math.toRadians(gr.rot_x+90));

				points[a][b] = new Point3D(x,y,z);

Man erkennt so gut wie nichts mehr.
Das ganze Rotiert nicht so wie es soll,

Developer_X
 

Marco13

Top Contributor
*seufz*...

Dass man sowas eher als
Code:
double angle = Math.toRadians(gr.rot_z+90);
double ca = Math.cos(angle);
double sa = Math.sin(angle);
x = points[a][b].x * ca - points[a][b].y * sa;
y = points[a][b].x * sa + points[a][b].y * ca;
schreiben sollte... :noe: und so eine Zeile wie
Code:
points[a][b] = new Point3D(-(x/2*1)+a*1 +gr.x,this.y[a][b]+gr.y,-(z/2*1)+b*1 +gr.z);
will ich mal nicht kommentieren.

Mach' dir einen Punkt, von dem du weißt, wo er liegt. (1,0,0) wäre da ein Kandidat. Drehe den dann um 45° um die z-Achse (und NUR um die). Und schau dann, ob das Ergebnis stimmt.
 

Developer_X

Top Contributor
Ok, ich habs jetzt rausbekommen, die Lösung lautet:
Java:
				points[a][b] = new Point3D(-(x/2*1)+a*1 +gr.x,this.y[a][b]+gr.y,-(z/2*1)+b*1 +gr.z);
			
			//	Rotate around Y-Axis
				double angle = Math.toRadians(gr.rot_y);
				double ca = Math.cos(angle);
				double sa = Math.sin(angle);
				double x = points[a][b].x * ca - points[a][b].z * sa;
				double z = points[a][b].x * sa + points[a][b].z * ca;
				points[a][b] = new Point3D(x,points[a][b].y,z);
				
			//	Rotate around Z-Axis
				angle = Math.toRadians(gr.rot_z);
				ca = Math.cos(angle);
				sa = Math.sin(angle);
				x = points[a][b].x * ca - points[a][b].y * sa;
				double y = points[a][b].x * sa + points[a][b].y * ca;
				points[a][b] = new Point3D(x,y,points[a][b].z);
				
			//	Rotate around X-Axis
				angle = Math.toRadians(gr.rot_x);
				ca = Math.cos(angle);
				sa = Math.sin(angle);
				y = points[a][b].y * ca - points[a][b].z * sa;
				z = points[a][b].y * sa + points[a][b].z * ca;
				points[a][b] = new Point3D(points[a][b].x,y,z);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Programmierung eines 2.5D Point&Click Adventures ohne Spieleengine machbar? Spiele- und Multimedia-Programmierung 14
M Point & Click Thread Probleme Spiele- und Multimedia-Programmierung 20
Developer_X Java3D Point Sound Spiele- und Multimedia-Programmierung 71
B MarioKart Map rotieren? Spiele- und Multimedia-Programmierung 6
D 2D Pixelbild rotieren Spiele- und Multimedia-Programmierung 3
TulPe Würfel per Mausklick rotieren Spiele- und Multimedia-Programmierung 10
Creylon [LWJGL] 2D Sprite Rotieren/Drehen Spiele- und Multimedia-Programmierung 6
B j3d mehr als ein Objekt rotieren Spiele- und Multimedia-Programmierung 18
G Rotieren eines Objekts (2D) Spiele- und Multimedia-Programmierung 8
M [Java3D] Rotieren der Scene NICHT des POV Spiele- und Multimedia-Programmierung 4
J Rotieren eines 2D Images endet in Java heap space Error Spiele- und Multimedia-Programmierung 15
W Affine Transformation, Rotieren eines Objekts Spiele- und Multimedia-Programmierung 2
S Schiff in Richtung der Maus rotieren - Problem :/ Spiele- und Multimedia-Programmierung 5
Tr3kk3r Kamera nur um x und y, nicht um z achse rotieren Spiele- und Multimedia-Programmierung 2
D Dreieck um den Mittelpunkt rotieren lassen Spiele- und Multimedia-Programmierung 9
P Rechteck rotieren und frontal anzeigen Spiele- und Multimedia-Programmierung 2
A Objekte nacheinander zeitgesteuert rotieren lassen Spiele- und Multimedia-Programmierung 4
B Gegner schiessen lassen Spiele- und Multimedia-Programmierung 6
I Wie kann ich die Kreise nach jeweils 1s spawnen lassen? Processing Spiele- und Multimedia-Programmierung 1
R Memory - Nicht alle Button lassen sich aktivieren? Spiele- und Multimedia-Programmierung 1
D JFrames in For Schleife öffnen lassen Spiele- und Multimedia-Programmierung 2
J CMD Output aktualisieren lassen statt neu erstellen? Spiele- und Multimedia-Programmierung 1
H Recheckte nacheinandergenerieren lassen (Applet) Spiele- und Multimedia-Programmierung 2
E Zwei Threads miteinander laufen lassen Spiele- und Multimedia-Programmierung 6
J Spielfiguren laufen lassen auf einer html Tabelle mit Hilfe von Servlets Spiele- und Multimedia-Programmierung 2
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
B Zufalls Insel generieren lassen Spiele- und Multimedia-Programmierung 11
J Bestimmte Pixel transparent erscheinen lassen Spiele- und Multimedia-Programmierung 5
Fl4sh1 Datum und Uhrzeit von einem Ereignis ausgeben lassen Spiele- und Multimedia-Programmierung 3
F Screenshot Programm nach Exception weiterlaufen lassen? Spiele- und Multimedia-Programmierung 9
M MJPEG Stream aufnehmen (Speichern und von VirtualDub weiterverarbeiten lassen). Spiele- und Multimedia-Programmierung 2
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
F Programm mit Java3D unter Linux laufen lassen Spiele- und Multimedia-Programmierung 3
F LWJGL Smoother animieren lassen (wie bei JOGL = Animator) Spiele- und Multimedia-Programmierung 3
aze Java3D:Farbige Flächen verschwinden lassen(Transparenz- oder Colorinterpolator?)) Spiele- und Multimedia-Programmierung 5
J ping pong ball abprallen lassen Spiele- und Multimedia-Programmierung 12
StrikeTom Auto in bestimmte Richtung fahren lassen Spiele- und Multimedia-Programmierung 37
A Halbkreise zeichnen lassen? Spiele- und Multimedia-Programmierung 2
F Schleife warten lassen Spiele- und Multimedia-Programmierung 8
P Ball mit schwerkraft hüpfen lassen Spiele- und Multimedia-Programmierung 9
K Kanten anzeigen lassen in einem Shape3D-Objekt Spiele- und Multimedia-Programmierung 4
A ein Auto seinen Weg folgen lassen Spiele- und Multimedia-Programmierung 3
W Computer herunterfahren lassen Spiele- und Multimedia-Programmierung 11
B Buttontexte langsam nacheinander erscheinen lassen Spiele- und Multimedia-Programmierung 3
P NPC zufällig laufen lassen, aber wie? Spiele- und Multimedia-Programmierung 2
V Objekt per Tastendruck anzeigen/verschwinden lassen? Spiele- und Multimedia-Programmierung 4
R Figur springen lassen Spiele- und Multimedia-Programmierung 10

Ähnliche Java Themen

Neue Themen


Oben