Apakah ada algoritma untuk menghasilkan petir?
Saya ingin algoritma yang menghasilkan daftar objek segmen atau titik yang menentukan di mana baut akan mendarat. Metode ini membutuhkan parameter titik awal, bersama dengan titik akhir. Baut harus memiliki cabang acak yang keluar darinya, dan zig-zag pada interval acak. Hasilnya akan menjadi efek kilat acak yang akan terlihat seperti ini
(sumber: wikimedia.org )
Jika ada yang tahu tentang algoritma yang dapat bekerja untuk ini, bantuan akan sangat dihargai!
algorithm
graphic-effects
Geoffroi
sumber
sumber
Jawaban:
Ada algoritma yang cukup sederhana yang dapat Anda gunakan untuk menghasilkan baut pencahayaan.
Mulai dengan segmen garis antara asal baut (
O
) dan titik akhir (E
)Pilih satu titik pada garis itu (kira-kira atau tepatnya di tengah), panggil
S
dan bagi segmen menjadi dua segmen garis (O->S
danS->E
). MengusirS
dari segmen garis asli (sepanjang normal segmen) dengan sedikit jumlah acak. Ini memberi Anda satu "tikungan" petir.Setelah menghitung tikungan, berdasarkan peluang acak kecil, Anda ingin menambahkan segmen garis ketiga (biasanya ekstensi
O->S
segmen). Ini adalah bagaimana Anda menghasilkan "garpu" di petir. Anda biasanya ingin melacak informasi tentang intensitas baut selama proses pembuatan ini, karena Anda ingin garpu menjadi lebih redup atau memiliki kekaburan yang lebih halus:Lalu, ulangi proses di atas untuk semua segmen baris baru yang Anda miliki; Anda harus memilih jumlah pengulangan yang menghasilkan bentuk yang Anda sukai:
Ada penjelasan yang cukup jelas tentang teknik ini di blog teman saya di sini (di situlah saya tanpa malu mencuri gambar dari); itu masuk ke kedalaman tambahan tentang menambahkan efek cahaya juga.
Akhirnya, ada juga makalah NVIDIA ini yang menggambarkan algoritma dasar yang sama (juga dengan lebih detail).
sumber
Saya akan merekomendasikan pendekatan alternatif: pohon acak mengeksplorasi cepat (RRT) . Satu hal yang keren tentang itu adalah Anda bisa membuatnya berputar-putar, atau meledak ke segala arah.
Algoritma ini sangat mendasar:
Dengan memodifikasi
RandomSample
danExtendToward
fungsinya, Anda bisa mendapatkan pohon yang sangat berbeda. JikaRandomSample
hanya sampel seragam di mana-mana, pohon akan tumbuh seragam di semua arah. Jika bias terhadap tujuan, pohon akan cenderung tumbuh ke arah tujuan. Jika selalu sampel tujuan, pohon akan menjadi garis lurus dari awal hingga tujuan.ExtendToward
dapat memungkinkan Anda untuk melakukan hal-hal menarik ke pohon juga. Untuk satu hal, jika Anda memiliki hambatan (seperti dinding), Anda bisa membuat pohon tumbuh di sekitar mereka hanya dengan menolak ekstensi yang bertabrakan dengan dinding.Ini terlihat seperti ketika Anda tidak bias mengambil sampel ke arah tujuan:
(sumber: uiuc.edu )
Dan inilah yang terlihat seperti dengan dinding
Beberapa properti keren RRT setelah selesai:
sumber