Animate a pendulum: Difference between revisions

Added Delphi example
(Added Delphi example)
Line 779:
(round w 2))
pendulums))))))))</lang>
=={{header|Delphi}}==
{{libheader| Vcl.Forms}}
{{libheader| Vcl.Graphics}}
{{libheader| Vcl.ExtCtrls}}
{{Trans|C#}}
<lang Delphi>
unit main;
 
interface
 
uses
Vcl.Forms, Vcl.Graphics, Vcl.ExtCtrls;
 
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
Timer: TTimer;
angle, angleAccel, angleVelocity, dt: double;
len: Integer;
procedure Tick(Sender: TObject);
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Width := 200;
Height := 200;
DoubleBuffered := True;
Timer := TTimer.Create(nil);
Timer.Interval := 30;
Timer.OnTimer := Tick;
Caption := 'Pendulum';
 
// initialize
angle := PI / 2;
angleAccel := 0;
angleVelocity := 0;
dt := 0.1;
len := 50;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
Timer.Free;
end;
 
procedure TForm1.Tick(Sender: TObject);
const
HalfPivot = 4;
HalfBall = 7;
var
anchorX, anchorY, ballX, ballY: Integer;
begin
anchorX := Width div 2 - 12;
anchorY := Height div 4;
ballX := anchorX + Trunc(Sin(angle) * len);
ballY := anchorY + Trunc(Cos(angle) * len);
 
angleAccel := -9.81 / len * Sin(angle);
angleVelocity := angleVelocity + angleAccel * dt;
angle := angle + angleVelocity * dt;
 
with canvas do
begin
Pen.Color := clBlack;
 
with Brush do
begin
Style := bsSolid;
Color := clWhite;
end;
 
FillRect(ClientRect);
MoveTo(anchorX, anchorY);
LineTo(ballX, ballY);
 
Brush.Color := clGray;
Ellipse(anchorX - HalfPivot, anchorY - HalfPivot, anchorX + HalfPivot,
anchorY + HalfPivot);
 
Brush.Color := clYellow;
Ellipse(ballX - HalfBall, ballY - HalfBall, ballX + HalfBall, ballY + HalfBall);
end;
end;
 
end.</lang>
 
=={{header|E}}==
478

edits