Абсолютно неупругий удар

Абсолютно неупругий удар – удар, после которого тела “слипаются” и дальше двигаются вместе, как одно целое.Рассмотрим математическую составляющую. Сумма импульсов всех ударяющихся тел до и после удара  – величина постоянная. Так как после удара двух тел мы получаем одно, масса которого равна сумме масс двух, то можно записать:

m1*v1 + m2*v2 = (m1+m2) * v’

m1,m2 – массы тел, v1,v2 – скорости тел до столкновения, v’ – скорость тела после столкновения

После этого можно приступать к написанию программы.  Во-первых, зададим начальные положения, скорости, массы и радиусы обоих шаров.

<span style="color: #0000ff;">void init()</span>
<span style="color: #0000ff;">{</span>
<span style="color: #0000ff;">epsilon = 0.001f;</span>
<span style="color: #0000ff;">m1 = 10.0f;</span>
<span style="color: #0000ff;">m2 = 10.0f;</span>
<span style="color: #0000ff;">r1 = 0.5f;</span>
<span style="color: #0000ff;">r2 = 0.5f;</span>
<span style="color: #0000ff;">s1 = vector_3d(2.5,-2.5,2.5);</span>
<span style="color: #0000ff;">s2 = vector_3d(-5,-5,-5);</span>
<span style="color: #0000ff;">v1 = vector_3d(-1,1,-1);</span>
<span style="color: #0000ff;">v2 = vector_3d(2,2,2);</span>
<span style="color: #0000ff;">}</span>

m1,m2 – массы шаров;r1,r2 – радиусы шаров;v1,v2 – скорости шаров;s1,s2 – начальные положения шаров; epsilon служит для определения самого факта столкновения (если расстояние между шарами меньше чем  (epsilon+r1+r2) , то столкновение произошло).  Для перемещения и определения столкновения используем функцию:

<span style="color: #0000ff;">void Collision(float t)

{

</span><span style="white-space: pre;"><span style="color: #0000ff;">	</span></span><span style="color: #0000ff;">s1 += v1 * t;

</span><span style="white-space: pre;"><span style="color: #0000ff;">	</span></span><span style="color: #0000ff;">s2 += v2 * t;

</span><span style="white-space: pre;"><span style="color: #0000ff;">	</span></span><span style="color: #0000ff;">if((s2-s1).Norm() &lt; (epsilon + r1 + r2))

</span><span style="white-space: pre;"><span style="color: #0000ff;">	</span></span><span style="color: #0000ff;">{

</span><span style="white-space: pre;"><span style="color: #0000ff;">		</span></span><span style="color: #0000ff;">v1 = (v1* m1 + m2 * v2) / (m1+m2);

</span><span style="white-space: pre;"><span style="color: #0000ff;">		</span></span><span style="color: #0000ff;">v2 = v1;

</span><span style="white-space: pre;"><span style="color: #0000ff;">	</span></span><span style="color: #0000ff;">}

}</span>

Вот собственно и все. Для отрисовки я использую простейшие средства OpenGL.  Исходники программы Collision. Для правильной работы необходимо подключить библиотеки opengl32.lib, glaux.lib, glu2.lib.

Оставить комментарий

Вы должны быть зарегистрированы чтобы комментировать.