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,宽度,高度){
如果(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
。不过,这说明您的代码需要修改,因为它对非方形元素无效。您是一个救生员!非常感谢@伊姆兰·阿扎德:从我的角度来看,这个解决方案非常清晰。你是对的,我必须承认它更容易阅读和遵循。@伊姆兰·阿扎德:从我的角度来看,这个解决方案非常清晰。你是对的,我必须承认它更容易阅读和遵循。