我有这个矩阵
/// as if the create a rectangle
int [][] loc = {
{5, 15},//(x1, y1)
{5, 30}, // (x1, y2)
{20, 15},// (x2, y1)
{20, 30}, // (x2, y2)
}
// this are the point that i want to check if they are in the rectangular range or not
int [] [] point = {
{6, 16}, //(x, y)
{3, 17}, //(x, y)
}
我想要一种方法,可以采取点,并通过使用搜索是否在loc范围内
x1<x<x2
和y1<y<y2
答案 0 :(得分:14)
点(x,y)在矩形(x1,y1) - (x2,y2)内,如果
(x1&lt; = x&lt; = x2)和(y1&lt; = y&lt; = y2)
您的代码应如下所示(这实际上是C代码,但JavaScript不应该有太大差异):
x1 = loc[0][0];
x2 = loc[2][0];
y1 = loc[0][1];
y2 = loc[2][1];
for (int i = 0; i < num_points; i++) {
if ((x1 <= point[i][0]) && (point[i][0] <= x2) &&
(y1 <= point[i][1]) && (point[i][1] <= y2)) {
// This point is inside the rectangle - insert code here
} else {
// This point is not inside the rectangle - insert code here
}
}
请注意,这仅适用于(x1&lt; = x2)和(y1&lt; = y2),因此您可能会确保使用此代替上面的前四行:
x1 = Math.Min(loc[0][0], loc[2][0]);
x2 = Math.Max(loc[0][0], loc[2][0]);
y1 = Math.Min(loc[0][1], loc[2][1]);
y2 = Math.Max(loc[0][1], loc[2][1]);
答案 1 :(得分:6)
虽然这个问题已被广泛回答,但我想分享我的代码片段,因为它看起来更直观,看起来更像我在高中时的数学。以防万一由于家庭工作人们看起来这个问题:)
function between(min, p, max){
result = false;
if ( min < max ){
if ( p > min && p < max ){
result = true;
}
}
if ( min > max ){
if ( p > max && p < min){
result = true
}
}
if ( p == min || p == max ){
result = true;
}
return result;
}
function point_in_rectagnle( x, y, left, top, right, bottom){
result = false;
if ( between(left,x,right) && between(top,y,bottom ) ){
result = true;
}
return result;
}
答案 2 :(得分:4)
问题中的代码是Java或C或其他一些使用{}定义数组文字的语言,但由于标记是Javascript并且这显示在Google上用于Javascript,这是一种合理的方法来进行点矩形交集在JS中。
function pointRectangleIntersection(p, r) {
return p.x > r.x1 && p.x < r.x2 && p.y > r.y1 && p.y < r.y2;
}
var point = {x: 1, y: 2};
var rectangle = {x1: 0, x2: 10, y1: 1, y2: 7};
pointRectangleIntersection(point, rectangle);