“行简化”的一般问题似乎是一个完整的研究领域。我建议您看一下,例如,Ramer–Douglas–Peucker algorithm。有几个python模块,我可以找到:rdp和{a3}(它们也实现了Py-Visvalingam-Whyatt algorithm)。在
总之,我正在尝试用插值来计算两条折线之间的差异。任何曲线都可以比较,即使没有公共点。在
第一个想法是计算两条多段线沿路径的距离。它们被用作从第一条曲线上的一个给定点到另一条曲线上相对接近的点的路标。在
然后,第一条曲线的点可以在另一条曲线上插值。现在可以逐点比较这两个数据集。在
在图上,黑色曲线是xy2在曲线xy1上的插值。因此,可以计算出黑色方块与橙色圆圈之间的距离,并求平均值。在
这给出了一个平均距离测量值,但没有什么可比较的,也无法确定应用的缩减是否足够好。。。在
def normed_distance_along_path( polyline ):
polyline = np.asarray(polyline)
distance = np.cumsum( np.sqrt(np.sum( np.diff(polyline, axis=1)**2, axis=0 )) )
return np.insert(distance, 0, 0)/distance[-1]
def average_distance_between_polylines(xy1, xy2):
s1 = normed_distance_along_path(xy1)
s2 = normed_distance_along_path(xy2)
interp