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); }
public static float hDist(Node nodeA, Node nodeB, DistanceT distanceT = DistanceT.MANHATTAN) { return(distance(nodeA, nodeB, distanceT)); }