OVH Cloud OVH Cloud

Division qui renvoie 0

13 réponses
Avatar
Toto Le Ouf
Bonjour à tous,

Mon problème :

//////////////////////////////////////////////////////////////////
int a,x0,x0,y0,y1;
.......
//initiatlisation de x0,x0,y0,y1
......
a = (y1-y0)/(x1-x0);
System.out.println("a = "+a);
......
//////////////////////////////////////////////////////////////////

Cela affiche "a = 0" à chaque fois.

Une idée ??

T.

3 réponses

1 2
Avatar
Toto Le Ouf
donc as-tu seulement changé la définition de a (de int en double) ou
changé ta division entière pour en faire une division flottante ?

à ce qu'il me semble:

TRAIT : (35,22)-(84,32)
donne a = 10 / 49 = 0
mais a = 10.0 / 49.0 = 0.204

Sylvain.



Effectivement, j'ai fait ceci :

a = ((double)(this.y1-this.y0))/((double)(this.x1-this.x0));

et désormais, a est bien différent de 0.

Merci encore.
T.

Avatar
Toto Le Ouf
tu devrais directement calculer la distance du point (x,y) à ta droite
(x0,y0;x1,y1) plutot que de calculer l'equation de ta droite (fixe) à
chaque test.


Quelle est la formule qui me permettrait de calculer cette distance ?


pour une droite d'équation ax + by + c = 0, la distance d'un point
M(x,y) à cette droite est:

d = abs( (ax + by + c) / sqrt(a² + b²))

tu travailles ici avec une équation réduite (y = a'x + b') (ie a=a';
b=-1; c=b'), donc tu calcules une fois pour toute (sauf déplacement)
l'équation de ta droite:

double a = (double)(y1 - y0) / (double)(x1 - x1);
double b = y0 - a * x0;
double D = Math.sqrt(a * a + 1);

pour un point M(x,y), tu calcules

d = Math.abs((a * x - y + b) / D);

tes coords étant, j'imagine, des pixels, la distance d est le nombre de
pixels à cette droite, donc un test (d <= 4) doit suffire.

Sylvain.


Tout fonctionne ou presque (d'autres problèmes mais différents)...
Merci encore.
A bientôt.
T.



Avatar
Lambda
"Toto Le Ouf" wrote in message
news:44660c10$0$20181$

Tout fonctionne ou presque (d'autres problèmes mais différents)...
Merci encore.
A bientôt.
T.



Est-ce que les quelques problemes restants ne viendraient pas de la ligne
d'apres dans ton code ?

"Toto Le Ouf" wrote in message
news:4465ebf9$0$21282$
if(yTheo >= y-4 && yTheo >= y+4){



J'ai un peu peur que la, la premiere inegalite ne serve pas a grand chose...

1 2