Algoritma untuk Cuaca Acak


8

Saya mengalami kesulitan memodelkan cuaca. Pemodelan aspek tunggal sepele - beberapa pola sinusoidal + noise acak. Namun lebih dari 1 meniupkan pikiran saya. Saya tidak bisa memiliki angin, daun yang jatuh, hujan, dan salju semuanya menjadi acak. Tabrakan sederhana seperti hujan dan salju tidak boleh terjadi.

Selain itu, saya ingin level "intensitas" untuk masing-masing. Tapi ini bisa muncul setelah logika utama.

Cuaca disimpan di MySQL.

Semua saran Anda dipersilakan, tapi tolong jangan menyarankan melakukan ping kode pos dan menarik cuaca dari sana.


Memanfaatkan saran dari, sebenarnya, semua jawaban di bawah ini saya telah datang dengan distribusi tidak-skala ini :

Pengubah Cuaca sebagai fungsi minggu dalam setahun

Setiap fitur akan dihitung dengan noise acak, dan kombinasi dari 3 akan menghasilkan efek overlay.

(temp <0) dan (lembab> 65) => salju


5
Ngomong-ngomong, salju + hujan adalah cuaca yang valid.
Kromster

1
Yah, itu tidak akan ada dalam game saya. :-D
Mikhail

1
Bukankah salju hanya hasil dari hujan + suhu rendah?
Philipp

Jawaban:


9

Bagaimana dengan membagi cuaca menjadi bagian yang lebih rinci?

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

Anda masih dapat menyimpan ini dalam kolom SQL tunggal jika Anda mau dengan membuatnya menjadi enum sederhana dengan 48 (4 * 4 * 3) nilai yang mungkin (menghapus konflik aneh yang tidak Anda sukai).


7
Saya akan berpikir tentang pemisahan menjadi "suhu", "angin", dan "kelembaban". Ini kemudian dapat diartikan sebagai hujan / hujan es / salju / dll, tanpa pernah memiliki konflik.
Trevor Powell

7

Kedengarannya seperti Model Markov Tersembunyi mungkin berguna bagi Anda. Ini mendefinisikan negara tertentu dengan probabilitas statistik transisi dari satu negara ke masing-masing negara lain berdasarkan frekuensi relatif dalam pengamatan.

Anda dapat menentukan beberapa keadaan cuaca misalnya 'hujan' dan 'cerah' dan probabilitas transisi dari hujan ke cerah dan cerah ke hujan dan menghitung misalnya kemungkinan bahwa itu akan segera hujan berdasarkan pengamatan Anda jika saat ini cerah atau hujan . The artikel Wikipedia menjelaskan ini, tetapi tutorial ini (PDF) menunjukkan pendekatan yang lebih praktis.

Jika Anda memodelkan banyak pola cuaca yang berbeda akan sulit untuk memodelkannya secara independen dengan pola ini, tetapi Anda dapat menentukan cuaca seperti 'FogRain' atau 'WindSnow' 'SunWind' 'Sun' misalnya dan memiliki probabilitas untuk masing-masing. Probabilitas ini bahkan dapat dimodifikasi berdasarkan bulan dalam game misalnya. Ada masalah kecil yang perlu diperhatikan meskipun ukuran matriks probabilitas Anda akan meningkat sebesar n ^ 2 saat Anda menambahkan lebih banyak jenis cuaca karena masing-masing harus memiliki probabilitas transisi (bahkan jika mereka nol) ke yang lain.


Model Markov, bukan HMM.
Peter Taylor

Diberi +1 untuk kesederhanaan. Memiliki sesuatu yang sederhana, dapat diatur dan dapat dipahami jauh lebih baik daripada memiliki sesuatu yang akurat dan kompleks. Plus Anda selalu dapat membuatnya lebih mewah jika Anda mau, dan membuat probabilitas transisi tergantung pada sesuatu (ketinggian, bioma lokal dll.).
Michael

Meskipun saya suka ini, itu sedikit merepotkan karena pengembang lain harus memikirkan transisi dalam probabilitas. Dikombinasikan dengan fakta bahwa cuaca tergantung pada waktu, model Markov mungkin akan mempersulit keadaan
Mikhail

Mungkin saya salah mengerti saran Anda. Untuk setiap bulan saya harus memiliki tabel probabilitas transisi n, 2 kan? Di mana N adalah 2 ^ W dari semua kondisi cuaca. Dengan demikian memiliki 3 model cuaca saya akan memiliki 64 probabilitas untuk satu bulan
Mikhail

@Mailail untuk setiap bulan Anda akan memiliki tabel probabilitas transisi dari setiap kondisi cuaca ke kondisi lainnya, tetapi ini tidak harus berupa N ^ 2 dalam kompleksitas ruang karena tidak harus berupa matriks (dapat menjadi struktur grafik siklik dengan setiap cabang menunjuk ke salah satu nilai berikutnya dalam rantai dengan probabilitas terpasang). Ini tidak terlalu sulit untuk dikonsep, tetapi mungkin Anda mungkin ingin membaginya setiap 2-3 bulan daripada setiap bulan. Artikel ini lebih baik daripada yang saya tautkan sebelumnya, mungkin bisa membantu lebih banyak!
Martin Foot

4

Pendeknya..

Saya akan memikirkan ini melalui sains.

Seperti kita ketahui, salju adalah hujan dan sebaliknya, kecuali mereka memiliki kondisi padat yang berbeda karena perubahan suhu.

Perubahan suhu dapat dikaitkan dengan angin.

Google cepat untuk "apa yang menyebabkan angin" memberi saya jawaban dari Answers.com:

"Gaya gradien tekanan, yang muncul dari pemanasan permukaan bumi yang tidak merata. Begitu bergerak, gaya Coriolis muncul dari rotasi Bumi untuk menangkisnya (tepat di belahan bumi utara, kiri di belahan bumi selatan)."

Aye, bukan sumber terbaik untuk pertanyaan ilmiah, tetapi itu memberikan ide.

Jadi, secara teori, Anda hanya perlu angin sekarang. Itu bisa acak, atau, mungkin entah bagaimana dituliskan ke lingkungan Anda yang memanas karena beberapa peristiwa.

Ambillah angin sekarang, terapkan pada posisi Anda saat ini, dan secara acak atau melalui cara yang dituliskan, buatlah awan keluar darinya. Semakin tebal awan, semakin besar probabilitas dan kepadatan hujan. Jika suhu cukup rendah, hujan menjadi salju. Gerakkan awan di sekitarnya dan buat "tidak terlalu padat" dengan angin itu.

Adapun tampilan, itu terserah Anda, cukup cache kondisi partikel jatuh, if rain -> use water drop texturedan if snow -> use snowflake texture. Gunakan angin untuk membuat partikel-partikel ini bergerak sesuai arah angin (ya, Anda harus menyimpan yang ini juga, di suatu tempat) untuk membuatnya sedikit lebih realistis.

Dan dengan ini Anda dapat memperluas segalanya. Seperti, jika ada salju yang jatuh dan butiran salju jatuh di dekat semacam sumber panas, ubah tekstur partikel menjadi hujan lagi.

Banyak kemungkinan sebenarnya, ini hanya konsep sederhana.

PS Adapun hujan es, lihat apa yang membuat mereka, memperluas konsep untuk lingkungan seperti itu.

Selamat bersenang-senang, semoga berhasil.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.