値を増加させていくにはどうしたらいいのでしょうか?

解決


旅人  2004-01-16 00:43:49  No: 6729

今アニメーション作成をしています。動きは以下のように設定しました。 

 dt := 1;   a := 9.8;   T := 0;

       T := T + dt;

       move := a*T   ;
ここで、Tというのを時間とし、1.2.3.4......と増加させていきたいのですがそのような構文を使ったらいいでしょうか?
ちなみにmoveが速度です。


X  2004-01-16 02:56:20  No: 6730

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;


jok  2004-01-16 03:32:41  No: 6731

これってさ、Delphi とは関係なくて、自由落下のアニメーションをつくりたい
んじゃないの? 加速度、任意の時間での速度、移動距離が分かればいいのでは?
初歩の物理だと思うよ。ちなみにこの場合は、move は無意味だよ。速度は
加速度と時間の積、移動距離は速度の時間積分です。勘違いなら無視を。


旅人  2004-01-16 22:52:21  No: 6732

たしかに自由落下運動がベースになっているんですが、もともとのプログラムがmoveで速度を定義しています。そこで、そのプログラムをもとにしてうまく加速度をつけ加えることができないのかと思ったのです。
いろいろとアドバイスありがとうございます。さっそくチャレンジしてみたいと思います。


旅人  2004-01-16 22:58:49  No: 6733

ここでのmoveは速度vに対応するということなのでしょうか。たぶんそうだと思います。
>Xさん
さっそくXさんの教えてくだっさった事にトライしてみまーす☆
>jokさん
Delphiを使って加速度を書くのにはどのようにしたらいいのか分かりますか?あの式だけだと速度がぜんぜん増加してくれないので大変困っていたのです。

いろいろありがとうございます!!


jok  2004-01-16 23:03:42  No: 6734

下のようにしてから、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;


旅人  2004-01-17 04:58:16  No: 6735

Inc(T)を加えたのですが、代入できない左辺値です、と出てしまいます。
なぜなのでしょうか?度々もうしわけありません!


jok  2004-01-17 06:16:11  No: 6736

> Inc(T)を加えたのですが、代入できない左辺値です、と出てしまいます。

どこにどのように加えましたか?


jok  2004-01-17 08:46:55  No: 6737

> あの式だけだと速度がぜんぜん増加してくれないので大変困っていたのです。

自由落下は等加速度運動です。

速度 = 加速度 x 時間

です。時間が増えれば自動的に速度は増えますよ。なにが問題なのかもうすこし
頭の中を整理してみるとよいと思います。アニメーションをつくるには、速度
ではなく、時間にたいする移動量が問題です。等加速度運動の場合は

移動量 = 1/2 x 加速度 x 時間 x 時間

です。上のコードでは

Y := Round(a*t*t/2);

に対応しています。Button1 を押すたびに

Inc(t);

として、時間を1単位ずつ増やしています。ですから自由落下のコマわり写真の
ような○が描かれます。


旅人  2004-01-19 10:14:43  No: 6738

ありがとうございました。おかげさまでうまくできました。
色々と丁寧にアドバイスをしていただき感謝しています。
初めてプログラムというものにふれてみたのですが、分からない事だらけでみなさんに助けられて本当に感謝のひとことです。これからももっと頑張って勉強して色々トライしたいと思います!!                    旅人


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加