2013-02-22 255 views
2

我有一个Javascript函数没有返回我期望的结果。我试图确定x,y点是否存在于基于2个其他x,y点的矩形内。在我的代码中,x和y是有问题的原始点。 z1和z2是矩形的左上角坐标,z3和z4是右下角坐标。Javascript函数确定一个点是否在矩形之间

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; 
}; 
}; 

如果我评估isInside(110,175,50,50,100,100),我说的是真的。这是意外的,因为点110,175不存在于50,50和100,100的矩形内。任何帮助,将不胜感激。

回答

5

(x1 <= x <= x2)不能做你想让它在Javascript中做的事情:你必须使用x1 <= x && x <= x2

如果您在实际数字插入这些变量,并尝试了这一点,在Chrome的控制台,可以看到整个语句总是判断为真:

1 <= 3 <= 5 
true 
9 <= 3 <= 5 
true 
+0

正确。第一条语句不以正确的顺序执行。 '(50 <= 117 <= 100)'将评估为“(true <= 100)” - 它返回true。 – MildlySerious 2013-02-22 07:44:12

+0

我试过如果((x1 <= x && x <= x2)&&(y1 <= y && y <= y2)){取代了相同的结果。 – SystemX17 2013-02-22 07:47:54

+0

(试过,因为我认为这是你说的,而不是我发布之前) – SystemX17 2013-02-22 07:48:58

2

这里就是答案

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; 
    }; 
}; 

,如果你需要检查,如果xab之间,你必须跟电脑一样,

如果x大于a且x小于b,则它会给出适当的结果

if(x >= a && x <= b){ 
    // true 
} 
相关问题