Masalah menarik!
Saya telah melakukan hal serupa dengan poligon tidak beraturan (dalam hal ini, bangunan dikemas agar tidak tumpang tindih)
Digunakan postgresql dan postgis, dan python. Algoritma yang kasar adalah
- Temukan titik acak di kotak pembatas poligon (ST_Envelope)
- Jika titik di luar poligon, mundur satu langkah
- Buat geometri untuk pohon yang berpusat pada titik acak ini
- Jika itu tumpang tindih dengan pohon yang ditempatkan (ST_Overlaps), kembali untuk memulai
- Tambahkan pohon di titik
- Kembali untuk memulai
Saya tidak dapat menjamin ini akan memberikan global yang optimal, Anda akan memerlukan algoritma 'lingkaran pengepakan' untuk itu (seperti yang telah disebutkan orang lain).
Ini akan berlangsung selamanya, jadi Anda harus memasukkan beberapa kode untuk memutuskan kapan harus berhenti, misalnya
- ketika gabungan area pohon yang ditempatkan adalah persentase tertentu dari area poligon
- ketika dibutuhkan lebih dari N iterasi untuk menemukan pohon yang tidak tumpang tindih.
Menurut Circle Packing di Wikipedia, kepadatan pengepakan terbaik dicapai dengan kisi heksagonal. Dimungkinkan untuk membuat grid seperti itu menggunakan MMQGIS, yang jaraknya didasarkan pada ukuran pohon Anda, yang saya anggap identik. Kemudian menempatkan pohon di setiap dhuwur. Tetapi kemudian, Anda memiliki masalah untuk mengetahui di mana menempatkan grid untuk memaksimalkan jumlah pohon.