En réalité, cette méthode appartient à une classe Trait (x0,x1,y0 et y1 représentent les coordonnées de ce trait). La méthode isSelected sert à tester si l'utilisateur a cliqué sur ce trait ou non.
Merci. T.
Je suis à bout là... :-)
Fais un copier/coller de ta méthode ici (sans rien ommettre).
En réalité, cette méthode appartient à une classe Trait (x0,x1,y0 et y1
représentent les coordonnées de ce trait).
La méthode isSelected sert à tester si l'utilisateur a cliqué sur ce trait
ou non.
En réalité, cette méthode appartient à une classe Trait (x0,x1,y0 et y1 représentent les coordonnées de ce trait). La méthode isSelected sert à tester si l'utilisateur a cliqué sur ce trait ou non.
En réalité, cette méthode appartient à une classe Trait (x0,x1,y0 et y1 représentent les coordonnées de ce trait). La méthode isSelected sert à tester si l'utilisateur a cliqué sur ce trait ou non.
x0, x1, y0 et y1 ne sont pas initialisés dans cette méthode... La source du problème est sans dout à ce niveau. Affichez x0, x1, y0 et y1 en même temps que "a" et vous constaterez sans doute que y0=y1.
En réalité, cette méthode appartient à une classe Trait (x0,x1,y0 et y1
représentent les coordonnées de ce trait).
La méthode isSelected sert à tester si l'utilisateur a cliqué sur ce trait
ou non.
x0, x1, y0 et y1 ne sont pas initialisés dans cette méthode... La source
du problème est sans dout à ce niveau. Affichez x0, x1, y0 et y1 en
même temps que "a" et vous constaterez sans doute que y0=y1.
En réalité, cette méthode appartient à une classe Trait (x0,x1,y0 et y1 représentent les coordonnées de ce trait). La méthode isSelected sert à tester si l'utilisateur a cliqué sur ce trait ou non.
x0, x1, y0 et y1 ne sont pas initialisés dans cette méthode... La source du problème est sans dout à ce niveau. Affichez x0, x1, y0 et y1 en même temps que "a" et vous constaterez sans doute que y0=y1.
-- David Jourand
Sylvain
Toto Le Ouf wrote on 13/05/2006 16:23:
////////////////////////////////////// public boolean isSelected(int x, int y){ if(x0 == x1){ ... } else{ int a,b,yTheo; a = (y1-y0)/(x1-x0); b = y0 - (a*x0); yTheo = a*x + b; System.out.println("a = "+a+"; b = "+b+";yTheo = "+yTheo+";y = "+y); if(yTheo >= y-4 && yTheo >= y+4){ System.out.println("yTheo = "+yTheo+";y = "+y); return true; } return false; } }
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.
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
Sylvain.
Toto Le Ouf wrote on 13/05/2006 16:23:
//////////////////////////////////////
public boolean isSelected(int x, int y){
if(x0 == x1){
...
}
else{
int a,b,yTheo;
a = (y1-y0)/(x1-x0);
b = y0 - (a*x0);
yTheo = a*x + b;
System.out.println("a = "+a+"; b = "+b+";yTheo = "+yTheo+";y = "+y);
if(yTheo >= y-4 && yTheo >= y+4){
System.out.println("yTheo = "+yTheo+";y = "+y);
return true;
}
return false;
}
}
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.
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
////////////////////////////////////// public boolean isSelected(int x, int y){ if(x0 == x1){ ... } else{ int a,b,yTheo; a = (y1-y0)/(x1-x0); b = y0 - (a*x0); yTheo = a*x + b; System.out.println("a = "+a+"; b = "+b+";yTheo = "+yTheo+";y = "+y); if(yTheo >= y-4 && yTheo >= y+4){ System.out.println("yTheo = "+yTheo+";y = "+y); return true; } return false; } }
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.
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
Sylvain.
Toto Le Ouf
x0, x1, y0 et y1 ne sont pas initialisés dans cette méthode... La source du problème est sans dout à ce niveau. Affichez x0, x1, y0 et y1 en même temps que "a" et vous constaterez sans doute que y0=y1.
-- David Jourand
Je ne pense pas que le problème vienne de là :
- J'ai une autre méthode qui affiche les attributs du trait : ///////////////////////////////////////////// public String toString() { return "TRAIT : ("+x0+","+y0+")-("+x1+","+y1+")"; } /////////////////////////////////////////////
- exemple de résultat : ///////////////////////////////////////////// TRAIT : (35,22)-(84,32) a = 0; b = 22; yTheo = 22; y = 76 /////////////////////////////////////////////
Merci. T.
x0, x1, y0 et y1 ne sont pas initialisés dans cette méthode... La source
du problème est sans dout à ce niveau. Affichez x0, x1, y0 et y1 en
même temps que "a" et vous constaterez sans doute que y0=y1.
--
David Jourand
Je ne pense pas que le problème vienne de là :
- J'ai une autre méthode qui affiche les attributs du trait :
/////////////////////////////////////////////
public String toString() {
return "TRAIT : ("+x0+","+y0+")-("+x1+","+y1+")";
}
/////////////////////////////////////////////
- exemple de résultat :
/////////////////////////////////////////////
TRAIT : (35,22)-(84,32)
a = 0; b = 22; yTheo = 22; y = 76
/////////////////////////////////////////////
x0, x1, y0 et y1 ne sont pas initialisés dans cette méthode... La source du problème est sans dout à ce niveau. Affichez x0, x1, y0 et y1 en même temps que "a" et vous constaterez sans doute que y0=y1.
-- David Jourand
Je ne pense pas que le problème vienne de là :
- J'ai une autre méthode qui affiche les attributs du trait : ///////////////////////////////////////////// public String toString() { return "TRAIT : ("+x0+","+y0+")-("+x1+","+y1+")"; } /////////////////////////////////////////////
- exemple de résultat : ///////////////////////////////////////////// TRAIT : (35,22)-(84,32) a = 0; b = 22; yTheo = 22; y = 76 /////////////////////////////////////////////
Merci. T.
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.
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
Sylvain.
Quelle est la formule qui me permettrait de calculer cette distance ?
Sinon, le *double* n'y fait rien.
T.
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.
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
Sylvain.
Quelle est la formule qui me permettrait de calculer cette distance ?
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.
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
Sylvain.
Quelle est la formule qui me permettrait de calculer cette distance ?
Sinon, le *double* n'y fait rien.
T.
Sylvain
Toto Le Ouf wrote on 13/05/2006 16:45:
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
Sinon, le *double* n'y fait rien.
hmmm, rappel: a est la pente ou coeff directeur de ta droite, pour une droite d'angle (par rapport à 0x) compris entre 0 et 45°, a est compris entre 0 et 1 - juste un exemple pour dire qu'il ne sera quasi jamais entier.
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.
Toto Le Ouf wrote on 13/05/2006 16:45:
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
Sinon, le *double* n'y fait rien.
hmmm, rappel: a est la pente ou coeff directeur de ta droite, pour une
droite d'angle (par rapport à 0x) compris entre 0 et 45°, a est compris
entre 0 et 1 - juste un exemple pour dire qu'il ne sera quasi jamais entier.
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
sinon, un bête *double* a = (y1-y0) / (1.0 * x1 - x0); ??
Sinon, le *double* n'y fait rien.
hmmm, rappel: a est la pente ou coeff directeur de ta droite, pour une droite d'angle (par rapport à 0x) compris entre 0 et 45°, a est compris entre 0 et 1 - juste un exemple pour dire qu'il ne sera quasi jamais entier.
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.
Sylvain
Toto Le Ouf wrote on 13/05/2006 16:45:
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.
Toto Le Ouf wrote on 13/05/2006 16:45:
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.
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.