题目
用下面的数据类型分别表示点和矩形:
struct POINT { //点
int x, y; //坐标值x和y
} ;
struct RECT { //矩形
POINT lt, rb; //矩形的左上角和右下角
} ;
输入矩形两个点的坐标值x和y,再输入第3个点的坐标,计算第3个点距这个矩形的最近距离。如果点在矩形内部或者边框上,距离计为0。
格式
输入格式
输入整型,空格分隔。每行一个点的坐标。
输出格式
输出实型。如果在矩形内部或边框上,输出0。
样例1
输入:
-20 20
20 -10
20 10输出:
0
样例2
输入:
0 10
10 0
-1 -1输出:
1.414214
程序
import mathdef diantoxian(x1,y1,x2,y2,x3,y3):# 左边框区域内d1=d2=d3=d4=d5=d6=d7=d8=0if x3<x1 and y2<=y3<=y1:d1 = math.fabs(x3-x1)# 左下角位置if x3<x1 and y3<y2:d2 = math.sqrt((x3-x1)**2+(y3-y2)**2)# 左上角位置if x3<x1 and y3>y1:d3 = math.sqrt((x3-x1)**2+(y3-y1)**2)# 上边框if x1<=x3<=x2 and y3>y1:d4 = math.fabs(y3-y1)# 下边框if x1<=x3<=x2 and y3<y2:d5 = math.fabs(y3-y2)# 右边框if x3>x2 and y2<=y3<=y1:d6 = math.fabs(x3-x2)# 右下角位置if x3>x2 and y3<y2:d7 = math.sqrt((x3-x2)**2+(y3-y2)**2)# 右上角位置if x3>x2 and y3>y1:d8 = math.sqrt((x3-x2)**2+(y3-y1)**2)li = sorted([d1,d2,d3,d4,d5,d6,d7,d8])for x in li :if x!=0:return x# return li[0]
def main():x1,y1 = map(int,input().split())x2,y2 = map(int,input().split())x3,y3 = map(int,input().split())flag = True# 在内部if x1<x3<x2 and y2<y3<y1:flag =False# 在边框elif (x3==x1 and y2<=y3<=y1) or (x3==x2 and y2<=y3<=y1)or (y3==y1 and x1<=x3<=x2)or (y3==y2 and x1<=x3<=x2):flag =False# 分区域判断位置else:flag = Truedis =diantoxian(x1,y1,x2,y2,x3,y3)if (flag):print("%f"%dis)else:print(0)
if __name__ == "__main__":main()