J'essaie de générer une carte stellaire bidimensionnelle assez grande qui montre différentes factions / états, chacun possédant un ou plusieurs systèmes stellaires. Je voudrais créer automatiquement des frontières / zones pour les factions.
L'idée est essentiellement de partir de quelque chose comme ça (les points représentent des systèmes stellaires sur un plan 2D, les couleurs sont des affiliations de factions)
pour ça
La génération de cartes comme celle-ci semble être une exigence assez courante, donc ma vraie question est la suivante: existe-t-il des algorithmes standard pour générer des zones d'état comme indiqué? Si oui, pourriez-vous me les signaler? Sinon, pouvez-vous penser à un bon algorithme (l'idée de base ou le pseudo-code sont très bien)?
Les performances de l'algorithme ne sont pas une préoccupation majeure pour moi, donc je préfère avoir une carte "plus jolie" qu'une carte plus rapide à générer. Cette question similaire propose une approche qui est probablement applicable à mon problème, mais avec quelques "améliorations" nécessaires: Comment créer une carte à partir d'un graphique
Permettez-moi d'expliquer ce que je veux dire quand je dis plus joli: au bas de la question liée, le demandeur présente son résultat final après avoir mis en œuvre la réponse acceptée. Mon premier problème ici: les zones pour les nœuds # 6, # 9 et # 12 sont très petites et de forme étrange. De plus, au lieu des arêtes vives, je préférerais un aspect plus lisse et incurvé.
Mes propres idées jusqu'à présent, y compris les inconvénients / questions respectifs que je vois avec eux:
- Générez un polygone de "coque convexe" pour chaque faction, puis développez un peu vers l'extérieur. Problèmes: aucune fonction concave. Aussi, comment gérez-vous les chevauchements?
- Générez un graphique voronoi pour les points, puis utilisez les bords du polygone voronoi entre les systèmes voisins de différentes factions comme frontières. Problème: grands polygones sur les bords de la carte - comment les identifier et les corriger?
- Générez un polygone de taille fixe pour chaque point, réunissez tous les polygones pour une seule faction (résultant en un grand "polygone de faction" potentiellement complexe). Ensuite, faites quelque chose pour réconcilier les zones qui se chevauchent entre deux factions. Problèmes: comment pourrais-je procéder exactement? Pas exactement un processus trivial. Et s'il y a chevauchement entre plus de deux factions?
Votre aide est appréciée.
Addendum: Après avoir réfléchi aux deux premières réponses et à leurs approches respectives pour résoudre le problème, j'ai réalisé que mes exigences ci-dessus sont incomplètes.
Je dois ajouter que la carte peut avoir des zones peu peuplées, ce qui signifie qu'il peut y avoir une étoile isolée ou un groupe d'étoiles. Je voudrais afficher chacun de ces clusters avec leur propre zone colorée contiguë. Quelque chose comme ça:
Je me rends compte que cela pourrait nécessiter une première étape qui identifie les clusters, puis exécuter l'algorithme réel pour chacun des clusters.