Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Движение


Автор: HellanD 3.5.2007, 08:50
Знаю что есть похожие темы но в них ответа увы нен нашел....
Задача стоит так:
Нужно нарисовать шар радиусом 2...Который бы двигался в поле 300*300, А попадая на стенку упруго отскакивал бы...
Подскажите какую методику применить для реализации столкновений...


Автор: SparF 3.5.2007, 09:08
задача поставлена несколько некорректно)
если это шар, то он не может двигаться в двумерном пространстве:
Цитата(HellanD @  3.5.2007,  08:50 Найти цитируемый пост)
Который бы двигался в поле 300*300

тогда уж в трехмерном)
в простейшем случае (2d) необходимо определить факт пересечения окружности с прямой (делать это перед каждым смещением окружности на пиксел вперед)
и если это пересечение есть, значит нужно изменить направление движения на противоположное (в смысле - "отскочить"), можно учитывая при этом угол отражения/отскока)))

Автор: HellanD 3.5.2007, 09:18
Да на счет шара я погарячился.... Вот и вправду при столкновении с границами я так и делал.... Но а вот в общем случае если я еще добвлю другие кружки которык будут тоже летать (в многопоточном режиме)... Как мне реализовать упругое столкновение между ними?

Автор: SparF 3.5.2007, 09:44
Цитата(HellanD @  3.5.2007,  09:18 Найти цитируемый пост)
Как мне реализовать упругое столкновение между ними? 

аналогично)
только пересекаться будут не прямая и окружность, а еще и окружность-окружность
а окружности двигаться по очереди(1-2-3-4-пауза-1-2-3-4-пауза-1-2.....), чтобы при расчете движения одного все остальные-стояли, для глаза это не будет заметно

Автор: Promitheus 3.5.2007, 13:45
В Microsoft DirectX SDK 9.0c за август 2006 года (может и в других есть, но я только эту сдк смотрел) есть как раз такой пример. Там сделан небольшой движок и по нажатию на левую кнопку мыши выпадает шарик и двигается по физическим законам, при столкновении между собой они также упруго отталкиваются. Всё сделано достаточно реалистично и впринципе не очень сложно закон движения по x,y,z на уровне школьной физики. 

Не знаю как в реальных играх делается (наверняка как то снижают вычисления), но там цикл каждый шарик сравнивается с каждым, а потом с каждой стенкой (включая потолок и пол), если пересечинее шара с шаром, то отскок, со стенкой также, если он уже исчерпал заложенную энергию то остановка и тэдэ. Надеюсь общая идея ясна.

DX SDK работает на 2003 и 2005 студии, весит порядка 600-700 метров. Лежит на сайте Майкрософта.

 

Автор: likehood 3.5.2007, 14:36
Отскок шаров: в момент столкновения проводим линию через центры шаров (она будет осью x); ось y - ортогональна x (направление не важно). Находим проекции вектора скорости для обоих шаров на эти оси. Так вот, проекции скорости на ось y  не изменяются, а проекции на ось x меняются местами (если шары одной массы).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)