Показать сообщение отдельно
Старый 04.05.2012, 12:25   #1
YellowAfterlife
ПроЭктировщик
 
Аватар для YellowAfterlife
 
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений
(для 219 пользователей)
Обнаружение столкновения двух линейно движущихся объектов при известных координатах...


Есть два круглых объекта, которые передвигаются с (x1, y1) к (x1 + dx1, y1 + dy1) и (x2, y2) к (x2 + dx2, y2 + dy2) соответственно, в промежутке времени. Нужно определить, было ли между ними столкновение.

Согласно моей нехитрой логике, проверка заключается в нахождении t для этой формулы:
((x1 + dx1*t) - (x2 + dx2*t))2 + ((y1 + dy1*t) - (y2 + dy2*t))^2 <= (r1 + r2)^2 (более читаемый вариант)
Если 0 <= t <= 1, то объекты сталкивались.

Теперь собственно проблема - я не могу придумать, как сделать для этого функцию, что принимала бы упомянутые 8 значений и возвращала t для них.
Мои попытки разложить данную формулу на бумаге пока что закончились лишь более длинной формулой с тремя группами значений, домножаемых на 1, t, t^2 соответственно.

Данные вычисления предназначены для проверки столкновений в играх с "свободным" количеством кадров в секунду, где неизвестна точная граница производительности для отдельного игрока/устройства.

Предложения по реализации этого (математика/псевдокод/идеи?) и аналогичные алгоритмы для достижения данной цели приветствуются.
Хорошего дня.
__________________

Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
(Offline)
 
Ответить с цитированием