MT1595 点到矩形

题目

用下面的数据类型分别表示点和矩形:
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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值