Pour mon projet d'école, créer une carte de tuiles en 2D avec l'algorithme A * pour trouver le chemin le plus court à travers les obstacles. Je l'ai utilisé une formule pour obtenir un score heuristique pour les prochaines tuiles de http://www.growingwiththeweb.com/2012/06/a-pathfinding-algorithm.htmlObtenir l'heuristique de 2 coordonnées pour l'algorithme A *
Ceci est la fonction pour obtenir heuristique
public static int geth(int cx, int cy, int ex, int ey)
{
//cx = current position x
//cy = current position y
//ex = end (goal) position x
//ey = end (goal) position y
int c = 14;
int d_min = Math.Min(cx - ex, cy - ey);
int d_max = Math.Max(cx - ex, cy - ey);
int h = c * d_min + (d_max - d_min);
if (h < 0) //make h positive in case it's negative
{
h = h * -1;
}
return h;
}
Cela fonctionne lorsque le point de départ est plus élevé sur l'axe y que le point final, mais doesn Ne pas trouver le chemin le plus efficace lorsque le début est plus bas sur l'axe des ordonnées.
J'ai ajouté une version console de mon problème. Le plus efficace devrait être en diagonale, mais cela prend un mauvais chemin.
(bleu 'C' sont les noeuds vérifiés, le chemin 'P' vert fait, 'N' rouge encore à vérifier, d'autres ne sont pas encore atteint)
Merci pour votre aide :) – Deivis