forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Обнаружение столкновения двух линейно движущихся объектов при известных координатах... (http://forum.boolean.name/showthread.php?t=16746)

YellowAfterlife 04.05.2012 12:25

Обнаружение столкновения двух линейно движущихся объектов при известных координатах...
 

Есть два круглых объекта, которые передвигаются с (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 соответственно.

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

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

pax 04.05.2012 14:07

Ответ: Обнаружение столкновения двух линейно движущихся объектов при известных координатах...
 
Ну так решай квадратное уравнение, которое у тебя получилось, и ищи корни. Корни и будут решением или не решением.

dsd 04.05.2012 19:12

Ответ: Обнаружение столкновения двух линейно движущихся объектов при известных координатах...
 
У тебя есть два отрезка, уравнение прямой по двум точкам (x-x1)/(x2-x1)=(y-y1)/(y2-y1). Найти точку пересечения двух прямых вроде не очень сложно, посмотреть лежит ли икс точки пересечения между иксом первого шарика до движения и иксом после, тоже легко. Еще следует проверить чтобы второй объект находился в радиусе досягаемости от точки пересечения в момент когда первый достигнет ее.
Сорри, если я неправильно понял задачу.

nil0q 06.05.2012 20:25

Ответ: Обнаружение столкновения двух линейно движущихся объектов при известных координатах...
 
Можно так: принять первый шар за начало координат и смотреть, не пролетит ли через него второй. Для этого (нам важно расстояние между центрами) можно к радиусу первого шара добавить радиус второго, а второй считать точкой. И задача сведётся к проверке, пересекает ли отрезок окружность.
Считаем расстояние от точки (центр 1-го шара) до прямой (траектория 2-го отн. 1-го). Если оно больше r1+r2, то столкновения не было. Если <=, то проверяем концы отрезка.


Часовой пояс GMT +4, время: 19:30.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot