获取一个点集合的凹点集合和凸点集合

def find_x_max(data):
    ploy = np.array(data)
    y = ploy[:,1]
    y_max = y.max()
    Conv_list = list()
    for p in data:
        if p[1] == y_max:
            Conv_list.append(p)
    if len(Conv_list) != 1:
        temp_list = []
        for p in Conv_list:
            temp_list.append(p[0])
        return Conv_list[temp_list.index(max(temp_list))]
    else:
        return Conv_list[0]



def find_y_max(data):
    ploy = np.array(data)
    y = ploy[:,1]
    y_max = y.max()
    Conv_list = list()
    for p in data:
        if p[1] == y_max:
            Conv_list.append(p)
    if len(Conv_list) != 1:
        temp_list = []
        for p in Conv_list:
            temp_list.append(p[0])
        return Conv_list[temp_list.index(max(temp_list))]
    else:
        return Conv_list[0]
 
#返回凸点和凹点    
def Conv(data):
    Norm_dot = find_y_max(data)
    num = len(data)
    Ind = data.index(Norm_dot)
    Conv_dots = {}
    Conc_dots ={}
    Vec_A = [data[Ind%num][0] - data[(Ind-1)%num][0], data[Ind%num][1] - data[(Ind-1)%num][1]]
    Vec_B = [data[(Ind+1)%num][0] - data[Ind%num][0], data[(Ind+1)%num][1] - data[Ind%num][1]]
    Vect_Norm = (Vec_A[0] * Vec_B[1]) - (Vec_A[1] * Vec_B[0])
    for i in range(num):
        V_A = [data[(i)%num][0] - data[(i-1)%num][0], data[(i)%num][1] - data[(i-1)%num][1]]
        V_B = [data[(i+1)%num][0] - data[(i)%num][0], data[(i+1)%num][1] - data[(i)%num][1]]
        Vec_Cross = (V_A[0] * V_B[1]) - (V_A[1] * V_B[0])
        if (Vec_Cross * Vect_Norm) < 0:
            Conc_dots[(i) % num]= data[(i) % num]
        else:
            Conv_dots[(i) % num]= data[(i) % num]
    return Conv_dots ,Conc_dots

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值