Який хороший алгоритм виявлення зіткнення між рухомими сферами?


27

Якщо (з метою виявлення зіткнень) 3D-об’єкти в грі представлені сферами, то який хороший алгоритм виявлення зіткнення між сферами?

Якщо кожен об'єкт має позицію останнього кадру та нову (бажану) позицію, це хороший алгоритм, який визначить зіткнення, коли сфери не перетиналися в попередньому кадрі, і вони можуть не перетинатися у другому кадрі, але вони перетиналися десь посередині?

Відповіді:


18

В основному ви шукаєте слід.

Ця сторінка, ймовірно, допоможе вам: http://www.realtimerendering.com/intersections.html

Рухома сфера / сфера: (розташування) Додайте радіус рухомої сфери до статичної сфери, і ставляться до рухомої сфери як до променя. Використовуйте цей промінь для виконання перетину променів / сфер. Див. Гомес; Шрьодер для коду (у статті є помилка у виведенні, код прекрасний); та RTR2, с. 622.


1
Це не працює, якщо обидві сфери рухаються, (навіть якщо ви робите це двічі). Мені здається, що вам слід спочатку провести перевірку відстані між лініями, що охоплюють рух a, і рухом, що охоплює b, і якщо це менше радіуса a + радіус b, у вас можливе зіткнення. Після цього я би зробив перевірку, щоб побачити, де цей момент часу для сфери a і де для сфери b, щоб побачити, чи близькі часи. Якщо так, я би перевірив швидкість проти відстані в часі для цієї точки, якщо це все-таки можливе зіткнення, я б здійснив покрокове уточнення.
Кай

15
Насправді це так, ви просто повинні зробити рух відносним. Отже, якщо обидві сфери рухаються, ви просто віднімаєте швидкість однієї із сфер обох, щоб у вас була одна «рухома» сфера та одна «нерухома» сфера. Тоді ви можете скористатися вищесказаним.
Тетрад


4

Вгорі голови:

  1. Створіть два сегменти рядка з середини кожного кола, звідки він починався, до якого він перемістився на цьому кроці часу.
  2. Знайдіть міні-відстань між цими двома рядковими відрізками; як тут пояснено .
  3. Якщо ця відстань менша або дорівнює радіусу першого кола плюс другого, вони стикаються; інакше вони цього не зробили.

І це все, що там є, я б очікував, що це буде досить швидко.


1

Ось ще одна приємна стаття про Гамасатура .


1
Я розумію, що це через 7 років, але ця відповідь є лише посиланням. На щастя, посилання ще жива, але якби не вона, ваша відповідь… не була б відповіддю.
Draco18s

0

Виступаючи як хтось, хто це зробив: не варто зайвих клопотів . Якщо ваш ігровий дизайн абсолютно не потребує цього, і це майже точно не виходить, ви витратите набагато більше зусиль, роблячись всебічнішими, ніж ви дійсно очікуєте. І буде повільніше, ніж ви цього хотіли.


Він міг би робити гру в більярд для всіх, хто знаєш.
Кай

Якщо він робив гру в більярд, його "ігровий дизайн абсолютно потрібен" .
deft_code

Ви маєте рацію, не винаходити колесо . Але тільки для вишуканих робіт це, можливо, того варто.
користувач712092

4
Я не погоджуюсь з прямим розчаруванням як відповіддю .
bobobobo

Я погоджуюся з @bobobobo, питання не в тому, чи варто цього клопоту чи ні, майбутньому користувачеві, який бачить цю тему, може абсолютно потрібна відповідь незалежно від вартості. Це було б краще як коментар.
TomTsagk

0

Існує стаття про виведення виявлення зіткнення з математикою на Flipcode . Він має круг-круг. Є як точно визначити точку зіткнення та перевірити, чи є зіткнення взагалі.


Я розумію, що це через 7 років, але ця відповідь є лише посиланням. На щастя, посилання ще жива, але якби не вона, ваша відповідь… не була б відповіддю.
Draco18s

0

Виявлення зіткнення для рухомого об’єкта зазвичай називається "Підрахунок об'єму", ось деякі коди / статті про цю тему.

http://www.gpu-voxels.org/demos/ (Демо)

Бібліотеки вихідного коду:

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

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

https://github.com/gradientspace/geometry3Sharp

Статті:

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

https://www.cs.columbia.edu/~allen/PAPERS/abrams.swept.pdf (На жаль, вихідний код немає)

http://www.realtimerendering.com/intersections.html (досить важка колекція посилань)


1
Відповіді, що містять лише посилання (або в цьому випадку декілька), не містять фактичної відповіді. Ви повинні включити у свою посаду відповідну інформацію, щоб, якщо ці посилання загинули, ваша публікація все ще зрозуміла.
Draco18s

Інформація за посиланнями трохи краще пояснює, ніж я на даний момент. За посиланнями також є демо-відео, яке дає певне уявлення про те, що відбувається в режимі реального часу.
ТармоПікаро

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.