题目
用下面的数据类型分别表示点和矩形:
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 math
def diantoxian(x1,y1,x2,y2,x3,y3):
# 左边框区域内
d1=d2=d3=d4=d5=d6=d7=d8=0
if 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 = True
dis =diantoxian(x1,y1,x2,y2,x3,y3)
if (flag):
print("%f"%dis)
else:
print(0)
if __name__ == "__main__":
main()