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,如何获得象限?上面的代码在当前状态下会给出错误的输出,当我选择三角形的特定区域时,例如顶部三角形,它会警告“底部三角形”。

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主对角线上方 - 那么它是lefttop( quadrants[0])。如果y低于次对角线 - 它是left,否则是top。底部也一样。

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

于 2012-08-30T00:13:34.153 回答
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");
}
于 2012-08-29T23:59:05.233 回答