Bonsoir,

je travaille actuellement sur un projet (avec mon groupe de TP) de simulateur de gravité en 3D construit grâce à Graphics2D. Le projet est quasiment terminé mais nous (mon groupe de TP) buttons sur un problème très tenace qui nous empêches d'avancer.
Pour afficher nos éléments en 3D dans un repère 2D on utilise une caméra et une matrice de rotation qui nous permettra d'adapter la représentation 2D en fonction de la position dans l'espace de la caméra (il s'agit pour l'instant seulement d'une rotation autour d'un point fixe au centre de notre repère).


Tout fonctionne pour la représentation de ces éléments selon la rotation de la caméra la ou se situe le problème c'est lorsqu'on souhaite créer une planète en cliquant sur la fenêtre il faut appliquer aux coordonnées de ce clique la matrice de rotation inverse pour trouver les coordonnée souhaité par l'utilisateur de la nouvelle planète.C'est exactement ce que l'on fait, nos calculs sont apparemment corrects (notre chargé de TP nous l'as confirmé) mais la rotation est toujours mauvaise, elle à lieu mais la nouvelle position semble aléatoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
 
	public double[] sommeCoord(double []coord, double [] cam){
		coord[0] += cam[0];
		coord[1] += cam[1];
		coord[2] += cam[2];
		return coord;
	}
	public double[] sommeCoord2(double []coord, double [] cam){
		coord[0] += -(cam[0]);
		coord[1] += -(cam[1]);
		coord[2] += -(cam[2]);
		return coord;
	}
	public double[] produitCoord(double []coordActu, double [][] coordMatrice){
		coordActu[0] = coordActu[0]*coordMatrice[0][0] + coordActu[1]*coordMatrice[1][0] + coordActu[2]*coordMatrice[2][0];
		coordActu[1] = coordActu[0]*coordMatrice[0][1] + coordActu[1]*coordMatrice[1][1] + coordActu[2]*coordMatrice[2][1];
		coordActu[2] = coordActu[0]*coordMatrice[0][2] + coordActu[1]*coordMatrice[1][2] + coordActu[2]*coordMatrice[2][2];
		return coordActu;
	}
	/*public double[] produitZoom(double coord[], double zoom, boolean inverse){
		if(inverse){
			coord[0] *= zoom;
			coord[1] *= zoom;
			coord[2] *= zoom;
		}else{
			coord[0] /= zoom;
			coord[1] /= zoom;
			coord[2] /= zoom;
		}return coord;
	}*/
	public double[] CoordGraph(double coordM[]){
		double []coordMatrice = produitCoord(coordM,this.rotationX);
		coordMatrice = produitCoord(coordMatrice,this.rotationY);
		coordMatrice = sommeCoord(coordMatrice,this.camera);
		//coordMatrice = produitZoom(coordMatrice,this.zoom,true);
		return coordMatrice;
	}
 
	public double[] InvCoordGraph(double coordM[]){
		//double[] coordMatrice2 = produitZoom(coordM,this.zoom,false);
		double[] coordMatrice2 = sommeCoord2(coordM,this.camera);
		coordMatrice2 = produitCoord(coordMatrice2,this.InvRotationY);
		coordMatrice2 = produitCoord(coordMatrice2,this.InvRotationX);
		return coordMatrice2;
	}
Voici la partie du code en question (https://pastebin.com/XbiJgStx tout le code ici).

Avez vous une idée de quel pourrait être la raison de notre problème ?

En vous remerciant d'avance.