计算矩形内三角形的象限

时间:2012-08-29 23:56:41

标签: javascript

我有以下方法计算宽度和高度相等的正方形的象限除以四个三角形:

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

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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");
}