Membuat tata kota di kotak

9

Saya ingin membuat tata letak kota dalam kotak persegi (diberikan secara isometrik, tapi itu tidak masalah) menggunakan elemen berikut:

  • 2x2 Rumah
  • Jalan, lebar 1 unit
  • Kanal, lebar 1 unit

Tata letak sampel:

Tata letak sampel

  • Saya selalu memiliki sejumlah rumah tertentu, dan sebanyak mungkin jalan dan kanal yang diperlukan untuk menghubungkan semuanya.
  • Rumah-rumah harus memiliki dua buah jalan di depan pintu depan mereka (yang selalu menunjuk ke kanan)
  • Alangkah baiknya memiliki ladang rumput (kekosongan) peralihan.

Apakah ada algoritma yang sudah jadi untuk ini? Jika tidak, arah apa yang harus saya pikirkan untuk mengimplementasikan ini?

Bart van Heukelom
sumber

Jawaban:

8

Ada banyak cara untuk melakukannya, tergantung pada bagaimana tepatnya Anda menginginkannya. Berikut ini adalah garis besar kasar dari satu cara yang menurut saya sesuai dengan deskripsi Anda:

Pertama-tama buat kanal. Kemudian mulailah menempatkan rumah secara acak, untuk setiap rumah yang Anda tempatkan, letakkan jalan di depannya dan gambar jalan dari potongan itu ke jaringan jalan yang ada, jika salah satu tidak mungkin atau menempatkan jalan di depan menghasilkan blok 2x2 jelek. jalan reposisi rumah. Mendeteksi beberapa titik jalan yang dekat satu sama lain tetapi berjauhan mengikuti jalan yang ada dan mencoba membuat beberapa jalan pintas untuk itu.

Hal-hal semacam ini kebanyakan membutuhkan eksperimen dan pengalaman. Seringkali Anda akan mendapatkan hasil yang baik dari membuat beberapa detail secara acak, menentukan apakah itu memenuhi beberapa kriteria dan membatalkan dan coba lagi jika tidak.

Untuk tugas yang tepat ini Anda tentu juga perlu memahami dasar-dasar pencarian jalan, kecuali jika Anda sudah ahli, bacalah topiknya. Dan ingat, pencarian jalur tidak harus hanya tentang jalur terpendek, untuk bagian terakhir dari uraian saya, Anda mungkin ingin memberi bobot pada jalur penggunaan kembali yang sudah ada.

Ini sama sekali bukan tugas yang mudah, jika Anda macet kembali dan tunjukkan kode Anda dan beberapa contoh output dan jelaskan secara terperinci bagaimana Anda menginginkannya berbeda.

aaaaaaaaaaaa
sumber