Sto cercando di generare una mappa stellare bidimensionale abbastanza grande che mostri diverse fazioni / stati, ognuno dei quali possiede uno o più sistemi stellari. Vorrei creare automaticamente bordi / aree per le fazioni.
L'idea è essenzialmente di passare da qualcosa del genere (i punti rappresentano i sistemi stellari su un piano 2d, i colori sono affiliazioni di fazioni)
a questo
Generare mappe come questa sembra un requisito abbastanza comune, quindi la mia vera domanda è questa: ci sono algoritmi standard per generare aree di stato come mostrato? Se è così, potresti indicarmeli? In caso contrario, riesci a pensare a un buon algoritmo (l'idea di base o lo pseudo codice vanno bene)?
Le prestazioni dell'algoritmo non sono una preoccupazione primaria per me, quindi preferirei avere una mappa "più bella" piuttosto che una più veloce da generare. Questa domanda simile offre un approccio che è probabilmente applicabile al mio problema, anche se con qualche "prettificazione" necessaria: come creare una mappa dal grafico
Lascia che ti spieghi cosa intendo quando dico più bello: in fondo alla domanda collegata, la richiedente presenta il suo risultato finale dopo aver implementato la risposta accettata. Il mio primo problema qui: le aree per i nodi # 6, # 9 e # 12 sono molto piccole e stranamente modellate. Inoltre, al posto degli spigoli vivi, preferirei un aspetto più liscio e curvo.
Le mie idee finora, compresi i rispettivi svantaggi / domande che vedo con loro:
- Genera un poligono "scafo convesso" per ogni fazione, quindi espandi leggermente verso l'esterno. Problemi: nessuna funzione concava. Inoltre, come gestisci le sovrapposizioni?
- Genera un grafico voronoi per i punti, quindi usa i bordi del poligono voronoi tra i sistemi vicini di diverse fazioni come bordi. Problema: grandi poligoni ai bordi della mappa: come identificarli e correggerli?
- Genera un poligono di dimensioni fisse per ciascun punto, unendo tutti i poligoni per una singola fazione (risultante in un "poligono di fazione" grande, potenzialmente complesso). Quindi fai qualcosa per riconciliare le aree sovrapposte tra due fazioni. Problemi: come lo farei esattamente? Non è esattamente un processo banale. E se ci fosse una sovrapposizione tra più di due fazioni?
Il tuo aiuto è apprezzato.
Addendum: dopo aver pensato alle prime due risposte e ai rispettivi approcci per risolvere il problema, mi sono reso conto che i miei requisiti di cui sopra sono incompleti.
Devo aggiungere che la mappa può avere aree scarsamente popolate, il che significa che potrebbe esserci una stella isolata o un gruppo di stelle. Vorrei visualizzare ognuno di questi cluster con la loro area colorata contigua. Qualcosa come questo:
Mi rendo conto che ciò potrebbe richiedere un primo passo che identifica i cluster e quindi l'esecuzione dell'algoritmo effettivo per ciascuno dei cluster.