3 votes

Fonction javascript pour déterminer si un point est compris entre un rectangle

J'ai une fonction Javascript qui ne renvoie pas le résultat attendu. J'essaie de déterminer si un point x,y existe dans un rectangle en me basant sur 2 autres points x,y. Dans mon code, x et y sont le point original en question. z1 et z2 sont les coordonnées supérieures gauches du rectangle et z3 et z4 sont les coordonnées inférieures droites.

function isInside(x,y,z1,z2,z3,z4){
x1 = Math.min(z1, z3);
x2 = Math.max(z1, z3);
y1 = Math.min(z2, z4);
y2 = Math.max(z2, z4);
if ((x1 <= x <= x2) && (y1 <= y <= y2)) {
 console.log (x1 + "," + x + "," + x2); 
 console.log (y1 + "," + y + "," + y2);
 return true;
} else {
 return false;
};
};

Si j'évalue isInside(110,175,50,50,100,100), j'obtiens vrai. C'est inattendu car le point 110,175 n'existe pas dans un rectangle de 50,50 et 100,100. Toute aide serait appréciée.

5voto

Mark Rushakoff Points 97350

(x1 <= x <= x2) ne fait pas ce que vous voulez qu'il fasse en Javascript : vous devez utiliser x1 <= x && x <= x2 .

Si vous introduisez des chiffres réels pour ces variables et que vous essayez dans la console de Chrome, vous pouvez constater que l'ensemble de la déclaration est toujours évalué à true :

1 <= 3 <= 5
true
9 <= 3 <= 5
true

3voto

Aamir Mahmood Points 1303

Voici la réponse

function isInside(x, y, z1, z2, z3, z4) {
    x1 = Math.min(z1, z3);
    x2 = Math.max(z1, z3);
    y1 = Math.min(z2, z4);
    y2 = Math.max(z2, z4);
    if ((x1 <= x ) && ( x <= x2) && (y1 <= y) && (y <= y2)) {
        console.log(x1 + "," + x + "," + x2);
        console.log(y1 + "," + y + "," + y2);
        return true;
    } else {
        return false;
    };
};

si vous devez vérifier si x est entre a y b vous devez parler à l'ordinateur comme,

si x est plus grand que a et x est plus petit que b, alors le résultat sera correct.

if(x >= a && x <= b){
   // true
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X