{изменяем скорость и угол после столкновения}
procedure after_hit (spee1, speed2 : integer; x1, y1, x2, y2 : integer; angle1, angle2 : single);
var m1, m2 : real;
begin
m1 := value(r1);
m2 := value(r2);
speed1 := round((2*m2*speed2 + (m1-m2)*speed1)/(m1+m2));
speed2 := round((2*m1*speed1 + (m2-m1)*speed2)/(m1+m2));
x1 := round(x1 + speed1*cos(pi-angle1));
y1 := round(y1 + speed1*sin(-angle1));
x2 := round(x2 + speed2*cos(pi-angle2));
y2 := round(y2 + speed2*sin(-angle2));
end;
{проверка на столкновение}
function balls_hit (const r1,r2 : integer; x1,y1,x2,y2 : integer) : boolean;
var
dist : real;
t1, t2, t3, t4, t5: real;
begin
t1 := abs(x2-x1); t2 := sqr(t1);
t3 := abs(y2-y1); t4 := sqr(t3);
t5 := t2 + t4;
dist := sqrt(t5);
balls_hit := (dist < (r1 + r2));
end;
{если шары стлкнулись - изменяем скорость и угол }
procedure balls_hit_2;
begin
if balls_hit(r1,r2,x1,y1,x2,y2) then after_hit (speed1, speed2, x1, y1,x2, y2,angle1,angle2);
end;
но шарики только проводят друг через друга.....
Сообщение отредактировано: 18192123 -