Frechet 距離是衡量數(shù)字曲線距離的一種距離。從直觀的意義來(lái)看豺鼻,也可以稱(chēng)之為狗繩距離综液。
示意圖
線狀要素是離散的數(shù)字曲線,計(jì)算算法的大體思路用一個(gè)公式表示即為
計(jì)算公式
這里用的是遞歸的方法儒飒,因此效率問(wèn)題比較大谬莹,后期應(yīng)當(dāng)考慮更替為迭代的形式。
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]]
計(jì)算距離為 2