MANIPULATION DE POINT DANS L'ESPACE

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 26 mai 2004 à 22:08
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

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
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és 1 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 27 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és 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
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 ?