我有以下方法计算宽度和高度相等的正方形的象限除以四个三角形:
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,我如何获得象限?使用上面的代码,它的当前状态给出了错误的输出,当我选择三角形的特定区域时,例如顶部三角形,它会警告“底部三角形”。
答案 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
位于主对角线之上 - 那么它可以是left
或top
(quadrants[0]
)。如果y
低于次要对角线,则为left
,否则为top
。底部也一样。
答案 1 :(得分:2)
您的前两个测试是将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");
}