题目描述
给出3组点坐标(x,y,w, h),-1000<x,y<1000,w,h为正整数。
·(x,y, w, h)表示平面直角坐标系中的一个矩形:
·x,y为矩形左上角坐标点,w,h向右w,向下h
·(x,y, w, h)表示x轴(x,x+w)和y轴(y, y-h)围成的矩形区域;·(0,0,2,2)表示 x轴(0,2)和y 轴(0,-2)围成的矩形区域,
·(3,5,4,6)表示x轴(3,7)和y轴(5,-1)围成的矩形区域;
求3组坐标构成的矩形区域重合部分的面积。
输入描述
3行输入分别为3个矩形的位置,分别代表“左上角x坐标”,“左上角y坐标”,“矩形宽”,“矩形高”-1000 <= x,y< 1000
输出描述
输出3个矩形相交的面积,不相交的输出0。
示例1
输入
1 6 4 4
3 5 3 4
0 3 7 3
输出
2
题解
求前两个矩形相交的矩形
然后与第三个矩形求相交的矩形
源码 Java
public class IntersectArea {static Input input;static {input = new Input("1 6 4 4\n" +"3 5 3 4\n" +"0 3 7 3");}public static void main(String[] args) {Rectangle r1 = new Rectangle(input.nextLine().split(" "));Rectangle r2 = new Rectangle(input.nextLine().split(" "));Rectangle r3 = new Rectangle(input.nextLine().split(" "));int x1 = Math.max(r1.x1, r2.x1);int y1 = Math.min(r1.y1, r2.y1);int x2 = Math.min(r1.x2, r2.x2);int y2 = Math.max(r1.y2, r2.y2);if (x1 < x2 && y1 > y2) {int intersectX1 = Math.max(x1, r3.x1);int intersectY1 = Math.min(y1, r3.y1);int intersectX2 = Math.min(x2, r3.x2);int intersectY2 = Math.max(y2, r3.y2);if (intersectX1 < intersectX2 && intersectY1 > intersectY2) {System.out.println((intersectX2 - intersectX1) * (intersectY1 - intersectY2));} else {System.out.println("0");}} else {System.out.println(0);}}static class Rectangle{public int x1;public int y1;public int x2;public int y2;public Rectangle(String[] lines) {this.x1 = Integer.parseInt(lines[0]);this.y1 = Integer.parseInt(lines[1]);this.x2 = x1 + Integer.parseInt(lines[2]);this.y2 = y1 - Integer.parseInt(lines[3]);}}
}