Vấn đề thú vị!
Tôi đã làm một điều tương tự với đa giác không đều (trong trường hợp này, các tòa nhà được đóng gói để không chồng chéo)
Sử dụng postgresql và postgis, và python. Thuật toán thô
- Tìm điểm ngẫu nhiên trong hộp giới hạn của đa giác (ST_En phong bì)
- Nếu điểm bên ngoài đa giác, quay lại một bước
- Tạo một hình học cho cây tập trung vào điểm ngẫu nhiên này
- Nếu nó trùng với bất kỳ cây được đặt hiện tại (ST_Overlaps), hãy quay lại để bắt đầu
- Thêm cây tại điểm
- Trở lại điểm bắt đầu
Tôi không thể đảm bảo điều này sẽ mang lại sự tối ưu toàn cầu, bạn cần một thuật toán 'đóng gói vòng tròn' cho điều đó (như những người khác đã đề cập).
Nó sẽ tiếp tục mãi mãi, vì vậy bạn sẽ cần đặt một số mã để quyết định khi nào nên thoát, ví dụ:
- khi diện tích kết hợp của các cây được đặt là một tỷ lệ phần trăm diện tích đa giác nhất định
- khi phải mất nhiều hơn N lần lặp để tìm một cây không chồng chéo.
Theo Circle Packaging trên Wikipedia, mật độ đóng gói tốt nhất đạt được với lưới hình lục giác. Có thể tạo lưới như vậy bằng MMQGIS, khoảng cách dựa trên kích thước cây của bạn, mà tôi giả sử là giống hệt nhau. Sau đó đặt một cây trên mỗi đỉnh. Nhưng sau đó, bạn có vấn đề là biết nơi đặt lưới để tối đa hóa số lượng cây.