2013-02-22 257 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 
} 
相關問題