您的位置:首页 > 其它

蓝桥杯BASIC-18(矩形面积交)

2016-12-15 23:01 302 查看
/*问题描述

  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入格式

  输入仅包含两行,每行描述一个矩形。

  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

  输出仅包含一个实数,为交的面积,保留到小数后两位。

样例输入

1 1 3 3

2 2 4 4

样例输出

1.00

*/

public class Demo05 {

public static void main(String[] args) {

Rect r1 = new Rect(new Point(1,1), new Point(3,3));

Rect r2 = new Rect(new Point(1,1), new Point(5,5));

r1.getS(r2);

}

public static class Point{

private int x;

private int y;

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public Point() { }

public Point(int x, int y) {

this.x = x;

this.y = y;

}

}

public static class Rect extends Point{

Point p1;

Point p2;

public Point getP1() {

return p1;

}

public void setP1(Point p1) {

this.p1 = p1;

}

public Point getP2() {

return p2;

}

public void setP2(Point p2) {

this.p2 = p2;

}

public Rect(Point p1, Point p2) {

this.p1 = p1;

this.p2 = p2;

}

public void getS(/*this*/ Rect r1){

//先找出每个矩形的最小x,然后再取两个最小x值中的较大值

int minX = Math.max(Math.min(this.getP1().getX(), this.getP2().getX()),

Math.min(r1.getP1().getX(), r1.getP2().getX()));

//先找出每个矩形的最小y,然后再取两个最小y值中的较大值

int minY = Math.max(Math.min(this.getP1().getY(), this.getP2().getY()),

Math.min(r1.getP1().getY(), r1.getP2().getY()));

//先找出每个矩形的最大x,然后再取两个最大x值中的较小值

int maxX = Math.min(Math.max(this.getP1().getX(), this.getP2().getX()),

Math.max(r1.getP1().getX(), r1.getP2().getX()));

//先找出每个矩形的最大y,然后再取两个最大y值中的较小值

int maxY = Math.min(Math.max(this.getP1().getY(), this.getP2().getY()),

Math.max(r1.getP1().getY(), r1.getP2().getY()));

if (minX < maxX && minY < maxY){

System.out.println(Math.round((maxX - minX) * (maxY - minY)*100)/100.00);

}else{

System.out.println(0.00);

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: