今アニメーション作成をしています。動きは以下のように設定しました。
dt := 1; a := 9.8; T := 0;
T := T + dt;
move := a*T ;
ここで、Tというのを時間とし、1.2.3.4......と増加させていきたいのですがそのような構文を使ったらいいでしょうか?
ちなみにmoveが速度です。
var
Form1: TForm1;
T: integer; //ここにTを書く
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
T:= 0;
end;
procedure TForm1.計算する;
var
dt,a,move: 何;
begin
inc(T); //Tに1を足す
dt:=1;
a :=9.8;
T:=T + dt;
move := a*T;
end;
これってさ、Delphi とは関係なくて、自由落下のアニメーションをつくりたい
んじゃないの? 加速度、任意の時間での速度、移動距離が分かればいいのでは?
初歩の物理だと思うよ。ちなみにこの場合は、move は無意味だよ。速度は
加速度と時間の積、移動距離は速度の時間積分です。勘違いなら無視を。
たしかに自由落下運動がベースになっているんですが、もともとのプログラムがmoveで速度を定義しています。そこで、そのプログラムをもとにしてうまく加速度をつけ加えることができないのかと思ったのです。
いろいろとアドバイスありがとうございます。さっそくチャレンジしてみたいと思います。
ここでのmoveは速度vに対応するということなのでしょうか。たぶんそうだと思います。
>Xさん
さっそくXさんの教えてくだっさった事にトライしてみまーす☆
>jokさん
Delphiを使って加速度を書くのにはどのようにしたらいいのか分かりますか?あの式だけだと速度がぜんぜん増加してくれないので大変困っていたのです。
いろいろありがとうございます!!
下のようにしてから、Button1 を何度か押してみてください。
const
a = 9.8;
var
t:integer;
procedure DrawCircle(Canvas:TCanvas;CenterX,CenterY,Radius:integer);
begin
Canvas.Ellipse(CenterX-Radius,CenterY-Radius,CenterX+Radius,CenterY+Radius);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Y:integer;
begin
Y := Round(a*t*t/2);
DrawCircle(Canvas,50,Y,10);
Inc(t);
end;
Inc(T)を加えたのですが、代入できない左辺値です、と出てしまいます。
なぜなのでしょうか?度々もうしわけありません!
> Inc(T)を加えたのですが、代入できない左辺値です、と出てしまいます。
どこにどのように加えましたか?
> あの式だけだと速度がぜんぜん増加してくれないので大変困っていたのです。
自由落下は等加速度運動です。
速度 = 加速度 x 時間
です。時間が増えれば自動的に速度は増えますよ。なにが問題なのかもうすこし
頭の中を整理してみるとよいと思います。アニメーションをつくるには、速度
ではなく、時間にたいする移動量が問題です。等加速度運動の場合は
移動量 = 1/2 x 加速度 x 時間 x 時間
です。上のコードでは
Y := Round(a*t*t/2);
に対応しています。Button1 を押すたびに
Inc(t);
として、時間を1単位ずつ増やしています。ですから自由落下のコマわり写真の
ような○が描かれます。
ありがとうございました。おかげさまでうまくできました。
色々と丁寧にアドバイスをしていただき感謝しています。
初めてプログラムというものにふれてみたのですが、分からない事だらけでみなさんに助けられて本当に感謝のひとことです。これからももっと頑張って勉強して色々トライしたいと思います!! 旅人
ツイート | ![]() |