Algorithme pour la météo aléatoire

8

J'ai du mal à modéliser la météo. La modélisation d'un seul aspect est triviale - un motif sinusoïdal + un bruit aléatoire. Cependant, plus d'un souffle dans mon esprit. Je ne peux pas avoir le vent, les feuilles qui tombent, la pluie et la neige pour être aléatoire. De simples collisions comme la pluie et la neige ne devraient jamais se produire.

En plus de cela, je voudrais un niveau "d'intensité" pour chacun peut-être. Mais cela peut venir après la logique principale.

La météo est stockée dans MySQL.

Toutes vos suggestions sont les bienvenues, mais veuillez ne pas suggérer de cingler un code postal et de tirer la météo à partir de là.


En utilisant les suggestions de toutes les réponses ci-dessous, j'ai trouvé cette distribution non à l'échelle :

Modificateurs météorologiques en fonction de la semaine de l'année

Chaque fonction sera calculée avec un bruit aléatoire et la combinaison des 3 produira des effets de superposition.

(temp <0) et (humide> 65) => neige

Mikhail
la source
5
Soit dit en passant, neige + pluie est un temps valide.
Kromster
1
Eh bien, ce ne sera pas dans mon jeu. :-D
Mikhail
1
La neige n'est-elle pas uniquement le résultat de la pluie + basse température?
Philipp

Réponses:

9

Qu'en est-il de diviser le temps en parties plus détaillées?

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

Vous pouvez toujours le stocker dans une seule colonne SQL si vous le souhaitez en en faisant une énumération simple avec 48 (4 * 4 * 3) valeurs possibles (en supprimant tous les conflits étranges que vous n'aimez pas).

NtscCobalt
la source
7
Je penserais à diviser en "température", "vent" et "humidité". Ceux-ci pourraient alors être interprétés comme impliquant la pluie / la grêle / la neige / etc., sans jamais avoir de conflit.
Trevor Powell
7

Cela ressemble à un modèle de Markov caché qui pourrait vous être utile. Ceux-ci définissent certains états avec des probabilités statistiques de transitions d'un état à chacun des autres états en fonction de la fréquence relative dans les observations.

Vous pouvez définir certains états météorologiques par exemple «pluvieux» et «ensoleillé» et les probabilités de transitions de pluvieux à ensoleillé et ensoleillé à pluvieux et calculer par exemple la probabilité qu'il pleuvra bientôt en fonction de votre observation s'il est actuellement ensoleillé ou pluvieux . L' article Wikipédia explique cela mais ce tutoriel (PDF) montre une approche plus pratique.

Si vous modélisez de nombreux modèles météorologiques différents, il serait difficile de les modéliser indépendamment avec ce modèle, mais vous pouvez définir des conditions météorologiques telles que 'FogRain' ou 'WindSnow' 'SunWind' 'Sun' 'par exemple et avoir des probabilités pour chacune. Ces probabilités pourraient même être modifiées en fonction du mois en jeu par exemple. Il y a un petit problème à savoir, cependant, que la taille de votre matrice de probabilité augmentera de n ^ 2 à mesure que vous ajoutez plus de types de temps car chacun doit avoir des probabilités de transition (même si elles sont nulles) aux autres.

Martin Foot
la source
Modèle Markov, pas HMM.
Peter Taylor
+1 pour la simplicité. Avoir quelque chose de simple, réglable et compréhensible est beaucoup mieux que d'avoir quelque chose de précis et complexe. De plus, vous pouvez toujours le rendre plus chic si vous le souhaitez, et faire dépendre les probabilités de transition de quelque chose (altitude, biome local, etc.).
Michael
Bien que j'aime cela, c'est un peu gênant car les autres développeurs devraient penser aux transitions de probabilités. Combiné avec le fait que le temps dépend de la période de l'année, le modèle de Markov compliquerait probablement les choses
Mikhail
Je comprends peut-être mal votre suggestion. Pour chaque mois, je devrais avoir une table n ^ 2 de probabilités de transition, non? Où N est le 2 ^ W de toutes les conditions météorologiques. Ainsi, avec 3 modèles météorologiques, j'aurais 64 probabilités pour un seul mois
Mikhail
@Mikhail pour chaque mois, vous auriez un tableau des probabilités de transition de chaque condition météorologique à chaque autre condition, mais cela ne doit pas nécessairement être N ^ 2 dans la complexité de l'espace car il ne doit pas être une matrice (pourrait être une structure de graphique cyclique avec chaque branche pointant vers l'une des valeurs suivantes de la chaîne avec une probabilité attachée). Ce n'est pas si difficile à conceptualiser, mais vous aimerez peut-être le diviser tous les 2-3 mois plutôt que tous les mois. Cet article est meilleur que celui que j'ai précédemment lié, pourrait aider davantage!
Martin Foot
4

En bref..

Je penserais cela à travers la science.

Comme nous le savons tous, la neige est de la pluie et vice versa, sauf qu'ils ont des états solides différents en raison des changements de température.

Les changements de température peuvent être associés aux vents.

Un rapide Google pour "ce qui cause le vent" m'a donné une réponse d'Answers.com:

"La force du gradient de pression, qui résulte du chauffage inégal de la surface de la terre. Une fois en mouvement, la force de Coriolis provient de la rotation de la Terre pour la dévier (à droite dans l'hémisphère nord, à gauche dans l'hémisphère sud)."

Oui, ce n'est pas la meilleure source de questions scientifiques, mais ça donne l'idée.

Donc, théoriquement, vous n'avez besoin que de vent maintenant. Il peut être aléatoire ou bien être en quelque sorte scripté pour votre environnement qui se réchauffe en raison de certains événements.

Prenez le vent maintenant, appliquez à votre position actuelle, et au hasard ou par le biais d'un script, faites-en des nuages. Plus le nuage est dense, plus la probabilité et la densité de la pluie sont importantes. Si la température est suffisamment basse, la pluie se transforme en neige. Déplacez le nuage et rendez-le "moins dense" avec ce vent.

Quant à l'affichage, c'est à vous de décider, il suffit de mettre en cache les états des particules qui tombent, if rain -> use water drop textureet if snow -> use snowflake texture. Utilisez le vent pour faire bouger ces particules en fonction de la direction du vent (oui, vous devriez aussi stocker celle-ci quelque part) pour la rendre un peu plus réaliste.

Et avec cela, vous pouvez développer tout. Par exemple, s'il y a de la neige qui tombe et que les flocons de neige tombent près d'une source de chaleur, changez à nouveau la texture des particules en pluie.

Beaucoup de possibilités en fait, ce n'est qu'un concept simple.

PS En ce qui concerne la grêle, regardez ce qui les rend, élargissez le concept pour un tel environnement.

Amusez-vous, bonne chance.

joltmode
la source