您的位置:首页 > 其它

判断一个点是否在矩形内部

2018-01-25 10:57 148 查看
【题目】

在二维坐标系中,所有的值都是double类型,那么一个矩形可以由4个点来表示,(x1,y1)为最左的点,(x2,y2)为最上的点,(x3,y3)为最下的点,(x4,y4)为最右的点。

给定四个点代表的矩形,再给定一个点(x,y),判断该点是否在矩形中。

【代码】

//判断一个点是否在矩形内部
public static boolean isInside(double x1,double y1,double x4,double y4,double x,double y){
//默认:1点在左上,4点在右下
if(x<=x1){//在矩形左侧
return false;
}
if(x>=x4){//在矩形右侧
return false;
}
if(y>=y1){//在矩形上侧
return false;
}
if(y<=y4){//在矩形下侧
return false;
}
return true;
}

public static boolean isInside(double x1,double y1,double x4,double y4,
double x2,double y2,double x3,double y3,double x,double y){
//矩形边平行于x轴或y轴
if(y1==y2){
return isInside(x1,y1,x4,y4,x,y);
}
//坐标变换,把矩形转成平行,所有点跟着动
double a=Math.abs(y4-y3);
double b=Math.abs(x4-x3);
double c=Math.sqrt(a*a+b*b);
double sin=a/c;
double cos=b/c;

double x11=cos*x1+sin*y1;
double y11=-x1*sin+y1*cos;
double x44=cos*x4+sin*y4;
double y44=-x4*sin+y4*cos;
double xx=cos*x+sin*y;
double yy=-x*sin+y*cos;
//旋转完成,又变成上面一种平行的情况
return isInside(x11,y11,x44,y44,xx,yy);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: