Example #1
0
    static float distance(Node nodeA, Node nodeB, DistanceT distanceT = DistanceT.MANHATTAN)
    {
        Vector2 p = new Vector2(nodeA.gridX, nodeA.gridY);
        Vector2 q = new Vector2(nodeB.gridX, nodeB.gridY);

        //Distance (D) is always 1 in our map
        switch (distanceT)
        {
        case DistanceT.EUCLIDEAN:
            return(Vector2.Distance(p, q));

        case DistanceT.MANHATTAN:
            return(Mathf.Abs(p.x - q.x) + Mathf.Abs(p.y - q.y));

        case DistanceT.CHEBYSHEV:
            //return Mathf.Max(Mathf.Abs(p.x - q.x), Mathf.Abs(p.y - q.y)); //Basic Chebychev
            float h_diagonal = Mathf.Min(Mathf.Abs(p.x - q.x), Mathf.Abs(p.y - q.y));
            float h_straigth = Mathf.Abs(p.x - q.x) + Mathf.Abs(p.y - q.y);
            return(Mathf.Sqrt(2f) * h_diagonal + (h_straigth - 2 * h_diagonal));
        }
        return(0f);
    }
Example #2
0
 public static float hDist(Node nodeA, Node nodeB, DistanceT distanceT = DistanceT.MANHATTAN)
 {
     return(distance(nodeA, nodeB, distanceT));
 }