list去重,四边形相交,坐标转换,寻找多个点顶点坐标,找到多边形中心点,找出所有相交的关系点

遍历去重加set去重

def list2heavy(new_arr):
    end_list = []
    # 去重
    for i in new_arr:
        appen = 1
        for x in end_list:
            if set(i) == set(x):
                appen = 0
        print(appen)
        if appen:
            end_list.append(i)
    return end_list

遍历去重

def list2heavy(new_arr):
    end_list = []
    # 去重
    for i in new_arr:
        if i not in end_list:
            end_list.append(i)
    return end_list

四边形相交

def mat_inter(box1,box2):
    x01, y01, x02, y02 = box1
    x11,y11,x12,y12=box2
    lx = abs((x01 + x02) / 2 - (x11 + x12) / 2)
    ly = abs((y01 + y02) / 2 - (y11 + y12) / 2)
    sax = abs(x01 - x02)
    sbx = abs(x11 - x12)
    say = abs(y01 - y02)
    sby = abs(y11 - y12)
    if lx <= (sax + sbx) / 2 and ly <= (say + sby) / 2:
        return True
    else:
        return False

坐标转换

def xyxy2xywh(x):
    # Convert nx4 boxes from 
    # [x1, y1, x2, y2] to [x, y, w, h] 
    # where xy1=top-left, xy2=bottom-right** 
    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)
    y[ 0] = (x[ 0] + x[ 2]) / 2  # x center
    y[ 1] = (x[ 1] + x[ 3]) / 2  # y center
    y[ 2] = x[ 2] - x[ 0]  # width
    y[ 3] = x[ 3] - x[ 1]  # height
    return y

判断矩形是否相交

def judge_AUB_1(pointa,pointb):
    '''
    point[x1,y1,x2,y2]
    '''
    if all([max(pointa[0],pointa[2])>=max(pointb[0],pointb[2])
    , min(pointa[0],pointa[2])<=min(pointb[0],pointb[2]) 
    ,  max(pointa[1],pointa[3])>=max(pointb[1],pointb[3])
    , min(pointa[1],pointa[3])<=min(pointb[1],pointb[3])]):
        return 1
    return 0

寻找多个点集合的四个顶点坐标

def find_peak(point_list):
    # left,right,up,down=[]
    print("",point_list)
    left=right=up=down=point_list[0]
    for x in point_list:
        if x[0]<left[0]:
            left=x
        if x[0]>right[0]:
            right=x
        if x[1]>up[1]:
            up=x
        if x[1]<down[1]:
            down=x
    print("left,down,right,up",left,down,right,up)
    #由于顶点坐标可能重复,需要去重
    sort_list=[left,down,right,up]
    uni_list=[]
    for s in sort_list:
        if s not in uni_list:
            uni_list.append(s)
    return uni_list

找到多边形中心点

def get_centerpoint(lis):
    area = 0.0
    x,y = 0.0,0.0
    a = len(lis)
    for i in range(a):
        lat = lis[i][0] #weidu
        lng = lis[i][1] #jingdu
        if i == 0:
            lat1 = lis[-1][0]
            lng1 = lis[-1][1]
        else:
            lat1 = lis[i-1][0]
            lng1 = lis[i-1][1]
        fg = (lat*lng1 - lng*lat1)/2.0
        area += fg
        x += fg*(lat+lat1)/3.0
        y += fg*(lng+lng1)/3.0
    x = x/area
    y = y/area
    return int(x),int(y)
   

从两两相交的点中找出所有相交的关系点

[(a,b),(b,c),(c,d),(c,f)]–>[(a,b,c,d,f)]


def find_point(point, ayy):
 return_point = []
 for point_list in ayy:
     if point == point_list[0]:
         return_point.append(point_list[1])
     elif point == point_list[1]:
         return_point.append(point_list[0])

 return return_point
 
new_arr = []
     for index, pp in enumerate(two_inter_flower):
         new_arr.append(pp)
         for point in new_arr[index]:
             # print("xx", point)
             list_ = find_point(point, two_inter_flower)
             if list_ != []:
                 for x in list_:
                     if x not in new_arr[index]:
                         new_arr[index].append(x)
             # print("list", list)
     end_list=list2heavy(new_arr) #去重,调用上面提到的函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值