栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

python常见数据转换,图形变换
  • 遍历去重加set去重
  • 遍历去重
  • 四边形相交
  • 坐标转换
  • 判断矩形是否相交
  • 寻找多个点集合的四个顶点坐标
  • 找到多边形中心点
  • 从两两相交的点中找出所有相交的关系点

遍历去重加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]right[0]:
            right=x
        if x[1]>up[1]:
            up=x
        if x[1] 
找到多边形中心点 
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) #去重,调用上面提到的函数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/987393.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号