A*算法启发式函数的几种距离

A*算法启发式函数的几种距离

欧氏距离

double AstarPathFinder::getDistance_E(Vector3d n1 , Vector3d n2){
    //Euclidean
    double dis_E =  sqrt((n2(0)-n1(0))*(n2(0)-n1(0))+(n2(1)-n1(1))*(n2(1)-n1(1))+(n2(2)-n1(2))*(n2(2)-n1(2)));

    return dis_E;
}

曼哈顿距离

double AstarPathFinder::getDistance_M(Vector3d n1 , Vector3d n2){
    //Manhattan
    double dis_M =  fabs(n2(0)-n1(0))+ fabs(n2(1)-n1(1))+ fabs(n2(2)-n1(2));

    return dis_M;
}

对角距离

实质是 sqrt(3) * d_min + sqrt(2) * (d_mid - d_min) + (d_max - d_mid)

double AstarPathFinder::getDistance_D(Vector3d n1 , Vector3d n2){
    //diagonal:  3D
    double dis_D ;

    double dx = fabs(n1(0) - n2(0));
    double dy = fabs(n1(1) - n2(1));
    double dz = fabs(n1(2) - n2(2));
    double dmin = min( min(dx, dy), dz);
    double dmax = max(max(dx, dy), dz);
    double dmid = dx + dy + dz - dmin - dmax;
    dis_D = (sqrt(3) - sqrt(2))*dmin + (sqrt(2) - 1)*dmid + dmax;

    return dis_D;
}

0:Dijkstra算法

double AstarPathFinder::getDistance_0(Vector3d n1 , Vector3d n2){
    //Dijkstra
    double dis =  0;

    return dis;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值