vivo tiempo termico mundo mundial mapa climatico actual 2d contour terrain heightmap

2d - termico - mapa del tiempo en vivo



Asignación de un mapa de altura a un formato de contorno basado en cuadrícula (1)

Crear una función de interpolación / mejor ajuste. Su modelo debe ser un polinomio 2D (en x e y ) cuyo grado sea "correcto": no demasiado alto para que se adapte a todo, pero no demasiado bajo para que pierda detalles.

Ahora tiene una función matemática que puede dividir, estableciendo f(x,y) = height . La solución a esta ecuación es un contorno. Ahora tiene dos opciones, dependiendo de si puede o no resolver analíticamente.

  • Suponiendo que no puede resolver analíticamente, aún puede trazar fácilmente una aproximación de la curva:
    • Comience por colorear la cuadrícula blanca si f(x,y)>height y negro si f(x,y)<height . Tenga en cuenta todas las áreas de "transición" en las que hay una transición de blanco y negro dentro de una cuadrícula de aproximadamente <1 de distancia: estos son los cuadrados en los que se encontrará el contorno.
    • Escoja aleatoriamente un cuadrado de transición y busque dentro de un radio de cuadrícula de aproximadamente <1 para f(x,y)==height , para encontrar un punto en el contorno. En ese punto (no necesariamente en la cuadrícula) calculamos el gradiente ∇f(x,y) = (∂f/∂x, ∂f/∂y) (el "vector ascendente"). Lo (∂f/∂y, -∂f/∂x) 90 grados en cualquier dirección: (∂f/∂y, -∂f/∂x) : de esta forma apunta a lo largo del contorno. Muy lentamente (con un tamaño de escalón mucho más pequeño que la cuadrícula) trazamos el contorno. Esto nos llevará a lo largo de todo un contorno.
    • Cada vez que pasamos por un cuadro de cuadrícula durante esta traza, lo etiquetamos como {|, -, /,} dependiendo de algo como en qué dirección apunta el promedio del degradado. (También debemos etiquetar a los vecinos como . Si aún no están etiquetados; consulte [*].)
    • Tenga en cuenta que es posible que aún queden cuadrículas de transición después de eso. Por ejemplo, si tiene dos colinas, habrá completado un círculo, pero el contorno es dos círculos. Repita el procedimiento anterior en otra casilla de "transición" aleatoria (sin etiquetar) (es por eso que necesitábamos [*], o bien podríamos fijarnos en los vecinos de los lugares que ya hemos tenido en cuenta). Repita hasta que ya no haya cuadrículas de "transición" sin etiqueta.
    • Haga esto para cada nivel de height que desee dibujar como contorno, y listo.
  • Puede ser capaz de resolver analíticamente como lo haría para las secciones cónicas, pero esto probablemente no sea probable y esté fuera del alcance de esta pregunta. Si pudiera resolver la curva, podría "cuadrificar" utilizando varias técnicas (p. Ej., Parametrizarla, luego caminar a lo largo del contorno utilizando tamaños de pasos de, quizás, media cuadrícula, anotando los vecinos más cercanos)

(Si uno de sus contornos se superpone a otro, el espacio entre sus alturas de contorno es demasiado pequeño. Si no está satisfecho con un contorno dado, el conjunto de posibilidades {-, |, /,} es demasiado pequeño.)

Tengo un mapa de altura 2D en el siguiente formato

06 36 39 42 43 55 ... 37 40 43 43 45 46 ... 40 43 44 45 46 48 ... 44 44 46 47 48 50 ... 41 44 45 47 48 48 ... ...

Y tengo que volver a asignarlo en un formato de contorno basado en sonrisas (para que pueda ser mapeado en sprites)

. . . . | . . . . . . / . . . . . / / . . . . . | . . . . . . | . . . . / - / . . .

Aqui que significa área plana, | y - acantilados rectos, / y / esquinas de acantilados (cada uno representa 2 posibilidades diferentes).

He intentado un enfoque estándar de la marcha, pero descubrí que el muestreo de solo 3 vecinos conlleva muchos problemas debido a la sobrecarga de los casos adyacentes. (Tenga en cuenta el extra fuera de lugar acantilados rectos a continuación)

. . . . | . / . . . . / / . . . . / / - . . . . | - . . . . . | . . . . / - / . . .

Lo que me gustaría, es algunas referencias a algoritmos / enfoques que ayudan a lidiar con este tipo de cosas. Sé que la búsqueda de contorno con algún tipo de búsqueda en profundidad es una opción, pero aún no la he probado, y preferiría dejar eso como último recurso. También están las preguntas sobre la representación de algunas características, por ejemplo, si se incluyen las crestas de acantilados que tienen 1 elemento de espesor o simplemente se ignoran. Otra opción es pasar por los contornos generados y cambiarlos para que encajen sin problemas, pero esto parece realmente intrépido ...