Tengo un mapa generado por procedimientos que usa celdas Voronoi, con un nivel del mar definido y un mapa de altura creíble.
Hasta ahora, he logrado etiquetar ciertas características geográficas: tierra, océano, lagos, ríos, estuarios, confluencias, montañas y biomas. Los biomas incluyen tundra, bosque boreal, pastizales y bosque templado. También hay un par de otros biomas allí, pero para mis propósitos no son importantes en este momento.
Me gustaría etiquetar las bahías y los estrechos a continuación, pero no sé cómo hacerlo correctamente. Una bahía es un cuerpo de agua costero empotrado que se conecta directamente con el océano.
Un estrecho es una vía fluvial estrecha y naturalmente formada que conecta dos partes del océano. Básicamente, donde dos trozos de tierra casi se tocan y hay océano a ambos lados. También llamado "canal".
Para determinar las características, puedo recorrer cualquier característica por tipo como este:
for each (var feature:Object in geography.getFeaturesByType(Geography.LAND))
// loop through lands
for each (var cell:Cell in feature.cells)
// loop through cells
for each (var neighbor:Cell in cell.neighbors)
// loop through a cell's neighbors
trace(neighbor.hasFeatureType(Geography.LAND));
fuente
Respuestas:
La forma en que Dragons Abound identifica las bahías es caminar a lo largo de la costa y encontrar dos puntos en la costa donde la distancia en línea recta entre los puntos es menor que la distancia a lo largo de la costa entre los puntos. Esta es la sinuosidad de la costa entre los dos puntos. Al seleccionar un límite de sinuosidad y límites para la distancia en línea recta entre los puntos, puede identificar bahías estrechas y profundas, bahías amplias y poco profundas, etc.
En esta imagen, los puntos rojos y morados muestran los dos puntos candidatos y la línea verde es la línea de costa entre los puntos. La sinuosidad es la relación de esas dos longitudes:
Alternativamente, puede seleccionar dos puntos en la costa y crear un polígono conectando los dos puntos y la línea costera entre los dos puntos (es decir, conecte la línea verde arriba del punto rojo al punto púrpura). Mide el área de este polígono. Una bahía tendrá un área más grande que una no bahía.
En mi experiencia, una combinación de estas dos medidas fue la mejor para identificar de manera confiable lo que la gente ve como bahías.
Tenga en cuenta que esto también detectará puntos. Para encontrar solo bahías, debe verificar que el "interior" de la bahía contenga agua y no tierra. Una manera rápida y fácil de hacer esto es verificar el punto medio de la línea entre los dos puntos para ver si es agua. (Esto puede ser engañado pero generalmente es suficiente).
Un problema relacionado es identificar la "boca" de la bahía, es decir, la mejor opción para los dos puntos que marcan la apertura a la bahía. Por lo general, tendrás un montón de candidatos para la "boca". En el mapa de ejemplo anterior, podría poner la boca de esa bahía más adentro o más afuera. En términos generales, probablemente no importa demasiado, pero una heurística que funciona razonablemente bien es minimizar la distancia en línea recta a través de la boca.
Todavía no he hecho estrecho, pero mi intuición es verificar los puntos a lo largo de la costa para encontrar el punto más cercano en cualquier otra costa; si eso está por debajo de algún límite establecido, es un estrecho.
fuente
Aquí hay una idea aproximada usando transformaciones de procesamiento de imágenes para aislar las características de interés:
Aplique un relleno de inundación desde una célula oceánica para hacer una máscara de todas las células oceánicas. Dependiendo de cómo estén configurados sus ríos, es posible que necesite un criterio adicional de elevación o despeje para evitar que la máscara del océano fluya tierra adentro. ;)
Aplique un suavizado local al borde de esta máscara, manteniendo la conectividad / topología igual, pero suavizando las pequeñas características ruidosas de la costa que pueden distraer. Esto nos permite enfocarnos en grandes bahías sobre pequeñas entradas. Puede usar el ancho de su núcleo de filtro / número de iteraciones para controlar con precisión la escala de las características que conserva.
Aquí apliqué un filtro de mediana algunas veces. Los autómatas celulares son otra forma popular de erosionar formas suaves de una entrada ruidosa.
Convierta la máscara en un campo de distancia, donde cada celda almacena su distancia de la costa suavizada.
Ahora vemos algunas características destacadas prometedoras. En un campo de distancia firmado, las bahías y los estrechos se muestran como crestas afiladas, con la distancia cayendo a los lados. Podemos usar un filtro de detección de bordes para resaltar estas crestas:
Luego puede distinguir entre bahías y estrechos siguiendo la cresta para determinar su conectividad. Una bahía es una cresta que se extiende hacia la costa y se vuelve cada vez menos profunda (a cierta distancia de la tierra) hasta que termina en un punto. Un estrecho es una cresta que conecta una región de alta distancia con otra región de alta distancia, pasando por una región de menor distancia en el camino.
O, otra forma es asignar a cada isla un ID (búsqueda de componente conectado), luego, cuando esté haciendo su campo de distancia, propague el "ID de la isla más cercana" junto a la frontera de la distancia. Una bahía o entrada es entonces una cresta en el agua adyacente a la misma masa continental en ambos lados, mientras que un canal es una cresta que separa el agua adyacente a dos masas continentales diferentes.
Puede establecer restricciones mínimas y máximas de distancia a la costa o longitud de la cresta para controlar qué características etiquetar, si necesita excluir estrechos excesivamente estrechos / anchos, por ejemplo.
fuente
Básicamente, debe pensar en lo que quiere decir, precisamente, por una bahía o estrecho, y por qué desea diferenciarlos (¿es para cálculos de IA, o para etiquetar puntos de referencia, o algo más?). Juega con algunas definiciones para encontrar la que mejor te parezca. Luego, formule condiciones para controlar sus células Voronoi. Algunas sugerencias
Bahía
Estrecho
fuente