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
获取一个点集合的凹点集合和凸点集合
于 2023-08-31 13:56:42 首次发布