Manipulation de point dans l'espace

Soyez le premier à donner votre avis sur cette source.

Vue 9 490 fois - Téléchargée 593 fois

Description

Voici un petit programme qui permet de créer des points (x,y,z) et de les afficher. On peut également faire des rotations de l'ensemble des points sur un des trois axes (x,y,z).
Malheureusement, comme vous pouvez le voir sur la capture, il y a un manque de précision avec les rotations.....si quelqu'un pouvait me venir en aide ce serait cool s
Merci d'avance.

Mise à jour: j'ai fais la mise à jour de mon code grâce aux commentaires laissés. Je remercie d'ailleurs les auteurs de ces messages.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.