![]() |
|
||||||||||
|
|||||
|
Привет, Народ!
На флеш-сайтах можно встретить много примеров соударения шаров. Но, или в примерах простое отталкивание (инверсия одной координаты), или идет постепенное затухание. Может кто подскажет код к следующей задачи: Нужно смоделировать упругое нецентральное соударение двух разных по диаметру (диаметр символизирует массу) шаров с сохранением импульса. Прошу математиков-программистов помочь. На сайте есть чудесный пример "Шарики" http://www.flasher.ru/src/category_41_1/ Но даже если убрать "гравитацию" и "трение" идет постепенное замедление шаров. Спасибо. |
|
|||||
|
Цитата:
Юмор оценил. Отвечаю: "Кроме диссипативных потерь не надо учитывать искривление квадрупольного момента при входе в квазистатическое поле потенциальной ямы". Короче, относительно того, что ежели так сказать, то оно конечно! Ну а теперь к делу. Просмотри, плз, исходник, и если можешь, подправь код в такую сторону: - при соударении большого и малого шаров приращение скорости малого шара должно быть намного больше другого(закон инерции + сохранение импульса); - при непродолжительном наблюдении за настоящим роликом видно заметное замедление всех шаров , чего не требуется.Первостепенно желательно устранить второй "деффект". Спасибо. |
|
|||||
|
- Ну, ты могЁшь!
- Не могЁшь, а мОгешь!!! (из фильма "В бой идут одни старики") Привет, Silin! Спасибо, порадывал оригинальным кодом. Есть теперь над чем голову по вечерам поломать. "Картинка" на самом деле приблизилась к реальности. Единственное но, стала частенько замирать - а комп не слабый (может все-таки проклятая рекурсия ). Надо проверить как будет с 50-тью экземплярами работать - диффузию изображать.Но, пища для серого вещества появилась Спасибо. Ежели, что рожу - пришлю. Пока. |
|
|||||
|
Привет, Silin!
Спасибо, чуть позже разберусь. Есть новая работа срочная. Визуально пока разницу не обнаружил. Все равно есть переодическое замирание "картинка" на пол-секунды" чаще чем обычно, хотя проц загружен на 15-20%. Вопрос окончательно не закрыт. Тема очень интересная в плане разработки моделей диффузии, сохранения импульса, центральных и не центральных ударов и тптд...прст... Рад буду, если еще кто-нибудь поделится мыслями, идеями, кодом. До лучших времен. ![]() |
|
|||||
|
Привет.
Если схватить один шарик и натащить на другой то они залипают. Чтобы этого избежать, не надо проверять на столкновение 2 шара, если их векторы скорости направлены в разные стороны, даже при пересечении (шары разлетаются уже, либо один стоит, а другой отлетает от него). Проверяется просто: nx = ball2._x - ball._x; ny = ball2._y - ball._y; if( (ball.vx*nx+ball.vy*ny )>0 || (-ball2.vx*nx-ball2.vy*ny )>0 ){ можно проверять на пересечение } Здесь ball, ball2 - шарики; vx, vy - составляющие их скоростей. nx, ny - вектор - направленный от центра одного шара к другому. Проверяется знак скалярного произведения векторов => определяем факт того что хоть один шар движется в направлении другого. А в функции пересечений у тебя слишком много синусов, косинусов, извлечений корня и т.д. Можно и проще. Подумаю, может напишу как ![]() |
|
|||||
|
Привет, SamTakoy!
Спасибо за участие. Цитата:
Шары расходятся не встречаясь. Шары перекрываються после получения приращения. Траектории перекрываються после получения приращения. Во-втором и третем случае для подсчета правильного угла отклонения без синускосинусов не обойтись. Ведь может быть и не центральный удар, лобовой встречный, касательно-паралельный. Но! Замечание принимается для дальнейшего "обгладывания" Ну, SamTakoy, жду когда мысль посетит ![]() |
|
|||||
|
В общем, я как-то делал бильярд. Основная идея такая.
При столкновении двух шаров - "мысленно" проводим линию между их центрами. И переходим к новой системе координат, в которой эта линия становится осью ox. Т.е. преобразуем в эту систему координат составляющие их скорости: vx и vy. Рассматриваем удар в этой системе координат (получается простейший случай столкновения). В бильярде для шаров одинакового размера и массы я просто менял горизонтальные составляющие скоростей (т.к. удар абсолютно упругий), а вертикальные оставлял прежними (т.к. взаимодействие только по горизонтали, то вертикальные составляющие не влияют на удар). После этого найденные компоненты скоростей возвращал в старую систему координат. И вуаля! Все работает ![]() Для шаров разной массы отличие будет только в том как обменивать их горизонтальные составляющие скоростей (в зависимости от массы). (над этим придется подумать )Надеюсь, я понятно изложил ![]() Можешь еще вот здесь посмотреть по столкновениям: http://pmg.org.ru/russian/nehe/nehe30.htm |
![]() |
Часовой пояс GMT +4, время: 13:47. |
|
|
« Предыдущая тема | Следующая тема » |
|
|