Никак окончательно не могу расправиться с шариками. Вот такая задача. Есть два шарика. Шарики летят со скоростями v1 и v2, прямолинейно, скорости постоянны. Массы шариков m1 и m2, радиусы r1 и r2. В некоторый момент шарики сталкиваются. Определить векторы скоростей после соударения. Соударение абсолютно упругое. внешних сил нет, трения нет. Между шариками тоже, т.е. моментов вращения не будет. Пусть v1' и v2' - векторы скоростей после соударения. Тогда импульсы: p1 = m1 * v1 p2 = m2 * v2, и p1' = m1 * v1' p1' = m1 * v1' Из закона сохранения импульса: p1 + p2 = p1' + p2' Введем еще две величины. R1 и R2 - векторы смотрящие из центра соответственно первого и второго шарика в точку касания шариков в момент соударения. У меня пока только интуитивные догадки. p1' = p1 + F(R2, p2) p2' = p2 + F(R1, p1) Что же такое F(R, p)? У меня такая интуитивная догадка что это удвоенная проекция p на R. Но это лишь догадка, которую я еще не проверял. Кто-нибудь может сказать что-нибудь хорошее по этому поводу?
_DEN_ Не очень хорошо... Что-то меня начинают терзать сомнения что закон сохранения импульса не будет тут выполнсяться...
Так, кажется что-то проясняется. Шарик после удара часть импульса отдаст и часть получит. Тоесть: p1' = p1 - PulseOut1 + PulseIn1 p2' = p1 - PulseOut2 + PulseIn2 Т.к. То что одаст первый получит второй и наоборот, получаем: PulseOut1 = PulseIn2 = pA PulseOut2 = PulseIn1 = pB и p1' = p1 - pA + pB p2' = p1 - pB + pA Если я все правильно понял, то с точки зрения геометрии: pA = p1 * abs(cos(alpha)) pB = p2 * abs(cos(beta)) Где alpha = угол n ^ p1 Где beta = угол n ^ p2, и n - нормаль к плоскости касания. Ну и последнее, сложим p1' = p1 - pA + pB p2' = p1 - pB + pA p1' + p2' = p1 - pA + pB + p2 - pB + pA = p1 + p2. Вроде так. Что скажите?
Есть неплохая книжка, называется Beginning Math and Physics for Game Programmers, издательство New Riders Publishing, 2004 г., там этот вопрос рассматривается, насколько я помню, весьма подробно. Про русский перевод я не знаю, в электронном виде англ. версию найти не сложно (согласно политике форума, сам линк постить не буду .
В исходниках\графика есть SSaveKit от Ron Thomas, там Balls на эту тему, прикольные 1142057391__Balls.scr
Все, для этой задачи нашел решение. Первые три поста - полная фигня Закон сохранения импульса в правильном виде |p1| + |p2| = |p1'| + |p2'| Далее, p1' = p1 + n * k p2' = p2 + n * k n - номаль в точке соприкоснования к плоскости касания. k - такое что: |p1| + |p2| = |p1 + n * k| + |p2 - n * k| Вот и все. Я думаю тема закрыта.
_DEN_ Хотя нет, уже не думаю У меня это уравнение уже в течение часа на дерайве крехтит. Результата пока нет. Товарисчи обладатели мапла или матлаба, попробуйте его пожалста решить если не лень Все переменные кроме k 3D векторы. Решить надо относительно k. |p1| + |p2| можно заменить просто на скаляр R.
krokus Интересно: Код (Text): (U1x * M1)+(U2x*M2)-(U1x-U2x)*M2 V1x= -------------------------------- M1+M2 (U1x * M1)+(U2x*M2)-(U2x-U1x)*M1 V2x= -------------------------------- M1+M2 Якобы все готово. Ладно, тогда вопрос откладывается до написания собственно кода. Как будет готово - прокомментирую.