从欧几里德距离转换为曼哈顿距离c#

时间:2013-11-15 10:06:09

标签: c# a-star

我找到了一个对我来说非常有用的代码来实现A *。但我面临一个问题。 我需要计算曼哈顿距离,我尝试实现一个,但它不起作用。此代码提供了欧几里德距离的计算。

public Node(Node parentNode, Node goalNode, int gCost,int x, int y)
    {

        this.parentNode = parentNode;
        this._goalNode = goalNode;
        this.gCost = gCost;
        this.x=x;
        this.y=y;
        InitNode();
    }

    private void InitNode()
    {
        this.g = (parentNode!=null)? this.parentNode.g + gCost:gCost;
        this.h = (_goalNode!=null)? (int) Euclidean_H():0;
    }

    private double Euclidean_H()
    {
        double xd = this.x - this._goalNode .x ;
        double yd = this.y - this._goalNode .y ;
        return Math.Sqrt((xd*xd) + (yd*yd));
    }

代码使用了c#。 非常感谢你。

1 个答案:

答案 0 :(得分:4)

A和B之间的曼哈顿距离(a.k.a L1-norm )是

Sum(abs(a[i] - b[i]))

当A和B之间的欧几里德(a.k.a L2-norm )是

Sqrt(Sum((a[i] - b[i])**2))

其中a [i],b [i]是A和B点的对应坐标。 所以代码可能是

private double Manhattan_H()
{
  double xd = this.x - this._goalNode.x;
  double yd = this.y - this._goalNode.y;

  return Math.Abs(xd) + Math.Abs(yd);
}