Составители:
Рубрика:
16
Согласно приведенному выше правилу, компоненты скорости,
перпендикулярные направлению
n
(т.е.
i
v
) при ударе не изменяют-
ся, в то время как компоненты
||i
v
изменяются так же, как и при цен-
тральном ударе. Поскольку массы шаров одинаковы, это означает, что
они обмениваются продольными компонентами скоростей; то есть
после столкновения
||2||1
' vv
и
||1||2
' vv
, где скорости после соударе-
ния отмечены штрихом. Окончательно, для скоростей после соударе-
ния получаем
LvLnvnvvv
)()('
121||21
LvLnvnvvv
)()('
212||12
Отметим, что результат не зависит от выбора знака векторов
n
и
L
.
Выпишем теперь все входящие сюда формулы непосредственно в
декартовых координатах. Пусть декартовы координаты центров ша-
ров в момент соприкосновения есть (x
1
, y
1
) и (x
2
, y
2
). Тогда компонен-
ты вектора
n
=(n
x
, n
y
) определяются формулами
n
x
= (x
2
– x
1
)/d , n
y
= (y
2
– y
1
)/d ,
где учтено, что в момент соприкосновения шаров (x
1
– x
2
)
2
+(y
1
– y
2
)
2
= d
2
.
Удобно выбрать диаметр шаров за единицу измерения, т. е. все
размеры задавать в единицах d. Тогда n
x
=x
2
– x
1
, n
y
=y
2
– y
1
, а условие
соударения запишется в виде n
x
2
+ n
y
2
=1, где (x
i
, y
i
)
– координаты цен-
тров шаров. Именно такой прием использован в программе. Вектор
L
можно выбрать в виде
L
= (n
y
, –n
x
); очевидно,
L
n
, так как
0)( nL
, и
1|| L
. Таким образом, явные выражения для декартовых
компонент скоростей после соударения имеют вид
v′
1x
= n
x
·(v
2
)
n
+ n
y
·(v
1
)
L
, v′
1y
= n
y
·(v
2
)
n
– n
x
·(v
1
)
L
;
v′
2x
= n
x
·(v
1
)
n
+ n
y
·(v
2
)
L
, v′
2y
= n
y
·(v
1
)
n
– n
x
·(v
2
)
L
;
где (v
i
)
n
=
)( nv
i
= n
x
v
ix
+ n
y
v
iy
, а (v
i
)
L
=
)( Lv
i
= n
y
v
ix
– n
x
v
iy.
В программном коде все вышесказанное соответствует строчкам
nx=x2-x1; ny=y2-y1;
if (nx*nx+ny*ny<=1)//--условие касания шаров--
{
x1=x1-vx1*dt; y1=y1-vy1*dt;
x2=x2-vx2*dt; y2=y2-vy2*dt;
if (ny>0) {ny=Math.sqrt(1-nx*nx)} else {ny=-Math.sqrt(1-nx*nx)};
nv1=nx*vx1+ny*vy1; lv1=ny*vx1-nx*vy1;
nv2=nx*vx2+ny*vy2; lv2=ny*vx2-nx*vy2;
vx1=nx*nv2+ny*lv1; vy1=ny*nv2-nx*lv1;
vx2=nx*nv1+ny*lv2; vy2=ny*nv1-nx*lv2;
Страницы
- « первая
- ‹ предыдущая
- …
- 14
- 15
- 16
- 17
- 18
- …
- следующая ›
- последняя »