Помогите доработать программу
Добрый день! Подскажите пожалуйста, имеется программа, суть работы в следующем по форме летают 2 объекта, отражаются от стенок, постепенно замедляются и в итоге вообще останавливаются за счет коэффициента сопротивления (как коэф. сопротивления среды в физике) . Задача в следующем, заменить этот коэффициент сопротивления среды на другой. и вот этот другой коэффициент должен работать следующим образом: когда объект касается стенки он должен терять часть своей скорости (10%). Коэффициент сопротивления среды (k) вообще убрать.
Проблема такая, условия при которых объекты касаются стенок уже в исходной программе написаны, но когда я в эти условия добавляю свой коэффициент удара, то объект не отскакивает от нижней стенки а начинает идти вдоль нее, то есть теряет игрековую составляющую скорости. Подскажите как сделать чтобы объекты нормально отскакивали и теряли энергию (скорость) при отскоке.
Исходный Текст модуля:
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, ExtCtrls;
type
TMyshape =class
xw,yw:integer;
x,y:real;
m:real;
vx,vy:real;
Shape: TShape;
constructor Create(sh:TShape);
procedure MakeMove(time:real);
end;
implementation
constructor TMyshape.Create(sh:Tshape) ;
begin
shape:=sh;
self.m:=50;
x:=sh.Left;
y:=sh.Top;
self.vx:=100;
self.vy:=300;
end;
procedure TMyshape.MakeMove(time:real);
const
g=9.8;
k=1.0;
begin
if vy>0 then vy:=vy-k*g*time
else vy:=vy+k*g*time;
if vx>0 then vx:=vx-k*g*time
else vx:=vx+k*g*time;
x:=x+vx*time;
y:=y+vy*time;
Shape.Top:=round(y);
Shape.Left:=round(x);
if ((shape.Left+shape.Width)>=xw) then vx:=0-vx; //Условия касания стенки
if ((shape.Top+shape.Height)>=yw) then vy:=0-vy;
if (shape.Left<0) then vx:=0-vx;
if (shape.Top<0) then vy:=0-vy;
end;
end.
end.
tatyxa Мастер, этот вариант я самым первым попробовал, если просто добавить константу-коэффициент, он от стенки не отскочит а пойдет вдоль нее, я писал об этом