计算矩形内三角形的象限

Calculate quadrant for triangles inside a rectangle

本文关键字:三角形 计算      更新时间:2023-09-26

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

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

然而,我有一个宽度为249px、高度为404px的矩形div,如何获得象限?当上面的代码处于当前状态时,会给出错误的输出,当我选择三角形的特定区域时,例如顶部三角形,它会提醒"底部三角形"。

我会这样做:

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/

您的前两个测试是比较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");
}