Столкновение шариков в 3D

Тема в разделе "WASM.A&O", создана пользователем _DEN_, 25 авг 2005.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Никак окончательно не могу расправиться с шариками. Вот такая задача.



    Есть два шарика.

    Шарики летят со скоростями 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. Но это лишь догадка, которую я еще не проверял. Кто-нибудь может сказать что-нибудь хорошее по этому поводу?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    _DEN_





    Не очень хорошо... Что-то меня начинают терзать сомнения что закон сохранения импульса не будет тут выполнсяться...
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Так, кажется что-то проясняется.



    Шарик после удара часть импульса отдаст и часть получит. Тоесть:



    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.



    Вроде так. Что скажите?
     
  4. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    надо сразу два закона пользовать:

    закон сохранения импульса и закон сохранения энергии.
     
  5. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    Есть неплохая книжка, называется Beginning Math and Physics for Game Programmers, издательство New Riders Publishing, 2004 г., там этот вопрос рассматривается, насколько я помню, весьма подробно. Про русский перевод я не знаю, в электронном виде англ. версию найти не сложно (согласно политике форума, сам линк постить не буду :derisive:.
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    В исходниках\графика есть SSaveKit от Ron Thomas, там Balls на эту тему, прикольные

    [​IMG] 1142057391__Balls.scr
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    bogrus

    Ща глянем :)
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    bogrus



    Похоже, похоже. Только формулы-то где? :)
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Все, для этой задачи нашел решение.



    Первые три поста - полная фигня :)



    Закон сохранения импульса в правильном виде :)



    |p1| + |p2| = |p1'| + |p2'|



    Далее,



    p1' = p1 + n * k

    p2' = p2 + n * k



    n - номаль в точке соприкоснования к плоскости касания.

    k - такое что:



    |p1| + |p2| = |p1 + n * k| + |p2 - n * k|



    Вот и все. Я думаю тема закрыта.
     
  10. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    _DEN_







    Хотя нет, уже не думаю :) У меня это уравнение уже в течение часа на дерайве крехтит. Результата пока нет. Товарисчи обладатели мапла или матлаба, попробуйте его пожалста решить если не лень :) Все переменные кроме k 3D векторы. Решить надо относительно k.

    |p1| + |p2| можно заменить просто на скаляр R.
     
  11. krokus

    krokus New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2005
    Сообщения:
    11
    Адрес:
    Ukraine
  12. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    krokus



    Интересно:
    Код (Text):
    1.  
    2.      (U1x * M1)+(U2x*M2)-(U1x-U2x)*M2
    3. V1x= --------------------------------
    4.                 M1+M2
    5.  
    6.      (U1x * M1)+(U2x*M2)-(U2x-U1x)*M1
    7. V2x= --------------------------------
    8.                 M1+M2


    Якобы все готово. Ладно, тогда вопрос откладывается до написания собственно кода. Как будет готово - прокомментирую.
     
  13. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    Именно так. У меня была задача на вступительном экзамене

    такая =)
     
  14. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    perez



    Ну :))) Пять лет назад на вступительном экамене я думаю я бы ее тоже без проблем решил :))