[笔试题]求两矩形的无重叠的面积之和
2013-10-07 22:39 ripny 阅读(251) 评论(0) 收藏 举报

解题思路:
(1)关键是判断矩形的包含关系,故首先找出大矩形和小矩形;由于两种情况解法一样,故可以采用递归调用的方式,交换参数即可;
(2)矩形就4个端点,通过判断端点是否在另外一个矩形区域内,可以分情况讨论;
(3)分A(左上)、B(右上)、C(左下)、D(右下)四个端点讨论;
当A属于另一矩形时,返回的值和B、C的情况有关;
若A不属于另一矩形,当B属于另一矩形时,返回的值和C的情况有关;
若A/B当不属于另一矩形,当C属于另一矩形时,返回的值和D的情况有关;
只有D属于另一矩形;
ABCD都不属于另一矩形;
function solution($K, $L, $M, $N, $P, $Q, $R, $S) {
$s1 = ($M-$K)*($N-$L);
$s2 = ($R-$P)*($S-$Q);
if($s1>$s2){
$A = checkPoint($K, $L, $M, $N, $P, $S); // A--B
$B = checkPoint($K, $L, $M, $N, $R, $S); // | |
$C = checkPoint($K, $L, $M, $N, $P, $Q); // C--D
$D = checkPoint($K, $L, $M, $N, $R, $Q);
if($A)return $s1+$s2-(($B ? $R : $M)-$P)*($S-($C ? $Q : $L));
if($B)return $s1+$s2-($R-$K)*($S-($C ? $Q : $L));
if($C)return $s1+$s2-(($D ? $R : $M)-$P)*($N-$Q);
if($D)return $s1+$s2-($R-$K)*($N-$Q);
return $s1+$s2;
}
else{
return solution($P, $Q, $R, $S, $K, $L, $M, $N);
}
}
function checkPoint($K, $L, $M, $N, $X, $Y){
return ($X>$K && $X<$M && $Y>$L && $Y<$N);
}
浙公网安备 33010602011771号