您的位置:首页 > 其它

[笔试题]求两矩形的无重叠的面积之和

2013-10-07 22:39 309 查看


解题思路:

(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);

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