Estoy tratando de generar un mapa estelar bidimensional bastante grande que muestre diferentes facciones / estados, cada uno con uno o más sistemas estelares. Me gustaría crear automáticamente bordes / áreas para las facciones.
La idea es esencialmente pasar de algo como esto (los puntos representan sistemas estelares en un plano 2D, los colores son afiliaciones de facciones)
a esto
Generar mapas como este parece un requisito bastante común, por lo que mi pregunta real es esta: ¿existen algoritmos estándar para generar áreas de estado como se muestra? Si es así, ¿podrías señalarme? Si no, ¿se te ocurre un buen algoritmo (la idea básica o el pseudocódigo están bien)?
El rendimiento del algoritmo no es una preocupación principal para mí, por lo que prefiero tener un mapa "más bonito" que uno más rápido de generar. Esta pregunta similar ofrece un enfoque que probablemente sea aplicable a mi problema, aunque con alguna "prettificación" necesaria: Cómo crear un mapa a partir de un gráfico
Permítanme explicar a qué me refiero cuando digo más bonita: al final de la pregunta vinculada, la persona que pregunta presenta su resultado final después de implementar la respuesta aceptada. Mi primer problema aquí: las áreas para los nodos # 6, # 9 y # 12 son muy pequeñas y de forma extraña. Además, en lugar de los bordes afilados, preferiría una apariencia más suave y curva.
Mis propias ideas hasta ahora, incluidas las desventajas / preguntas respectivas que veo con ellas:
- Genera un polígono de "casco convexo" para cada facción, luego expande un poco hacia afuera. Problemas: sin características cóncavas. Además, ¿cómo manejas las superposiciones?
- Genere un gráfico voronoi para los puntos, luego use los bordes del polígono voronoi entre los sistemas vecinos de diferentes facciones como bordes. Problema: Polígonos grandes en los bordes del mapa: ¿cómo los identifico y los arreglo?
- Genere un polígono de tamaño fijo para cada punto, una todos los polígonos para una sola facción (resultando en un "polígono de facción" grande y potencialmente complejo). Luego haz algo para conciliar las áreas superpuestas entre dos facciones. Problemas: ¿Cómo haría esto exactamente? No es exactamente un proceso trivial. ¿Qué pasa si hay superposición entre más de dos facciones?
Tu ayuda es apreciada.
Anexo: Después de pensar en las dos primeras respuestas y sus respectivos enfoques para resolver el problema, me di cuenta de que mis requisitos anteriores están incompletos.
Tengo que agregar que el mapa puede tener áreas escasamente pobladas, lo que significa que puede haber una estrella aislada o un grupo de estrellas. Me gustaría mostrar cada uno de esos grupos con su propia área de color contigua. Algo como esto:
Me doy cuenta de que esto podría necesitar un primer paso que identifique los grupos y luego ejecutar el algoritmo real para cada uno de los grupos.