MANIPULATION DE POINT DANS L'ESPACE

Signaler
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Messages postés
7
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
27 septembre 2004
-
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

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.
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)
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
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 ?