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

版权声明:本文采用 知识共享署名4.0 国际许可协议进行许可。 https://blog.csdn.net/youmian6868/article/details/88738047
题目

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

代码实现
public class IsInside {
    //矩形的边平行于坐标轴时
    public boolean isInside(double x1, double y1, double x4, double y4, double x, double y) {
        if (x <= x1) {
            return false;
        }
        if (y >= y1) {
            return false;
        }
        if (x >= x4) {
            return false;
        }
        if (y <= y4) {
            return false;
        }

        return true;
    }

    //矩形的边不平行于坐标轴时,通过坐标变换把矩形转成平行的情况
    public boolean isInside(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, double x, double y) {
        if (y1 == y2) {
            return isInside(x1, y1, x4, y4, x, y);
        }

        double l = Math.abs(y4 - y3);
        double k = Math.abs(x4 - x3);
        double s = Math.sqrt(k * k + l * l);
        double sin = l / s;
        double cos = k / s;
        double x1R = cos * x1 + sin * y1;
        double y1R = -sin * x1 + cos * y1;
        double x4R = cos * x4 + sin * y4;
        double y4R = -sin * x4 + cos *y4;
        double xR = cos * x + sin * y;
        double yR = -sin * x + cos * y;

        return isInside(x1R, y1R, x4R, y4R, xR, yR);
    }
}

猜你喜欢

转载自blog.csdn.net/youmian6868/article/details/88738047