Коста Михаил
S:18:47:50 22.05
R:18:51:19 22.05
траектории при новом запуске
Timer1.Enabled := True;
end;
procedure TForm1.SetLaunchButtonClick(Sender: TObject);
begin
LaunchPoint := Point(ClientWidth div 2, StrToInt(EditY.Text)); // установка точки запуска X посередине экрана
Invalidate;
end;
procedure TForm1.DrawTrajectoryButtonClick(Sender: TObject);
begin
DrawingTrajectory := not DrawingTrajectory;
Invalidate;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
x, y: Double;
begin
t := t + 0.1;
x := Rocket.Position.X + Rocket.FVelocityX * t;
y := Rocket.Position.Y - (Rocket.FVelocityY * t - 0.5 * Gravity * t * t);
Rocket.MoveTo(Point(Round(x), Round(y)));
if Rocket.FVelocityY - Gravity * t > 0 then
Rocket.Angle := 0 // вверх
else
Rocket.Angle := Pi; // вниз
// добавляем текущую позицию в траекторию
SetLength(Trajectory, Length(Trajectory) + 1);
Trajectory[High(Trajectory)] := Rocket.Position;
// остановка таймера, если ракета достигла земли или конца полета
if y >= ClientHeight then
Timer1.Enabled := False;
Invalidate;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
i: Integer;
begin
// Рисуем площадку для запуска
Canvas.Brush.Color := clGray;
Canvas.Rectangle(LaunchPoint.X - 25, LaunchPoint.Y, LaunchPoint.X + 25, LaunchPoint.Y + 10);
// Рисуем точку запуска
Canvas.Brush.Color := clBlue;
Canvas.Ellipse(LaunchPoint.X - 5, LaunchPoint.Y - 5, LaunchPoint.X + 5, LaunchPoint.Y + 5);
// Рисуем ракету
Rocket.Draw(Canvas);
// Рисуем траекторию полета
if DrawingTrajectory then
begin
Canvas.Brush.Color := clRed;
for i := 0 to High(Trajectory) do
begin
Canvas.Ellipse(Trajectory[i].X - 2, Trajectory[i].Y - 2, Trajectory[i].X + 2, Trajectory[i].Y + 2);
end;
end;
end;
end.