2012-08-29 57 views
0

我有以下的方法,其計算在一個正方形具有相等的寬度和高度由四個三角形劃分一個象限:計算象限爲一個矩形內部的三角形

function getQuadtrant(x, y, width, height){ 
    if(y < width/2 && x < width-y && x > y) { 

    alert('top triangle'); 

    } 

    if(y > width/2 && x > width-y && x < y) { 

    alert('bottom triangle'); 

    } 

    if(x < height/2 && x < width-y && x < y) { 

    alert('left triangle'); 

    } 


    if(x > height/2 && x > width-y && x > y) { 

    alert('right triangle'); 

    } 
} 

然而,我有一個div是矩形的,具有寬度爲249px,高度爲404px,如何獲得象限?在上面的代碼中,它的當前狀態給出了一個錯誤的輸出,當我選擇一個三角形的特定區域時,例如頂部三角形,它會提醒「底部三角形」。

+0

「隨着它上面的代碼的當前狀態給出一個錯誤的輸出。」 ---我們需要猜測它? – zerkms

+0

@zerkms我的歉意,我已經更新了這個問題。 –

回答

3

我會做,以這種方式:

function getQ(x, y, w, h) { 
    var quadrants = [ 
     ['left', 'top'], 
     ['bottom', 'right'] 
    ]; 

    if (y > h/w * x) { 
     quadrants = quadrants[0]; 
    } else { 
     quadrants = quadrants[1]; 
    } 

    return (y < -h/w * x + h) ? quadrants[0] : quadrants[1]; 
} 


console.log(getQ(10, 20, 20, 20));​ 

該解決方案是相當瑣碎和基於對角線方程。如果y高於主對角線 - 那麼它可以是lefttopquadrants[0])。如果y低於次對角線 - 它是left,否則它是top。底部相同。

http://jsfiddle.net/zerkms/aCAfw/

+0

真的很感謝迴應,這個作品也是!謝謝。 –

+0

@Imran Azad:從我的角度來看,這個解決方案是**更清晰 – zerkms

+0

是的你是對的,我必須承認,閱讀和遵循要容易得多。 –

2

您的前兩項測試是比較ywidth/2,而我認爲它應該與height/2相比。

編輯:下面是全部矩形,而不是僅僅廣場工作的一些修改代碼:

function getQuadrant(x,y,width,height) { 
    var l = {x:x-width/2,y:y-height/2}, // "local" coords - origin at centre 
     g = l.x/width*height; // "gradient" - position on diagonal 
    if(l.y < -g && l.y < g) alert("Top"); 
    else if(l.y < -g && l.y >= g) alert("Right"); 
    else if(l.y >= -g && l.y >= g) alert("Bottom"); 
    else if(l.y >= -g && l.y < g) alert("Left"); 
    else alert("Tell Kolink he messed up"); 
} 
+0

感謝您的迴應,這幾乎奏效!問題是現在三角形頂部靠近頂點的部分根本沒有提醒任何東西,而它應該提醒'頂部三角形'。 –

+0

我懷疑'width-y'應該是'height-y'。不過那說你的代碼需要修改,因爲它對非方形元素失敗了。 –

+0

你是一個拯救生命的人!真的很感謝! –