トピック1471:[ブルーブリッジカップ]長方形エリア交差点
先生Maで青い橋のカップを磨く
1.タイトルの説明
平面上に2つの長方形があり、それらの辺はデカルト座標系のX軸またはY軸に平行です。長方形ごとに、反対側の頂点のペアの座標を示します.2つの長方形の交点の面積を計算するようにプログラムしてください。
2.入力します
入力には2行のみが含まれ、各行は長方形を表します。
各行には、長方形の相対頂点のペアの座標が示され、各点の座標は、絶対値が10 ^ 7を超えない2つの実数で表されます。
3.出力
出力には実数が1つだけ含まれます。これは、小数点以下2桁まで予約されている交差領域です。
4.サンプル入力
1 1 3 3
2 2 4 4
5.サンプル出力
1.00
6.解決策:
xy1 = list(map(float,input().split()))
xy2 = list(map(float,input().split()))
rx = min(max(xy1[0],xy1[2]),max(xy2[0],xy2[2]))
lx = max(min(xy1[0],xy1[2]),min(xy2[0],xy2[2]))
uy = min(max(xy1[1],xy1[3]),max(xy2[1],xy2[3]))
dy = max(min(xy1[1],xy1[3]),min(xy2[1],xy2[3]))
w,h = rx-lx,uy-dy
if w<=0.0 or h<=0.00:
print("0.00")
else:
#print((str(w*h)+"00").split(".")[0]+"."+(str(w*h)+"00").split(".")[1][:2:]) 不进位输出小数点后两位
print("%.2f"%(w*h))
馬先生の考え:
#思路:
# 要对矩形做规范化处理。即左上角的坐标要小于右下角的坐标。
# 根据不同情况分别确定相交矩形左右上下,四条边的x,y坐标。
# 根据坐标确定矩形的长与宽。
# 求出矩形的面积。
while True:
try:
a = list(map(float, input().strip().split()))
b = list(map(float, input().strip().split()))
# 对矩形做规范化处理
a = [min(a[0], a[2]), min(a[1], a[3]), max(a[0], a[2]), max(a[1], a[3])]
b = [min(b[0], b[2]), min(b[1], b[3]), max(b[0], b[2]), max(b[1], b[3])]
# 确定每条边的坐标
xl = max(a[0], b[0])
xr = min(a[2], b[2])
yup = max(a[1], b[1])
ydown = min(a[3], b[3])
# 确定矩阵的长与宽
w = xr - xl
h = ydown - yup
# 求出矩形的面积
if w > 0 and h > 0:
print("%.2f" % (w * h))
else:
print("0.00")
except:
break