MANIPULATION DE POINT DANS L'ESPACE

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
- - Dernière réponse : gcu
Messages postés
7
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
27 septembre 2004
- 27 mai 2004 à 13:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23173-manipulation-de-point-dans-l-espace

cs_coq
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75 -
bon j'avoue que je n'ai pas compris grand chose au code mais j'ai peut etre une idée pour ton decalage :
tu cast regulierement (dans tes methodes de rotation) des resultats qui sont logiquement des double (Cos, Sin) en long et tu conserve ce long
donc a chaque fois tu introduis un decalage non ?
pourquoi ne pas plutot tout conserver en double et ne faire le cast qu'au moment où c'est vraiment necessaire ?
pit00
Messages postés
1
Date d'inscription
lundi 14 juillet 2003
Statut
Membre
Dernière intervention
27 mai 2004
-
Il ne faut pas manipuler des int pour tes coordonnées de point ...
ni des long .. mais des doubles (virgule) sinon il te fait un arrondi de ta valeur a chaque calcul de la position de ton point d'ou le décalage
dans point.cs :
private double x;
private double y;
private double z;
private double var = 10000000000000;
public point(int x,int y, int z)
{
this.x = (double)x;
this.y = (double)y;
this.z = (double)z;
}
public void setX(double x)
{
this.x = (double)x;
}
(idem pour Y Z)
public void rotationX(int angle)
{
double angleRadian = (Math.PI / 180) * angle;
double tempy = (double)(Math.Cos(angleRadian) * (this.y * this.var) + (-Math.Sin(angleRadian))* (this.z* this.var));
double tempz = (double)(Math.Sin(angleRadian) * (this.y * this.var) + Math.Cos(angleRadian)* (this.z* this.var));
this.y = tempy / this.var;
this.z = tempz/ this.var;
}
(idem pour rotation Y et rotation Z)
gcu
Messages postés
7
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
27 septembre 2004
-
Une autre idée ... pour ton décalage :
Tu devrais remplacer tout tes

double angleRadian = (Math.PI / 180) * angle;

par des

double angleRadian = (Math.PI * angle) / 180;

Les calculs en virgule flottantes sont sensibles, malgré le nombre de chiffres après la virgule.