矩形切割

矩形切割

矩形切割主要用於信息學競賽中,解決有重疊部分的面積計算問題。它是一種處理平面上矩形的統計的方法。它的原型是線段切割,可以拓展到三維的立方切割。

矩形切割在信息學競賽中有重要套用,主要解決有重疊部分的面積計算問題。
矩形切割是一種處理平面上矩形的統計的方法。
許多統計類的問題通過數學建模後都能轉化為用矩形切割來解決。矩形切割的原型是線段切割,可以拓展到三維的立方切割。
(1)線段切割
(2)矩形切割
(3)立方切割
矩形切割的主要程式:
procedure cal(l,r,b,t,z:longint);
begin
while (z<=n)and((l>x2&#91;z&#93;)or(r<x1&#91;z&#93;)or(b>y2&#91;z&#93;)or(t<y1&#91;z&#93;))do inc(z);
if z>n then
begin
inc(col&#91;now&#93;,(r-l+1)*(t-b+1));
exit;
end;
if l<x1&#91;z&#93; then
begin
cal(l,x1&#91;z&#93;-1,b,t,z+1);
l:=x1&#91;z&#93;;
end;
if r>x2&#91;z&#93; then
begin
cal(x2&#91;z&#93;+1,r,b,t,z+1);
r:=x2&#91;z&#93;;
end;
if t>y2&#91;z&#93; then
begin
cal(l,r,y2&#91;z&#93;+1,t,z+1);
t:=y2&#91;z&#93;;
end;
if b<y1&#91;z&#93; then
begin
cal(l,r,b,y1&#91;z&#93;-1,z+1);
b:=y1&#91;z&#93;;
end;
end;
procedure work;
var
i,j,k:longint;
begin
x1&#91;0&#93;:=1;
y1&#91;0&#93;:=1;
x2&#91;0&#93;:=a;
y2&#91;0&#93;:=b;
color&#91;0&#93;:=1.0;
for i:=n downto 0 do
begin
now:=color&#91;i&#93;;
cal(x1&#91;i&#93;,x2&#91;i&#93;,y1&#91;i&#93;,y2&#91;i&#93;,i+1);
end;
for i:=1 to 1000 do
if col&#91;i&#93;>0 then
writeln(i,&#39; &#39;,col&#91;i&#93;);
end;
下面舉一個立方切割的例子。
衛星覆蓋
SERCOI(Space-Earth Resource Cover-Observe lnstitute)是一個致力於利用衛星技術對空間和地球資源進行覆蓋觀測的組織。現在他們研製成功一種新型資源觀測衛星-SERCOI-308。這種衛星可以覆蓋空間直角坐標系中一定大小的立方體空間,衛星處於該立方體的中心。
其中(x,y,z)為立方體的中心點坐標,r為此中心點到立方體各個面的距離(即r為立方體高的一半).立方體的各條邊均平行於相應的坐標軸。我們可以用一個四元組(x,y,z,r)描述一顆衛星的狀態,它所能覆蓋的空間體積 。
由於一顆衛星所能覆蓋的空間體積是有限的,因此空間中可能有若干顆衛星協同工作。它們所覆蓋的空間區域可能有重疊的地方,如下圖所示(陰影部分表示重疊的區域)。
寫一個程式,根據給定的衛星分布情況,計算它們所覆蓋的總體積。
輸入輸出
輸入檔案是INPU.TXT。檔案的第一行是一個正整數N(1<=N<=10O):表示空間中的衛星總數。接下來的N行每行給出了一顆衛星的狀態,用空格隔開的四個正整數x,y,z,r依次表示了該衛星所能覆蓋的立方體空間的中心點坐標和半高,其中-1000<=x,y,z<=1000, 1<=r<=200。
輸出檔案是OUTPUT.TXT。檔案只有一行,包
括一個正整數,表示所有這些衛星所覆蓋的空間總體積。
樣例
INPUT.TXT
3
0 0 0 3
1 –1 0 1
19 3 5 6
OUTPUT.TXT
1944
這題可以用立方體切割來做,每讀入一個立方體
(x3,y3,z3,x4,y4,z4),就和已有的立方體(x1,y1,z1,x2,y2,z2)判斷是否有重疊,有的
話就進行切割。所有的數據處理完後就可以將全部立方體的體積加起來,就能得
出答案了。
應該注意的是新切割生成的立方體與立方體(x3,y3,z3,x4,y4,z4)是不會有重
疊部分的。因此我們在讀入矩形(x3,y3,z3,x4,y4,z4)之前,先把當前立方體集合中
的立方體總數tot 記錄起來 tot1 ← tot,那么循環判斷立方體重疊只需循環到tot1
就行了,新生成的立方體就無需與立方體(x3,y3,z3,x4,y4,z4)判斷是否重疊了。這
樣可以節省不少時間。

相關詞條

熱門詞條

聯絡我們