ランダム化された天気のアルゴリズム


8

天気のモデリングに苦労しています。単一のアスペクトのモデリングは簡単です-いくつかの正弦波パターン+ランダムノイズ。しかし、1つ以上が私の心を吹き飛ばしています。風、葉っぱ、雨、雪をランダムにすることはできません。雨や雪のような単純な衝突は決して起こらないはずです。

これに加えて、多分それぞれの「強度」レベルが欲しいです。しかし、これはメインロジックの後に来る可能性があります。

天気はMySQLに保存されます。

提案はすべて大歓迎ですが、郵便番号にpingを送信してそこから天気を取得することを提案しないでください。


実際、以下のすべての回答からの提案を利用して、私はこの非スケールの分布考え出しました:

年間の週の関数としての気象修飾子

各フィーチャはランダムノイズで計算され、3つの組み合わせによりオーバーレイ効果が生成されます。

(気温<0)および(湿度> 65)=>雪


5
ちなみに、snow + rainは有効な天気です。
Kromster

1
まあ、それは私のゲームには含まれません。:-D
ミハイル

1
雪は単に雨+低温の結果ではありませんか?
Philipp

回答:


9

天気をより詳細な部分に分割するのはどうですか?

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

必要に応じて、48(4 * 4 * 3)の値を持つ単純な列挙型にすることで、これを単一のSQL列に格納することもできます(気に入らない奇妙な競合を削除します)。


7
「温度」「風」「湿度」に分けて考えています。これらは、衝突することなく、雨/あられ/雪などを意味すると解釈できます。
Trevor Powell

7

隠れマルコフモデルが役立つかもしれません。これらは、観測の相対頻度に基づいて、ある状態から他の各状態への遷移の統計的確率を持つ特定の状態を定義します。

たとえば、「雨」と「晴れ」などのいくつかの気象状態と、雨から晴れ、晴れから雨への移行の確率を定義し、たとえば、現在晴れであるか雨であるかの観察に基づいて、すぐに雨が降る確率を計算できます。 。Wikipediaの記事は、このことを説明したが、このチュートリアル(PDF)は、より実用的なアプローチを示しています。

多くの異なる気象パターンをモデル化している場合、このパターンで個別にモデル化することは困難ですが、たとえば「FogRain」や「WindSnow」「SunWind」「Sun」などの気象を定義して、それぞれに確率を設定できます。これらの確率は、たとえばゲーム内の月に基づいて変更することもできます。ただし、気象タイプを追加すると、それぞれが他のタイプに遷移確率(ゼロであっても)を持つ必要があるため、確率行列のサイズがn ^ 2増加することに注意してください。


HMMではなくマルコフモデル。
Peter Taylor、

簡単にするために+1しました。シンプルで調整可能で理解しやすいものを用意することは、正確で複雑なものを用意するよりもはるかに優れています。さらに、必要に応じていつでもそれをより洗練されたものにし、遷移の確率を何か(高度、ローカルバイオームなど)に依存させることができます。
Michael

私はこれが好きですが、他の開発者が確率の推移について考えなければならないので、それは少し不便です。マルコフモデルは、天候が1年のうちの1年に依存するという事実と相まって、事態を複雑にする可能性があります
ミハイル

おそらく私はあなたの提案を誤解しています。毎月、遷移確率のn ^ 2テーブルが必要になりますよね?ここで、Nはすべての気象条件の2 ^ Wです。したがって、3つの気象モデルがあると、1か月間64の確率になります
Mikhail

各月の@Mikhailには、各気象条件から他の条件への遷移確率のテーブルがありますが、これはマトリックスである必要がないため、空間の複雑度で必ずしもN ^ 2である必要はありません(循環グラフ構造であり、各ブランチはチェーン内の次の値の1つを指し示し、確率が付加されています)。概念化することはそれほど難しくありませんが、おそらく、毎月ではなく2〜3か月ごとに分割することをお勧めします。この記事は、以前にリンクした記事よりも優れています。
マーティンフット

4

要するに..

私はこれを科学で考えています。

誰もが知っているように、雪は雨であり、その逆も同様です。ただし、気温の変化により固体の状態が異なる場合があります。

温度変化は風に関連付けられます。

「風の原因」をすばやくGoogleに回答してAnswers.comから回答を得ました。

「圧力勾配力は、地表の不均一な加熱から発生します。運動すると、コリオリ力は地球の自転から発生してそれを偏向させます(北半球では右、南半球では左)。」

ええ、科学的な質問のための最良の情報源ではありませんが、それはアイデアを与えます。

したがって、理論的には、今必要なのは風だけです。ランダムな場合もあれば、なんらかのイベントによって発熱する環境に何らかの形でスクリプト化されている場合もあります。

今すぐ風を吹いて、現在の位置に適用し、ランダムに、またはスクリプト化された方法で、雲を作ってください。雲が濃いほど、雨の確率と密度が高くなります。気温が十分に低い場合、雨は雪になります。雲を動かして、その風で「それほど濃くない」ようにします。

ディスプレイ用として、あなた次第だと、ちょうど落下する粒子の状態をキャッシュし、if rain -> use water drop textureそしてif snow -> use snowflake texture。風を使用して、これらのパーティクルを風の方向に沿って移動させます(そう、これもどこかに保存する必要があります)。

そして、これですべてを拡張できます。たとえば、雪が降っていて、雪片が何らかの熱源の近くに降りてきた場合は、パーティクルテクスチャを再び雨に変更します。

実際には多くの可能性がありますが、これは単なる概念です。

PSひょうについては、何がそれを作っているのかを見て、そのような環境の概念を拡大してください。

楽しい、頑張ってください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.