Một thuật toán tốt để phát hiện sự va chạm giữa các quả cầu chuyển động là gì?


27

Nếu (với mục đích phát hiện va chạm) các vật thể 3D được thể hiện trong một trò chơi bằng các hình cầu, thì thuật toán tốt để phát hiện va chạm giữa các quả cầu là gì?

Nếu mỗi đối tượng có một vị trí như khung cuối cùng và vị trí mới (mong muốn), thì thuật toán tốt sẽ xác định các va chạm trong đó các quả cầu không giao nhau trong khung trước đó và chúng có thể không giao nhau trong khung thứ hai, Nhưng họ đã giao nhau ở đâu đó ở giữa?

Câu trả lời:


18

Về cơ bản bạn đang tìm kiếm một dấu vết.

Trang này có thể sẽ giúp bạn: http://www.realtimerendering.com/intersections.html

Di chuyển quả cầu / quả cầu: (vị trí) Thêm bán kính của quả cầu chuyển động vào quả cầu tĩnh và coi quả cầu chuyển động là một tia. Sử dụng tia này để thực hiện giao cắt tia / hình cầu. Xem Gomez; Schroeder cho mã (bài viết có lỗi trong đạo hàm, mã vẫn ổn); và RTR2, tr. 622.


1
Điều đó không hoạt động nếu cả hai quả cầu di chuyển, (thậm chí nếu bạn không làm điều đó hai lần). Dường như với tôi rằng trước tiên bạn phải thực hiện kiểm tra khoảng cách giữa các chuyển động kéo dài a và một chuyển động kéo dài b, và nếu đó nhỏ hơn bán kính a + bán kính b, bạn có thể xảy ra va chạm. Sau đó tôi sẽ kiểm tra xem điểm đó ở đâu trong thời gian cho hình cầu a và nơi hình cầu b để xem thời gian có gần không. Nếu vậy tôi sẽ kiểm tra tốc độ theo khoảng cách kịp thời cho thời điểm đó, nếu đó vẫn là một vụ va chạm có thể xảy ra, tôi sẽ thực hiện một bước tinh chỉnh.
Kaj

15
Trên thực tế, bạn chỉ cần làm cho phong trào tương đối. Vì vậy, nếu cả hai quả cầu đang chuyển động, bạn chỉ cần trừ đi vận tốc của một trong hai quả cầu từ cả hai quả cầu để bạn có một quả cầu "chuyển động" và một quả cầu "đứng yên". Sau đó, bạn có thể sử dụng ở trên.
Tết


4

Off đỉnh đầu của tôi:

  1. Tạo hai phân đoạn dòng từ giữa mỗi vòng tròn từ nơi nó bắt đầu đến nơi nó di chuyển đến trong bước thời gian đó.
  2. Tìm khoảng cách tối thiểu giữa hai đoạn đường đó; như được giải thích ở đây .
  3. Nếu khoảng cách đó nhỏ hơn hoặc bằng bán kính của vòng tròn thứ nhất cộng với vòng thứ hai thì chúng va chạm; nếu không thì họ đã không làm.

Và đó là tất cả những gì có, tôi mong rằng nó sẽ khá nhanh.


1

Đây là một bài viết Gamasatura tốt đẹp .


1
Tôi nhận ra đây là 7 năm sau, nhưng câu trả lời này chỉ là liên kết. May mắn là liên kết vẫn còn sống, nhưng nếu không, câu trả lời của bạn sẽ ... không phải là một câu trả lời.
Draco18

0

Nói như một người đã làm điều này: nó không đáng để phiền phức . Trừ khi thiết kế trò chơi của bạn hoàn toàn cần nó, và gần như chắc chắn là không, bạn sẽ tốn nhiều công sức hơn để làm việc hiệu quả hơn bạn mong đợi. Và nó sẽ chậm hơn bạn muốn.


Anh ta có thể làm một trò chơi bi-a cho tất cả những gì bạn biết.
Kaj

Nếu anh ấy làm một trò chơi bi-a, "thiết kế trò chơi của anh ấy hoàn toàn cần nó" .
deft_code

Bạn đã đúng, đừng phát minh lại bánh xe . Nhưng chỉ để kích thích nó có thể là giá trị nó.
dùng712092

4
Tôi không đồng ý với sự nản lòng trực tiếp như một câu trả lời .
bobobobo

Tôi đồng ý với @bobobobo, câu hỏi không phải là nó có đáng để phiền phức hay không, một người dùng trong tương lai thấy chủ đề này hoàn toàn có thể cần câu trả lời bất kể chi phí là bao nhiêu. Điều này sẽ tốt hơn như là một bình luận.
TomTsagk


0

Phát hiện va chạm cho đối tượng chuyển động thường được gọi là "Tính toán khối lượng quét", đây là một số mã / bài viết về chủ đề này.

http://www.gpu-voxels.org/demos/ (Bản trình diễn)

Thư viện mã nguồn:

https://github.com/fzi-forschungszentrum-informatik/gpu-voxels

https://libigl.github.io/tutorial/#swept-volume

https://github.com/gradronspace/geometry3Sharp

Bài viết:

http://gamma.cs.unc.edu/SV/sm03.pdf

https://www.cs.columbia.edu/~allen/PAPERS/abrams.swept.pdf (Không may không có mã nguồn)

http://www.realtimerendering.com/intersections.html (Bộ sưu tập liên kết khá nặng)


1
Câu trả lời chỉ chứa một liên kết (hoặc trong trường hợp này, một số) không chứa câu trả lời thực tế. Bạn nên bao gồm các thông tin liên quan trong bài đăng của mình để nếu các liên kết đó bị chết, bài đăng của bạn vẫn có thể hiểu được.
Draco18

Thông tin đằng sau các liên kết giải thích tốt hơn tôi vào lúc này. Ngoài ra còn có các video demo đằng sau các liên kết, cung cấp một số nhận thức về những gì đang xảy ra trong thời gian thực.
TarmoPikaro

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.