Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 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)
 
Ответить с цитированием
Старый 04.05.2012, 14:07   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Обнаружение столкновения двух линейно движущихся объектов при известных координатах...

Ну так решай квадратное уравнение, которое у тебя получилось, и ищи корни. Корни и будут решением или не решением.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 04.05.2012, 19:12   #3
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Обнаружение столкновения двух линейно движущихся объектов при известных координатах...

У тебя есть два отрезка, уравнение прямой по двум точкам (x-x1)/(x2-x1)=(y-y1)/(y2-y1). Найти точку пересечения двух прямых вроде не очень сложно, посмотреть лежит ли икс точки пересечения между иксом первого шарика до движения и иксом после, тоже легко. Еще следует проверить чтобы второй объект находился в радиусе досягаемости от точки пересечения в момент когда первый достигнет ее.
Сорри, если я неправильно понял задачу.
(Offline)
 
Ответить с цитированием
Старый 06.05.2012, 20:25   #4
nil0q
ПроЭктировщик
 
Аватар для nil0q
 
Регистрация: 30.06.2009
Адрес: Челябинская обл.
Сообщений: 111
Написано 32 полезных сообщений
(для 99 пользователей)
Ответ: Обнаружение столкновения двух линейно движущихся объектов при известных координатах...

Можно так: принять первый шар за начало координат и смотреть, не пролетит ли через него второй. Для этого (нам важно расстояние между центрами) можно к радиусу первого шара добавить радиус второго, а второй считать точкой. И задача сведётся к проверке, пересекает ли отрезок окружность.
Считаем расстояние от точки (центр 1-го шара) до прямой (траектория 2-го отн. 1-го). Если оно больше r1+r2, то столкновения не было. Если <=, то проверяем концы отрезка.
__________________
Аинéжарбази овокáсьф имятнэ́меле как, имякщтóт и имяини́ль оклёт ими́ньдо сяюзлёп, ильсы́м эынэвьтспóс ышáн мóнян тягалзи, эы́жущт тят-ищт сант-ищтý анакаккáт; áкызэй овóваримь авотэ́ як итя́ммарг тыжýлс аирьтэмяег аянлетя́трэщтанот, мадóраи мынавóзарбо мэ́сьф мынтáняп авокáныдя, икиньхэ́ть мóкызэй астэя́львэй шóтрэщт ильсэ́й.
Щамóпф раткáдэрь оидюá!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com