Menghasilkan Kolam atau danau acak

9

Saya telah mengimplementasikan fungsi-fungsi yang dapat menggambar bentuk poligonal apa pun, namun saya tidak dapat menghasilkan bentuk halus yang meniru tepi-tepi bulat sebuah danau. Saya mencoba membuat dua lingkaran dan menggabungkan ujung-ujungnya tetapi tidak ada cukup variasi atau kehalusan untuk itu. Adakah yang punya petunjuk atau ide yang dapat menghasilkan bentuk seperti ini?

Manderin87
sumber
Saya sudah melihat ke kurva bezier, tampaknya saya mungkin bisa menghasilkan danau dari itu. Adakah yang punya pengalaman dengan mereka pada array 2d?
Manderin87

Jawaban:

8

alwynd menyebut Perlin noise. Inilah cara saya membuat bentuk pulau untuk generator peta poligon:

  1. Hasilkan suara perlin.
  2. Untuk setiap lokasi (x, y)di bitmap suara, menghitung jarak dari pusat, dinormalisasi sehingga bitmap adalah 2x2: (dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy).
  3. Lokasi (x, y)adalah bagian dari pulau jika noise[x, y] > 0.3 + 0.4*d*d. Langkah ini berupaya membuat bentuk bundar dengan memotong area yang jauh dari pusat.

Kepulauan sedikit lebih kasar daripada danau, jadi saya tidak yakin apakah bentuk ini sesuai dengan keinginan Anda. Saya telah memasang demo dari algoritma di atas , dengan tombol di bagian bawah untuk mengontrol dua angka ajaib. Mungkin ada nilai yang berbeda dari angka ajaib 0,3 dan 0,4 yang menghasilkan bentuk yang Anda suka.

amitp
sumber
2
Pekerjaan Anda adalah inspirasi utama, Amit. + 10rb jika saya bisa, selama 5 tahun keheranan dan kenikmatan saya telah keluar dari membaca blog Anda.
Insinyur
4

Anda dapat menggunakan algoritme Perlin Noise untuk menghasilkan danau untuk Anda, jika Anda menggunakan tampilan atas ke bawah (bentuk poligon, seperti Anda), orang dari Stanford ini melakukan hal itu.

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

alwynd
sumber
1
"Orang itu dari Stanford" juga pengguna di situs ini, FYI.
Insinyur
siapa yang tidak =) Saya mungkin memulai dari beberapa kebisingan (perlin, fraktal), tetapi mengaburkan hasilnya untuk hasil yang kurang "jaggy". Artikel bagus, btw - suka bagaimana dia melakukan sungai.
Jari Komppa
0

Salah satu caranya adalah memulai dengan poligon dasar, mungkin pendekatan 2 lingkaran Anda.

Pertama-tama, atur semua titik secara acak, jadi tidak terlihat seperti lingkaran, lalu untuk setiap sisi, bagi menjadi 2 dan offset titik tengah dengan sedikit jumlah acak. Terus lakukan ini sampai Anda memiliki detail yang diperlukan.
Ini mirip dengan apa yang dilakukan saat membuat garpu petir.

George Duckett
sumber