3. Мы добавляем функцию под названием ball2BallReaction(). Эта функция вычисляет, каковы должны быть новые векторные скорости каждого шара после столкновения.
Функция ball2BallReaction() представлена ниже:
1 function ball2BallReaction(b1,b2,x1,x2,y1,y2,time){
2 //найти массы
3 var mass1 =b1.mass;
4 var mass2 =b2.mass;
5 //-----установить переменные начальных векторных скоростей
6 var xVel1 =b1.xmov;
7 var xVel2 =b2.xmov;
8 var yVel1 =b1.ymov;
9 var yVel2 =b2.ymov;
10 var run =(x1-x2);
11 var rise =(y1-y2);
12 var Theta =Math.atan2(rise,run);
13 var cosTheta =math.cos(Theta);
14 var sinTheta =math.sin(Theta);
15 //найти векторные скорости вдоль линии действия
16 var xVel1prime =xVel1*cosTheta+yVel1*sinTheta;
17 var xVel2prime =xVel2*cosTheta+yVel2*sinTheta;
18 //найти векторные скорости, перпендикулярные линии действия
19 var yVel1prime =yVel1*cosTheta-xVel1*sinTheta;
20 var yVel2prime =yVel2*cosTheta-xVel2*sinTheta;
21 //уравнения сохранения
22 var P =(mass1*xVel1prime+mass2*xVel2prime);
23 var V =(xVel1prime-xVel2prime);
24 var v2f =(P+mass1*V)/(mass1+mass2);
25 var v1f =v2f-xVel1prime+xVel2prime;
26 var xVel1prime =v1f;
27 var xVel2prime =v2f;
28 //проецирование в систему координат Flash на оси x и y
29 var xVel1 =xVel1prime*cosTheta-yVel1prime*sinTheta;
30 var xVel2 =xVel2prime*cosTheta-yVel2prime*sinTheta;
31 var yVel1 =yVel1prime*cosTheta+xVel1prime*sinTheta;
32 var yVel2 =yVel2prime*cosTheta+xVel2prime*sinTheta;
33 //изменение старой позиции
34 b1.tempx =b1.xpos+bl.xmov*time;
35 b1.tempy =b1.ypos+b1.ymov*time;
36 b2.tempx =b2.xpos+b2.xmov*time;
37 b2.tempy =b2.ypos+b2.ymov*time;
38 b1.xmov =xVel1;
39 b2.xmov =xVel2;
40 b1.ymov =yVel1;
41 b2.ymov =yVel2;
42 }
Строки 2-9 этого кода ActionScript обрабатывают инициализацию всех переменных, которые нам нужны от объектов ball. Инициализированные переменные представляют собой векторные скорости по x и y каждого шара и их массы