Algoritmo para Clima Aleatorio

8

Me está costando modelar el clima. Modelar un solo aspecto es trivial: algunos patrones sinusoidales + ruido aleatorio. Sin embargo, más de 1 me está volviendo loco. No puedo tener viento, hojas caídas, lluvia y nieve, todo para ser aleatorio. Las colisiones simples como la lluvia y la nieve nunca deberían suceder.

Además de esto, me gustaría un nivel de "intensidad" para quizás cada uno. Pero esto puede venir después de la lógica principal.

El tiempo se almacena en MySQL.

Todas sus sugerencias son bienvenidas, pero no sugiera hacer ping a algún código postal y extraer el clima desde allí.


Utilizando sugerencias de, en realidad, todas las respuestas a continuación, he creado esta distribución no a escala :

Modificadores del clima en función de la semana del año

Cada característica se calculará con un ruido aleatorio, y la combinación de las 3 producirá efectos de superposición.

(temp <0) y (húmedo> 65) => nieve

Mikhail
fuente
55
Por cierto, nieve + lluvia es un clima válido.
Kromster
1
Bueno, no estará en mi juego. :-D
Mikhail
1
¿No es la nieve solo el resultado de la lluvia + baja temperatura?
Philipp

Respuestas:

9

¿Qué hay de dividir el clima en partes más detalladas?

Precipitation - none/light/moderate/heavy
Wind - none/light/moderate/heavy
Type - rain/hail/snow

Todavía puede almacenar esto en una sola columna SQL si lo desea, convirtiéndolo en una enumeración simple con 48 (4 * 4 * 3) valores posibles (eliminando cualquier conflicto extraño que no le guste).

NtscCobalt
fuente
77
Estaría pensando en dividir en "temperatura", "viento" y "humedad". Estos podrían ser interpretados para implicar lluvia / granizo / nieve / etc., sin tener un conflicto.
Trevor Powell
7

Parece que un modelo oculto de Markov podría serle útil. Estos definen ciertos estados con probabilidades estadísticas de transiciones de un estado a cada uno de los otros estados en función de la frecuencia relativa en las observaciones.

Puede definir algunos estados climáticos, por ejemplo, 'lluvioso' y 'soleado' y las probabilidades de transiciones de lluvioso a soleado y soleado a lluvioso y calcular, por ejemplo, la probabilidad de que pronto esté lloviendo en función de su observación de si actualmente está soleado o lluvioso . El artículo de Wikipedia explica esto, pero este tutorial (PDF) muestra un enfoque más práctico.

Si está modelando muchos patrones climáticos diferentes, sería difícil modelarlos independientemente con este patrón, pero puede definir el clima como 'FogRain' o 'WindSnow' 'SunWind' 'Sun' por ejemplo y tener probabilidades para cada uno. Estas probabilidades incluso podrían modificarse según el mes del juego, por ejemplo. Sin embargo, hay un pequeño problema a tener en cuenta que el tamaño de su matriz de probabilidad aumentará en n ^ 2 a medida que agregue más tipos de clima, ya que cada uno necesita tener probabilidades de transición (incluso si son cero) a los demás.

Pie de martin
fuente
Modelo de Markov, no HMM.
Peter Taylor
+ 1ed por simplicidad. Tener algo simple, sintonizable y comprensible es mucho mejor que tener algo preciso y complejo. Además, siempre puede hacerlo más elegante si lo desea, y hacer que las probabilidades de transición dependan de algo (altitud, bioma local, etc.).
Michael
Aunque me gusta esto, es un poco incómodo ya que otros desarrolladores tendrían que pensar en las transiciones en las probabilidades. Combinado con el hecho de que el clima depende de la época del año, el modelo de Markov probablemente complicaría las cosas
Mikhail
Tal vez no entiendo tu sugerencia. Para cada mes tendría que tener una tabla n ^ 2 de probabilidades de transición, ¿verdad? Donde N es el 2 ^ W de todas las condiciones climáticas. Por lo tanto, teniendo 3 modelos climáticos, tendría 64 probabilidades para un solo mes
Mikhail
@Mikhail para cada mes tendría una tabla de probabilidades de transición de cada condición climática entre sí, pero esto no necesariamente tiene que ser N ^ 2 en complejidad espacial ya que no tiene que ser una matriz (podría ser una estructura gráfica gráfica con cada rama apuntando a uno de los siguientes valores en la cadena con una probabilidad adjunta). No es tan difícil de conceptualizar, pero tal vez le gustaría dividirlo cada 2-3 meses en lugar de cada mes. Este artículo es mejor que el que he vinculado anteriormente, ¡podría ayudar más!
Martin Foot
4

En breve..

Estaría pensando esto a través de la ciencia.

Como todos sabemos, la nieve es lluvia y viceversa, excepto que tienen diferentes estados sólidos debido a los cambios de temperatura.

Los cambios de temperatura pueden estar asociados a los vientos.

Un rápido Google para "lo que causa el viento" me dio una respuesta de Answers.com:

"La fuerza del gradiente de presión, que surge del calentamiento desigual de la superficie de la Tierra. Una vez que está en movimiento, la fuerza de Coriolis surge de la rotación de la Tierra para desviarla (justo en el hemisferio norte, izquierda en el hemisferio sur)".

Sí, no es la mejor fuente de preguntas científicas, pero da la idea.

Entonces, teóricamente, solo necesitas viento ahora. Puede ser aleatorio, o bien, de alguna manera podría estar programado para su entorno que se calienta debido a algunos eventos.

Tome el viento ahora, aplique a su posición actual, y al azar o mediante una secuencia de comandos, haga nubes fuera de él. Cuanto más densa es la nube, mayor es la probabilidad y densidad de lluvia. Si la temperatura es lo suficientemente baja, la lluvia se convierte en nieve. Mueva la nube y hágala "no tan densa" con ese viento.

En cuanto a la pantalla, eso depende de usted, solo guarde en caché los estados de las partículas que caen, if rain -> use water drop texturey if snow -> use snowflake texture. Usa el viento para hacer que estas partículas se muevan de acuerdo con la dirección del viento (sí, también debes almacenar esta, en algún lugar) para que sea un poco más realista.

Y con esto puedes expandirte sobre todo. Por ejemplo, si cae nieve y los copos de nieve caen cerca de algún tipo de fuente de calor, cambie la textura de las partículas para que llueva nuevamente.

Muchas posibilidades en realidad, este es solo un concepto simple.

PD: En cuanto al granizo, mira lo que los hace, expande el concepto para dicho entorno.

Que te diviertas, buena suerte.

sacudida
fuente