掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
単振動のシミュレーション (ID:40035)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
以下は2πを40等分して単振動の様子をシミュレーションさせる関数ですが、これだと当然ながら40個の円が一度に単振動して全体としては最初から正弦曲線を描いてしまいます。最初40個の円はY軸上に配置して、一番最初(x = 0)の円が単振動をはじめたら、それにつづいて次の円が位相の分だけ遅れて単振動をするというようにしたいのですが、どうしたらいいでしょうか? private FOx, FOy: Integer; //原点 FTm, Fq: Extended; //振動数と時間 //実座標⇒表示座標 function TForm1.RealToDispX(x: Extended): Integer; begin Result := Round(FOx + x * PerX); end; function TForm1.RealToDispY(y: Extended): Integer; begin Result := Round(FOy - y * PerY); end; //単振動-横波 procedure TForm1.FDrawShm(TargetCanvas: TCanvas); var Ex,Ey,Phi : Extended; i: Integer; begin with TargetCanvas do begin Pen.Width := SubWidth; Pen.Color := clGreen; Phi := 0; //とりあえず 0≦ x ≦2π Ex := 0; for i := 0 to 40 do begin Ey := 3*sin(2*Pi*Fq*FTm+Phi); MoveTo( RealToDispX(Ex),RealToDispY(Ey) ); if i Mod 5 = 0 then Brush.Color := clRed else Brush.Color := clBlack; Ellipse( RealToDispX(Ex)-20, RealToDispY(Ey)-20, //位置を示す円 RealToDispX(Ex)+20, RealToDispY(Ey)+20 ); Ex := Ex + 1; Phi := Phi + Pi/20; end; end; FTm := FTm + 0.002; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.