Về cơ bản, đây là câu hỏi phân vùng không gian. Bạn có một không gian rộng lớn với các thùng chứa và một điểm cụ thể trong không gian đó, nó sẽ chạm vào những thùng chứa nào? Rất nhiều trò chơi phải giải quyết vấn đề này, vì vậy sẽ không có ý tưởng tồi khi bắt đầu ở đó. Tìm các bài viết về "phát hiện va chạm pha rộng".
Cách đơn giản nhất để làm điều này là chia không gian số của bạn thành một số lượng không đổi các phần. Mỗi phần biết được những bộ nào giao nhau với nó, một cái gì đó mà bạn tính toán bất cứ khi nào một bộ mới được thêm vào. Bây giờ, thay vì kiểm tra từng bộ đơn khi bạn có một điểm, bạn chỉ cần kiểm tra các bộ chứa trong phần mà điểm đó đang ở.
Một thuật toán tổng quát và hiệu quả khác được sử dụng là Phân tách không gian nhị phân. Thuật toán này chia nhỏ không gian của bạn thành hai mặt. Mỗi bên sẽ biết những bộ nào giao nhau với nó. Bạn có thể lặp lại quá trình này một cách đệ quy đến độ chính xác mong muốn của bạn (mặc dù nó không có ý nghĩa để tạo ra một phân khu nhỏ hơn phạm vi của tập nhỏ nhất của bạn).
Hạn chế về bộ nhớ? – ChaosPandion
Không có ràng buộc về bộ nhớ –
Giải pháp Java: https://stackoverflow.com/questions/13399821/data-structures-that-can-map-a-range-of-keys-to-a-value – Vadzim