cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
26 mai 2004 à 22:08
gcu
Messages postés7Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention27 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.
gcu
Messages postés7Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention27 septembre 2004 27 mai 2004 à 13:18
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.
pit00
Messages postés1Date d'inscriptionlundi 14 juillet 2003StatutMembreDernière intervention27 mai 2004 27 mai 2004 à 10:08
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)
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 26 mai 2004 à 22:08
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 ?
27 mai 2004 à 13:18
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.
27 mai 2004 à 10:08
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)
26 mai 2004 à 22:08
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 ?