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

【题目】

在二维坐标系中,所有的值都是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); 
    }

你可能感兴趣的:(每日一练)