alpha shape 算法识别
def alpha_shape_2D(data, radius):
"""
alpha shapes 算法检测边缘
:param x: 原始点坐标集 x轴
:param y: 原始点坐标集 y轴
:param radius: 圆半径
:return: 边缘点集
"""
x = data.x
y = data.y
count = len(x)
i = 0
temp_i = i
edge_x = []
edge_y = []
edge_len = 0
while (i < count): # 遍历点集里的所有的点
# 根据农机作业轨迹的特性(有一定规律的,一列一列的排列)
# 筛选 以当前点为质心,边长为 4*radius 的正方形区域 内的点 ,计算这些点与当前点的连线是否构成边界
i_range = np.array([t for t, v in enumerate(x < x[i] + 2 * radius) if v == True])
i_range = i_range[[t for t, v in enumerate(data.loc[i_range, 'x'] > x[i] - 2 * radius) if v == True]]
i_range = i_range[[t for t, v in enumerate(data.loc[i_range, 'y'] < y[i] + 2 * radius) if v == True]]
i_range = i_range[[t for t, v in enumerate(data.loc[i_range, 'y'] > y[i] - 2 * radius) if v == True]]
""" i_range 是可能与当前点的连线组成边界线的备选点集"""
for k in i_range:
# 避免重复选点(一个点不能组成三个边界线,最多只能组成两条边界)
if edge_x.count(x[k]) > 0 and edge_y.count(y[k]) > 0:
continue
# 计算 当前点 与 备选点 的距离
dis = distance((x[i], y