Hình cầu có thể sẽ giúp bạn với nhiều đối tượng chuyển động; bạn tính toán bán kính bình phương của đối tượng, và theo dõi nó từ trung tâm của nó. Nếu khoảng cách bình phương giữa các trung tâm của hai đối tượng nhỏ hơn tổng của bán kính bình phương của hai đối tượng, thì bạn có khả năng va chạm. Mọi thứ được thực hiện với khoảng cách bình phương; không có rễ vuông.
Bạn có thể sắp xếp các hàng xóm gần nhất theo khoảng cách bình phương tối thiểu giữa các đối tượng của bạn. Việc phát hiện va chạm có thể phức tạp, tất nhiên, và với những vật thể không có hình cầu, Bounding Spheres không nhất thiết sẽ giúp bạn có được thông tin va chạm, nhưng nó có thể cắt tỉa cây đối tượng bạn cần so sánh với va chạm khá độc đáo.
Bạn sẽ cần, tất nhiên, để theo dõi TRUNG TÂM của đối tượng của bạn; và lý tưởng bạn muốn cho mỗi đối tượng cứng nhắc, tránh phải tính toán lại các kích thước hình cầu (mặc dù phép tính toán lại không đặc biệt khó khăn, đặc biệt nếu bạn sử dụng một cây cứng nhắc với mỗi quả cầu của mình cho các vật thể không cứng nhắc, nhưng nó trở nên phức tạp).
Về cơ bản, để trả lời câu hỏi của bạn về cấu trúc dữ liệu, bạn có thể giữ tất cả các đối tượng của mình trong một mảng chính; Tôi muốn có một bộ các mảng "khu vực" bao gồm các tham chiếu đến các đối tượng trong mảng chủ mà bạn có thể sắp xếp các đối tượng vào một cách nhanh chóng dựa trên tọa độ Descartes của chúng; mảng "khu vực" nên có một chồng chéo được xác định ít nhất là 2x bán kính đối tượng lớn nhất trong mảng đối tượng chính của bạn (nếu điều đó khả thi; một câu hỏi về đối tượng giới hạn phạm vi hình cầu so với số lượng đối tượng rõ ràng là đi lên)
bạn đã có, bạn có thể thực hiện kiểm tra va chạm nhanh bằng cách so sánh khoảng cách của tất cả các đối tượng trong một vùng với nhau, một lần nữa, đây là nơi định nghĩa vùng trở nên quan trọng, bởi vì bạn đang cân bằng đáng kể số vùng Tuy nhiên, nó đơn giản hơn một chút chỉ vì các phép so sánh khoảng cách của bạn đi xuống các phép trừ đơn giản (và các hoạt động abs(), tất nhiên). các đối tượng và điều đó có thể không phải là tán thành, nhưng bạn đã giảm số lượng so sánh tiềm năng rất đáng kể vào thời điểm đó.
Về cơ bản, đó là hệ thống hai tầng; đầu tiên là mảng khu vực, theo đó bạn thực hiện sắp xếp thô trên cảnh của mình. Thứ hai, bạn có so sánh khoảng cách nội vùng của bạn; trong đó bạn sẽ làm phát hiện va chạm cơ bản của bạn và va chạm gắn cờ trên các đối tượng đã va chạm. Có lẽ là phòng trong loại thuật toán này để sử dụng cây trong xác định khu vực động để thậm chí ra kích thước khu vực của bạn để đảm bảo rằng kích thước khu vực của bạn không phát triển quá nhanh với các khu vực "đông đúc"; loại điều đó, mặc dù, là không tầm thường, bởi vì với các đối tượng có kích thước khác nhau, sắp xếp của bạn về mật độ trở nên ... phức tạp, để nói rằng ít nhất.
Tôi hiểu rằng việc sử dụng hình cầu sẽ làm cho thử nghiệm va chạm nhanh hơn một chút và sử dụng vùng phân vùng và giới hạn số lượng so sánh, NHƯNG bạn phải tính toán lại "vùng" này và điều này chậm? Tôi đang tìm kiếm một cấu trúc dữ liệu có thể cập nhật "các vùng" của nó một cách nhanh chóng. – esiegel