Fréchet distance

import math
import numpy as np

#Euclidean distance
def euc_dist(pt1, pt2):
    return math.sqrt((pt2[0]-pt1[0])*(pt2[0]-pt1[0])+(pt2[1]-pt1[1])*(pt2[1]-pt1[1]))

def _c(ca,i,j,P,Q):  
    if ca[i,j] > -1:  
        return ca[i,j]  
    elif i == 0 and j == 0:  
        ca[i,j] = euc_dist(P[0],Q[0])  
    elif i > 0 and j == 0:  
        ca[i,j] = max(_c(ca,i-1,0,P,Q),euc_dist(P[i],Q[0]))  
    elif i == 0 and j > 0:  
        ca[i,j] = max(_c(ca,0,j-1,P,Q),euc_dist(P[0],Q[j]))  
    elif i > 0 and j > 0:  
        ca[i,j] = max(min(_c(ca,i-1,j,P,Q),_c(ca,i-1,j-1,P,Q),_c(ca,i,j-1,P,Q)),euc_dist(P[i],Q[j]))  
    else:  
        ca[i,j] = float("inf")  
    return ca[i,j]

def frechet_distance(P,Q):  
    ca = np.ones((len(P),len(Q)))  
    ca = np.multiply(ca,-1)  
    return _c(ca,len(P)-1,len(Q)-1,P,Q)

Algorithm:Computing Discrete Frechet Distance

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值