在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
Rectangle Area
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2 输出: 45
说明: 假设矩形面积不会超出 int 的范围。
我写的可能较为繁琐,有非常简单的方法求的交汇矩形的面积,这里我只贴出我自己的笨方法
public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int S1 = (C - A) * (D - B);
int S2 = (G - E) * (H - F);
if (E >= C || B >= H || A >= G || F >= D)
return S1 + S2;
int s = 0;
//m在n内部
if (C >= G && E >= A && F >= B && D >= H) {
return S1;
}
//n在m内部
else if (G >= C && A >= E && B >= F && H >= D) {
return S2;
} else {
int w, h;
//计算交合矩形宽度
w = getH(G, E, C, A, C - E, G - A, G - E, C - A);
//计算交合矩形高
h = getH(B, D, F, H, H - B, D - F, H - F, D - B);
s = S1 + S2 - w * h;
}
return s;
}
private int getH(int B, int D, int F, int H, int i, int i2, int i3, int i4) {
int h;
if (D >= H && B >= F) {
h = i;
} else if (H >= D && F >= B) {
h = i2;
} else if (D >= H) {
h = i3;
} else {
h = i4;
}
return h;
}