Вот такое задание: Даны два шарика диаметром М. Промоделировать движение шариков по всей плоскости экрана. Шарики могут двигаться по прямым линиям. Изменение угла движения после столкновения с границей экрана или друг с другом может быть случайной величиной. Шарик не может вылететь за пределы квадрата. Пользователь может варьировать скорости движения шариков с помощью стрелок управления курсором.
Хотелось бы разобраться в коде программы... ( дело в том, что код не мой) Объясните пожалуйста назначение каждой из процедур в тексте приведённой ниже программы!
перед тем, как шарики сталкиваются, программа вылетает и выдаёт ошибку 207....первое, о чём подумала- стек переполнился из длинных выражений для скоростей, разбила на более простые - не помогло...
procedure after_hit (var speed1, speed2 : integer; var angle1, angle2 : single); var m1, m2 : real; Vx1, Vy1, Vx2, Vy2 : real; t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 : real; begin m1 := value®; m2 := value®; Vx1 := speed1*cos(angle1); Vy1 := speed1*sin(angle1); Vx2 := speed2*cos(angle2); Vy2 := speed2*sin(angle2); t1 := m2/(m1*(m2 + m1)); t2 := (Vx1 - Vx2); t3 := (m1*m1*m2 - m1); Vx1 := Vx1 + t1*t2*t3; t4 := (Vy1 - Vy2); Vy1 := Vy1 + t1*t4*t3; t5 := Vx1*m1 + m2*Vx2; t6 := m1*m1*Vx1; t7 := m1*m1*m2*Vx2; vx2 := (t5 - t6 + t7)/(m2 + m1); t8 := Vy1*m1 + m2*Vy2; t9 := m1*m1*Vy1; t10 := m1*m1*m2*Vy2; vy2 := (t8 - t9 + t10)/(m2 + m1); speed1 := round(sqrt(Vx1*Vx1 + Vy1*Vy1)); Angle1 := Arctan(Vy1/Vx1); if abs(Vx1) < 1e - 5 then begin Angle1 := pi/2; if Vy1 < 0 then Angle1 := - angle1 end else begin Angle1 := ArcTan(Vy1/Vx1); if Vx1 < 0 then Angle1 := - angle1 end; speed2 := round(sqrt(Vx2*Vx2 + Vy2*Vy2)); Angle2 := Arctan(Vy2/Vx2); if abs(Vx2) < 1e - 5 then begin Angle2 := pi/2; if Vy2 < 0 then Angle2 := - angle2 end else begin Angle2 := ArcTan(Vy2/Vx2); if Vx2 < 0 then Angle2 := - angle2 end; end;