Hareketli küreler arasındaki çarpışmayı tespit etmek için iyi bir algoritma nedir?


27

(Çarpışma tespiti amacıyla) 3D nesneler bir oyunda küreler tarafından temsil edilirse, küreler arasında bir çarpışmayı tespit etmek için iyi bir algoritma nedir?

Her nesnenin son kareden itibaren bir konumu ve yeni (istenen) bir konumu varsa, kürelerin önceki karede kesiştiği çarpışmaları tanımlayamayan ve ikinci karede kesişemeyecekleri iyi bir algoritma nedir, ama arada bir yerde kesiştiler mi?

Yanıtlar:


18

Temel olarak bir iz arıyorsun.

Bu sayfa muhtemelen size yardımcı olacaktır: http://www.realtimerendering.com/intersections.html

Hareketli Küre / Küre: (konum) Hareketli kürenin yarıçapını statik küreye ekleyin ve hareketli küreyi bir ışın olarak kabul edin. Işın / küre kesişimi gerçekleştirmek için bu ışını kullanın. Gomez bakın; Kod için Schroeder (makale türetme sırasında hata içeriyor, kod iyi); ve RTR2, s. 622.


1
Her iki küre de hareket ederse işe yaramaz (iki kere yapsanız bile). Bana göre ilk önce a hareketi ile bir b hareketi arasındaki çizgiler arasında bir mesafe kontrolü yapmanız gerekecek gibi görünüyor ve eğer bu a yarıçapı a + yarıçapı b'den küçükse olası bir çarpışma var. Ondan sonra, bu noktanın küre a için zamanın nerede olduğunu ve zamanların kapalı olup olmadığını görmek için küre b'nin nerede olduğunu kontrol edeceğim. Öyleyse, bu nokta için zamandaki mesafeye göre hızı kontrol edersem, yine de muhtemel bir çarpışma olursa, adım adım iyileştirme yapardım.
Kaj

15
Aslında öyle, hareketi göreceli hale getirmelisin. Eğer her iki küre de hareket ediyorsa, kürelerden birinin hızını her ikisinden de çıkarmanız yeterlidir; böylece bir "hareketli" küre ve bir "sabit" küre vardır. Sonra yukarıdakileri kullanabilirsiniz.
Tetrad


4

Başımın üstünden:

  1. Her bir dairenin ortasından, başladığı yerden o noktaya taşındığı yere iki çizgi parçası oluşturun.
  2. Bu iki çizgi parçası arasındaki minimum mesafeyi bulun; burada açıklandığı gibi .
  3. Eğer bu mesafe birinci dairenin yarıçapı artı ikincisine eşit veya daha küçükse, çarpışırlar; Aksi halde yapmadılar.

Ve hepsi bu kadar, bunun çok hızlı olmasını bekliyorum.


1

İşte bir başka güzel Gamasatura makalesi.


1
Bunun 7 yıl sonra olduğunu biliyorum, ancak bu cevap sadece bağlantı. Neyse ki bağlantı hala hayatta, ama olmasaydı, cevabınız ... bir cevap olmazdı.
Draco18

0

Bunu yapan biri olarak konuşmak: bu uğraşmaya değmez . Oyun tasarımınız kesinlikle buna ihtiyaç duymuyorsa ve neredeyse kesinlikle ihtiyaç duymuyorsa, süpürme konusunda gerçekten beklediğinizden daha fazla çaba harcayacaksınız. Ve istediğinden daha yavaş olacak.


Bildiğiniz herkes için bilardo oyunu yapıyor olabilir.
Kaj

Bir havuz oyunu yapıyorsa, “oyun tasarımının kesinlikle buna ihtiyacı var” .
deft_code 24:10

Haklısın , tekerleği yeniden icat etme . Ama sadece excersise için buna değer olabilir.
user712092

4
Cevap olarak doğrudan cesaretsizliğe katılmıyorum .
bobobobo

@Bobobobo ile aynı fikirdeyim, soru uğraşmaya değip değmeyeceği değil, bu konuyu gören bir kullanıcının maliyeti ne olursa olsun cevaba kesinlikle ihtiyacı olabilir. Bu yorum olarak daha iyi olurdu.
TomTsagk


0

Hareketli nesne için çarpışma algılamasına genellikle "Hacim hesaplanır" adı verilir, işte bu konuyla ilgili bazı kodlar / makaleler.

http://www.gpu-voxels.org/demos/ (Demo)

Kaynak kod kütüphaneleri:

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

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

https://github.com/gradientspace/geometry3Sharp

Makaleler:

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

https://www.cs.columbia.edu/~allen/PAPERS/abrams.swept.pdf (Maalesef kaynak kodu yok)

http://www.realtimerendering.com/intersections.html (Oldukça yoğun bağlantı koleksiyonu)


1
Sadece bir bağlantı içeren cevaplar (veya bu durumda, birkaç tane) gerçek bir cevap içermez. İlgili bilgileri, postanıza eklemelisiniz, böylece bu bağlantılar kesilirse postanız hala anlaşılabilir olur.
Draco18

Bağlantıların ardındaki bilgiler şu anda benden biraz daha iyi açıklıyor. Ayrıca, gerçek zamanlı olarak neler olup bittiğine dair bir algı veren bağlantıların ardında bir de demo videoları var.
TarmoPikaro

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.