問題:平面上有n個平行於座標軸的矩形,他們總的覆蓋面積是多少?重疊的面積只算一次
最佳參考:
這裡最重要的要理解的一點是:mp[i][j]的含義,這裡0<= i# 下面的函式為求解函式,array為矩形的座標矩陣,單個矩形表示為[x0,y0,x1,y1],n為矩形的個數
deffunc
(array, n)
: list_x =
list_x.extend(
[x[0
]for x in array]
) list_x.extend(
[x[2
]for x in array]
) list_x =
sorted
(list
(set
(list_x)))
list_y =
list_y.extend(
[x[1
]for x in array]
) list_y.extend(
[x[3
]for x in array]
) list_y =
sorted
(list
(set
(list_y)))
numx, numy=
len(list_x)
,len
(list_y)
mp =[[
0for i in
range
(numy-1)
]for j in
range
(numx-1)
]for i in
range
(n):
l_x, r_x = list_x.index(array[i][0
]), list_x.index(array[i][2
])l_y, r_y = list_y.index(array[i][1
]), list_y.index(array[i][3
])for m in
range
(l_x,r_x)
:for n in
range
(l_y,r_y)
: mp[m]
[n]+=
1 area =
0for i in
range
(numx-1)
:for j in
range
(numy-1)
:if mp[i]
[j]:
area +=
(list_x[i+1]
-list_x[i])*
(list_y[i+1]
-list_y[i]
)return area
# 這是一道筆試題,下面為輸入部分
n=int
(input()
)array =
for i in
range
(n):
str_in =
input()
nums =
[int
(n)for n in str_in.split()]
# [x0,y0,x1,y1]
(func(array,n)
)變種一:求被所有矩形都覆蓋的面積大小,上面**中判斷條件 if mp[i][j]: 改為 if mp[i][j]==n: 即可
變種二:計算出平面內重疊矩形數量最多的地方,有多少個矩形相互重疊。 這個返回mp矩陣中最大的哪個數就可以了,當然要注意,如果最大數是1,說明沒有矩形重疊,這種情況另外做輸出。
def
commonarea
(rec1,rec2)
: l_x =
max(rec1[0]
,rec2[0]
) d_y =
max(rec1[1]
,rec2[1]
) r_x =
min(rec1[2]
,rec2[2]
) u_y =
min(rec1[3]
,rec2[3]
) length = r_x-l_x
wide = u_y-d_y
if length>
0and wide>0:
return length*wide
return
0#rec = [x0,y0,x1,y1]
rec1=[1
,1,4
,4]rec2=[2
,2,5
,5]print
(commonarea(rec1,rec2)
)
求包括n個矩形的最小矩形面積模板
typedef double typev const double eps 1e 8 const int n 50005 int sign double d struct point point operator point d ps n int n,cn double dist point d1,...
計算2個矩形所佔的面積
這是在leetcode上看到的題目。2個矩形由各自的左下角和右上角來定義。座標定義為 a,b c,d e,f g,h 頂點座標全部為int整數。兩個矩形分布可以分為三種情況。分離,包含與相交。如下 public class rearea else if a e c g b f d h else if...
計算兩個多邊形的重疊面積
include include include using namespace std const int maxn 300 const double eps 1e 6 位置標識 int dcmp double x struct point double cross point a,point b,...