0

幅と高さが4つの三角形で割った正方形の象限を計算する次の方法があります。

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');

    }
}

しかし、幅 249 ピクセル、高さ 404 ピクセルの長方形の div があります。象限を取得するにはどうすればよいですか? 上記のコードを現在の状態にすると、誤った出力が得られます。たとえば、上の三角形などの三角形の特定の領域を選択すると、「下の三角形」が警告されます。

4

2 に答える 2

5

私はこのようにします:

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が主対角線より上にある場合は、leftまたはtop( quadrants[0]) です。yが二次対角線より下にある場合はleft、それ以外の場合はtopです。下の部分も同様。

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

于 2012-08-30T00:13:34.153 に答える
2

最初の 2 つのテストは と比較yしていますが、代わりwidth/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");
}
于 2012-08-29T23:59:05.233 に答える