Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算矩形内三角形的象限_Javascript - Fatal编程技术网

Javascript 计算矩形内三角形的象限

Javascript 计算矩形内三角形的象限,javascript,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 &&

我使用以下方法计算正方形中的一个象限,该象限的宽度和高度相等,除以四个三角形:

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

    }
}
函数getQuadtrant(x,y,宽度,高度){ 如果(yy){ 警报(“顶部三角形”); } 如果(y>width/2&&x>width-y&&xheight/2&&x>width-y&&x>y){ 警报(“直角三角形”); } }
然而,我有一个矩形的div,宽249px,高404px,如何得到象限?上述代码在其当前状态下给出了错误的输出,当我选择三角形的特定区域(例如顶部三角形)时,它会提醒“底部三角形”。

您的前两个测试将
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");
}
函数获取象限(x、y、宽度、高度){
var l={x:x-width/2,y:y-height/2},//“local”坐标系-中心原点
g=l.x/宽度*高度;/“梯度”-对角线上的位置
如果(l.y<-g&&l.y=g)警报(“右”);
如果(l.y>=-g&&l.y>=g)警报(“底部”);
如果(l.y>=-g&&l.y
您的前两个测试是将
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");
}
函数获取象限(x、y、宽度、高度){
var l={x:x-width/2,y:y-height/2},//“local”坐标系-中心原点
g=l.x/宽度*高度;/“梯度”-对角线上的位置
如果(l.y<-g&&l.y=g)警报(“右”);
如果(l.y>=-g&&l.y>=g)警报(“底部”);
如果(l.y>=-g&&l.y
我会这样做:

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));​
函数getQ(x,y,w,h){ 变量象限=[ [‘左’、‘上’], [‘底部’、‘右侧’] ]; 如果(y>h/w*x){ 象限=象限[0]; }否则{ 象限=象限[1]; } 返回(y<-h/w*x+h)?象限[0]:象限[1]; } log(getQ(10,20,20,20));​ 这个解决方案非常简单,基于对角线方程。如果
y
位于主对角线上方,则它要么位于
左侧
要么位于
顶部
象限[0]
)。如果
y
位于次对角线下方,则为
左侧
,否则为
顶部
。底部也一样


我会这样做:

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));​
函数getQ(x,y,w,h){ 变量象限=[ [‘左’、‘上’], [‘底部’、‘右侧’] ]; 如果(y>h/w*x){ 象限=象限[0]; }否则{ 象限=象限[1]; } 返回(y<-h/w*x+h)?象限[0]:象限[1]; } log(getQ(10,20,20,20));​ 这个解决方案非常简单,基于对角线方程。如果
y
位于主对角线上方,则它要么位于
左侧
要么位于
顶部
象限[0]
)。如果
y
位于次对角线下方,则为
左侧
,否则为
顶部
。底部也一样


“上述代码处于当前状态时,输出错误。”---我们需要猜测吗?@zerkms抱歉,我已更新了问题。“上述代码处于当前状态时,输出错误。”---我们需要猜测吗?@zerkms抱歉,我已更新了问题。感谢您的回复,这几乎奏效了!问题是,现在靠近vertix的三角形的顶部根本不会发出任何警报,而应该发出“顶部三角形”警报。我怀疑
width-y
应该是
height-y
。不过,这说明您的代码需要修改,因为它对非方形元素无效。您是一个救生员!非常感谢!感谢您的回复,这几乎奏效了!问题是,现在靠近vertix的三角形的顶部根本不会发出任何警报,而应该发出“顶部三角形”警报。我怀疑
width-y
应该是
height-y
。不过,这说明您的代码需要修改,因为它对非方形元素无效。您是一个救生员!非常感谢@伊姆兰·阿扎德:从我的角度来看,这个解决方案非常清晰。你是对的,我必须承认它更容易阅读和遵循。@伊姆兰·阿扎德:从我的角度来看,这个解决方案非常清晰。你是对的,我必须承认它更容易阅读和遵循。