Азиз Бойбобоев
Азиз Бойбобоев

Помогите доработать программу

Добрый день! Подскажите пожалуйста, имеется программа, суть работы в следующем по форме летают 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 Мастер, этот вариант я самым первым попробовал, если просто добавить константу-коэффициент, он от стенки не отскочит а пойдет вдоль нее, я писал об этом

ЮЛ
Юрий Лосев

const k2 = 0.9

if ((shape.Left+shape.Width)>=xw) then vx:=0-vx*k2; //Условия касания стенки
if ((shape.Top+shape.Height)>=yw) then vy:=0-vy*k2;
if (shape.Left<0) then vx:=0-vx*k2;
if (shape.Top<0) then vy:=0-vy*k2;

Похожие вопросы
помогите, пожалуйста, доработать программу на языке Java
Помогите доработать скрипт
помогите пожалуйста доработать программу
помогите доработать программу.
Помогите доработать программу на visual basic !(((
Помогите доработать картинку.
помогите, пожалуйста, доработать программу
помогите доработать HTML код
Как улучшить, что доработать. Сейчас загружу
помогите доработать или поменять программу тренировок