GAECHKA
Твоя помощница в решении задач

Движение шарика в graphABC, pascalABC.net

Подскажите пожалуйста как быть : есть программа падения шарика с определенной высоты, потом его движения по затухающим колебаниям . Как сделать так ,чтобы он прошел определенное расстояние , после того как начал движение по плоскости, и остановился ?
Uses graphABC;
//Uses crt;
var
  X: integer;
  Vy: real;
  IsRunning: boolean;
z:real;
var
  a := 1;
  k: real;
  wid := 1000;
  he := 500;
  r := 15;
  y := 400;
  vx := 5;
  
begin
  writeln('введите угол броска ');
  readln(k); 
  SetWindowSize(wid, he);
  IsRunning := true;
  Vy := 0;
  X := R + 5;
  Y := he - Y;
  k := cos(k) /(sin(k));
  ClearWindow;
  SetBrushColor(clRed);
  MoveTo(R + 5, Y + R);
  LineTo(R + 5, he);
  setpencolor(clBlue);
  Ellipse(X - R, Y - R, X + R, Y + R);
  Sleep(500);
  while IsRunning do
  begin
    setpencolor(clWhite);
    SetBrushColor(clWhite);
    ellipse(X - R, Y - R, X + R, Y + R);
    X := X + Round(Vx);
    Y := Y + Round(Vy);
    if X > wid - R then
      exit;
    if Y > he - R then
    begin
      Y := he - R;
      Vy := -Vy * K;
      if abs(Vy) 0.1 then exit;
    end;
    Vy := Vy + a;
    setpencolor(clBlue);
    SetBrushColor(clRed);
    Ellipse(X - R, Y - R, X + R, Y + R);
    Sleep(30);
  end;
  begin
  end;
end.
0
вопрос задан

Источник


1 ответ
Uses graphABC;
//Uses crt;
var 
x,r,m,y:integer;
Vy,Vx,vx0 :reAL;
IsRunning:boolean;
Var 
a := 1;
k:real:=35; //коэфицент затухания
wid:=1000;
he:=550;
i:integer;
z:=exp((r/2*(m/1000)));
 
Begin
writeln('введите массу объекта (кг)');
readln(m);
writeln('введите радиус (см) само объекта (шар)');
readln(R);
writeln('введите высоту (м) падения объекта (не привышая границы окон модели )');
readln(y);
writeln('введите угол броска');
readln(vx0);
SetWindowSize(wid,he);
IsRunning:= true;
Vy := 0;
Vx := Vx0;
X := R + 5;
Y := (he-(Y*10));
k:=sin(k*pi/180);
ClearWindow;
setpencolor(clBlue);
Ellipse (X-R, Y-R, X + R, Y + R);
Sleep(500);
while IsRunning do
begin
setpencolor(clWhite);
SetBrushColor(clWhite);
ellipse(X-R, Y-R, X+R, Y+R);
X := round(x*z-sin(vx));
Y := y+round(vy);
if X > wid-R then
exit;
if Y > he-R then
begin
Y:= he-R;
Vy:= -Vy * K;
if abs(Vy) 0.1 then exit;
end;
setpencolor(clBlack);
Polygon((0,450),(1,549),(549,549));
 
Vy := Vy + a;
setpencolor(clBlue);
SetBrushColor(clRed);
Ellipse(X-R, Y-R, X+R, Y+R);
Sleep(30);
 
end;
begin
SetWindowSize(wid,he);
end;
 
 
end.
сделал почти все , нужно только чтобы шарик отскакивал от треугольника , либо катился при нуле градусов. Подскажите как , а то пытался через логические переменные , так он в воздухе просто "
стоит"