美文网首页
2018-12-21 Frechet 距离

2018-12-21 Frechet 距离

作者: 家琦的三亩地 | 来源:发表于2018-12-21 10:50 被阅读0次

Frechet 距离是衡量数字曲线距离的一种距离。从直观的意义来看,也可以称之为狗绳距离。


示意图

线状要素是离散的数字曲线,计算算法的大体思路用一个公式表示即为


计算公式
这里用的是递归的方法,因此效率问题比较大,后期应当考虑更替为迭代的形式。
def culculateFrechetDis(line1,line2):
    n = len(line1)
    m = len(line2)
   disNMX=0.0
    if n > 1 and m > 1:
        disNM = euclidDis(line1[n-1],line2[m-1])
        disN_1M=culculateFrechetDis(line1[:n-1],line2)
        disNM_1=culculateFrechetDis(line1,line2[:m-1])
        if disNM >= disN_1M and disNM >= disNM_1:
            return disNM
        elif disN_1M <= disNM_1:
            disNMX = disN_1M
        else: 
            disNMX = disNM_1
        if disNMX > disNM:
            return disNM
        else :
            return disNMX
    if n == 1 and m > 1:
        disNM = euclidDis(line1[n-1],line2[m-1])
        disNM_1=culculateFrechetDis(line1,line2[:m-1])
        if disNM >= disNM_1:
            return disNM
        else:
            return disNM_1
    if m == 1 and n > 1:
        disNM = euclidDis(line1[n-1],line2[m-1])
        disN_1M=culculateFrechetDis(line1[:n-1],line2)
        if disNM >= disN_1M:
            return disNM
        else :
            return disN_1M    
    if m == 1 and n == 1:
        return euclidDis(line1[n-1],line2[m-1])
#  欧式距离
def euclidDis(point1,point2):
    return math.sqrt( ((point1[0]-point2[0])**2)+((point1[1]-point2[1])**2)) 

line1=[[1,1], [2,1], [2,2]] line2=[[2,2], [0,1], [2,4]] 计算距离为 2

相关文章

网友评论

      本文标题:2018-12-21 Frechet 距离

      本文链接:https://www.haomeiwen.com/subject/qbtmkqtx.html