版权声明:本文采用 知识共享署名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);
}
}