Algorithmus für randomisiertes Wetter

8

Es fällt mir schwer, das Wetter zu modellieren. Das Modellieren eines einzelnen Aspekts ist trivial - ein sinusförmiges Muster + zufälliges Rauschen. Allerdings hat mich mehr als 1 umgehauen. Ich kann Wind, fallende Blätter, Regen und Schnee nicht zufällig haben. Einfache Kollisionen wie Regen und Schnee sollten niemals auftreten.

Darüber hinaus möchte ich für jeden eine "Intensität". Dies kann jedoch nach der Hauptlogik erfolgen.

Das Wetter wird in MySQL gespeichert.

Alle Ihre Vorschläge sind willkommen, aber bitte schlagen Sie nicht vor, eine Postleitzahl zu pingen und das Wetter von dort abzurufen.


Unter Verwendung der Vorschläge aus allen folgenden Antworten habe ich mir diese nicht maßstabsgetreue Verteilung ausgedacht:

Wettermodifikatoren als Funktion der Woche des Jahres

Jedes Merkmal wird mit einem zufälligen Rauschen berechnet, und die Kombination der 3 erzeugt Überlagerungseffekte.

(Temp <0) und (feucht> 65) => Schnee

Mikhail
quelle
5
Schnee + Regen ist übrigens ein gültiges Wetter.
Kromster
1
Nun, es wird nicht in meinem Spiel sein. :-D
Mikhail
1
Ist Schnee nicht nur das Ergebnis von Regen + niedriger Temperatur?
Philipp

Antworten:

9

Was ist mit der Aufteilung des Wetters in detailliertere Teile?

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

Sie können dies weiterhin in einer einzelnen SQL-Spalte speichern, indem Sie eine einfache Aufzählung mit 48 (4 * 4 * 3) möglichen Werten erstellen (um alle seltsamen Konflikte zu entfernen, die Sie nicht mögen).

NtscCobalt
quelle
7
Ich würde darüber nachdenken, mich in "Temperatur", "Wind" und "Luftfeuchtigkeit" aufzuteilen. Diese könnten dann so interpretiert werden, dass sie Regen / Hagel / Schnee / usw. implizieren, ohne jemals einen Konflikt zu haben.
Trevor Powell
7

Es klingt so, als ob ein Hidden Markov-Modell für Sie nützlich sein könnte. Diese definieren bestimmte Zustände mit statistischen Wahrscheinlichkeiten für Übergänge von einem Zustand zu jedem der anderen Zustände basierend auf der relativen Häufigkeit von Beobachtungen.

Sie können einige Wetterzustände definieren, z. B. "regnerisch" und "sonnig", und die Wahrscheinlichkeit von Übergängen von "regnerisch" zu "sonnig" und "sonnig" zu "regnerisch", und beispielsweise die Wahrscheinlichkeit berechnen, dass es bald regnen wird, basierend auf Ihrer Beobachtung, ob es derzeit sonnig oder regnerisch ist . Der Wikipedia-Artikel erklärt dies, aber dieses Tutorial (PDF) zeigt einen praktischeren Ansatz.

Wenn Sie viele verschiedene Wettermuster modellieren, ist es schwierig, sie unabhängig voneinander mit diesem Muster zu modellieren. Sie können jedoch Wetter wie "FogRain" oder "WindSnow", "SunWind", "Sun" definieren und für jedes Muster Wahrscheinlichkeiten festlegen. Diese Wahrscheinlichkeiten könnten beispielsweise sogar basierend auf dem Monat im Spiel geändert werden. Es ist jedoch ein kleines Problem zu beachten, dass die Größe Ihrer Wahrscheinlichkeitsmatrix um n ^ 2 zunimmt, wenn Sie mehr Wettertypen hinzufügen, da jeder Übergangswahrscheinlichkeiten (auch wenn sie Null sind) zu den anderen haben muss.

Martin Fuß
quelle
Markov-Modell, nicht HMM.
Peter Taylor
Der Einfachheit halber + 1. Etwas Einfaches, Abstimmbares und Verständliches zu haben ist viel besser als etwas Genaues und Komplexes. Außerdem können Sie es jederzeit schicker machen, wenn Sie möchten, und die Übergangswahrscheinlichkeiten von etwas abhängen (Höhe, lokales Biom usw.).
Michael
Obwohl mir das gefällt, ist es etwas unpraktisch, da andere Entwickler über Übergänge bei Wahrscheinlichkeiten nachdenken müssten. In Kombination mit der Tatsache, dass das Wetter von der Jahreszeit abhängt, würde das Markov-Modell wahrscheinlich die Dinge komplizieren
Mikhail
Vielleicht verstehe ich Ihren Vorschlag falsch. Für jeden Monat müsste ich eine Tabelle mit Übergangswahrscheinlichkeiten haben, oder? Wobei N die 2 ^ W aller Wetterbedingungen ist. Wenn ich also 3 Wettermodelle hätte, hätte ich 64 Wahrscheinlichkeiten für einen Monat
Mikhail
@Mikhail für jeden Monat hätten Sie eine Tabelle mit Übergangswahrscheinlichkeiten von jeder Wetterbedingung zu jeder anderen Bedingung, aber dies muss nicht unbedingt N ^ 2 in der Raumkomplexität sein, da es keine Matrix sein muss (könnte) eine zyklische Graphstruktur sein, wobei jeder Zweig mit einer angehängten Wahrscheinlichkeit auf einen der nächsten Werte in der Kette zeigt). Es ist nicht so schwer zu konzipieren, aber vielleicht möchten Sie es eher alle 2-3 Monate als jeden Monat aufteilen. Dieser Artikel ist besser als der, den ich zuvor verlinkt habe, könnte mehr helfen!
Martin Foot
4

Zusamenfassend..

Ich würde das durch Wissenschaft denken.

Wie wir alle wissen, ist Schnee Regen und umgekehrt, außer dass sie aufgrund von Temperaturänderungen unterschiedliche Festkörper haben.

Temperaturänderungen können mit Winden verbunden sein.

Ein schnelles Google für "Was Wind verursacht" gab mir eine Antwort von Answers.com:

"Die Druckgradientenkraft, die durch die ungleichmäßige Erwärmung der Erdoberfläche entsteht. Sobald sie in Bewegung ist, entsteht die Coriolis-Kraft aus der Erdrotation, um sie abzulenken (rechts auf der Nordhalbkugel, links auf der Südhalbkugel)."

Ja, nicht die beste Quelle für wissenschaftliche Fragen, aber es gibt die Idee.

Theoretisch brauchen Sie jetzt nur noch Wind. Es kann zufällig sein oder auch irgendwie in eine Umgebung geschrieben werden, die sich aufgrund einiger Ereignisse erwärmt.

Nehmen Sie jetzt Wind, wenden Sie sich an Ihre aktuelle Position und machen Sie zufällig oder durch ein Skript Wolken daraus. Je dichter die Wolke ist, desto größer ist die Wahrscheinlichkeit und Dichte des Regens. Wenn die Temperatur niedrig genug ist, wird Regen zu Schnee. Bewegen Sie die Wolke und machen Sie sie mit diesem Wind "nicht so dicht".

Was die Anzeige betrifft, liegt es an Ihnen, einfach die Zustände der fallenden Partikel zwischenzuspeichern if rain -> use water drop textureundif snow -> use snowflake texture . Verwenden Sie den Wind, um diese Partikel entsprechend der Windrichtung zu bewegen (ja, Sie sollten diese auch irgendwo aufbewahren), um sie etwas realistischer zu gestalten.

Und damit können Sie alles erweitern. Wenn beispielsweise Schnee fällt und die Schneeflocken in der Nähe einer Wärmequelle fallen, ändern Sie die Partikelstruktur wieder in Regen.

Viele Möglichkeiten, dies ist nur ein einfaches Konzept.

PS Was den Hagel betrifft, schauen Sie, was diese ausmacht, und erweitern Sie das Konzept für eine solche Umgebung.

Viel Spaß, viel Glück.

Ruckmodus
quelle