Il vous faudra à peu près diviser la mer en pixels et faire quelque chose comme A *. Vous pouvez l'optimiser un peu en fusionnant des pixels contigus dans des zones plus grandes, mais si vous gardez tout les carrés, cela facilitera probablement la recherche. La recherche ne serait plus de style Manhattan, mais si vous aviez des carrés assez grands, le temps de décision de connexion supplémentaire serait plus que compensé. Alternativement, vous pouvez développer itérativement des polygones de tous vos ports, en construisant des polygones convexes (de sorte que n'importe quel point dans le polygone soit accessible à partir de n'importe quel autre sans sortir, vous voulez éviter la forme PacMan, par exemple), bien qu'il s'agisse d'un raffinement/complication/optimisation de l'approche des «carrés» que j'ai mentionnée pour la première fois. La clé est que vous savez une fois que vous êtes dans une zone que vous pouvez atteindre n'importe où ailleurs dans cette zone.
Je ne sais pas si cela aide, désolé. Ça a été une longue journée. Bonne chance, cependant. Cela ressemble à un problème amusant!
Editer: Oublié de mentionner, vous pouvez également pré-traiter votre zone dans un quadtree. C'est-à-dire, prenez votre carte entière et divisez-la en deux verticalement et horizontalement (vous n'avez pas besoin de faire les deux divisions en même temps, et si vous voulez passer du temps à faire de meilleurs scindages, vous pouvez le faire plus tard) , et faites cela récursivement jusqu'à ce que chaque nœud soit entièrement terrestre ou maritime. A partir de là, vous pouvez créer un réseau de connexions trivial (il suffit de connecter les feuilles voisines), et le A * devrait être assez facile à implémenter à partir de là. Ce sera probablement le moyen le plus facile de mettre en œuvre ma première suggestion de toute façon. :)
Pour ma solution "mer ou non-mer" est ok, je l'utilise pour des informations générales, pas de navigation professionnelle. Pour quelqu'un qui envisage de faire un logiciel professionnel pour la navigation, il existe des cartes payantes et/ou des logiciels. – Lucian2k