REALbasic かってに連載します(第12回)


 アップルメニューにAboutメニューを簡単につけ加えることが出来ますが、この中に、ReadMeを入れておくことをお薦めしますします。ListBox内に説明を書き込んでおけばよいのです。ListBoxのPropertiesウィンドウ内のInitialValueの欄にあるEdit.....でListBox専用のエディターが開きます。ずいぶん使いやすくなりました。

 第12回 - 「関数グラフのアニメーション(動画)表示」-

 Pictureを使って、10枚のフルカラー画面による周期関数グラフを、順番に表示して、アニメーション(動画)を作ってみます。次回に初期値などを変更できるアプリケーションの形にしたいと思います。


 プログラムの説明
 なつかしのn88basicではスクリーンが白黒の高分解能モード(640*400)で6画面独立に使えたことで、かなり重宝しました。REALbasicではCanvasがこの代わりをするものだと思って、Canvasの切り替えをだいぶ試してみましたが、なかなか思うように動いてくれません。REALbasic の図形描画に関しては次のように考えるとよいと思います。
 Windowを外の地面だとすると、各コントロールはそれぞれの目的を持った建物で、Canvasは地面にたてた美術館、その中に絵を表示するための装飾用の額(Rectangle)や絵を描く紙(Picture)が用意されています。もちろん地面や建物に直接絵を描くこともあるので「Graphics」の命令は、WindowにもCanvasにも使えます。描いた絵を後からコピーしたり、ファイルに保存したりする目的がある場合は、絵を紙に描いておく必要がありますね。従って、図形は紙に(Picturer)描いておくと、後から利用しやすくなります。
 やはりn88basicのgoto文だらけの発想からREALbasicを理解するのは、大変です。でも使っていると何かしら道は開けるもので「NewPicture」を使うとなんと何画面でも(メモリーはそれなりに必要です)スクリーンが作ることができます。そこで今回はn88basicではできなかった10画面を使ったフルカラーのアニメーションを作ることにします。
  1.  まず10枚の画面を定義するところからです。

     picture型でも、integer型やdouble型と同様に配列を作ることが出来ます。画面を配列変数としました。
     P()をpicture型の配列変数として宣言します。やり方は
     EditメニューのNew Variableで p(9) as picture と入力します。これでp(0)からp(9)まで10個のpicture型の配列変数が定義されたことになります。

  2.  次に「NewPicture」を10個の配列変数に振り分けます。

     for n=0 to 9
      P(n) = NewPicture(Canvas1.width, Canvas1.height,8)
     next

     「NewPicture(Canvas1.width, Canvas1.height,8)」の第3パラメータの「8」は1が白黒、2がハーフトーン、4、8、16、32がカラーモード(それぞれのビット数のカラー)を表すものです。

     
  3.  次に、それぞれの画面に図形を描いていきます。

     今回は同じ揺れ方をしている2つの点から発生した波の干渉模様を書いてみることにします。
     原点にある波源から距離 L だけ離れた位置での波の変位 z を表す式は,振幅を A 、周期を T 、波長を λ として
     z = A sin 2π ( ( t / T ) + ( L / λ) )
     となります。従って、x - y 座標上で ( a , 0 ) に波源がある場合、 L は sqrt((x-a)^2+y^2) となるので。
     z1=A sin 2π ( ( t / T ) + ( sqrt((x-a)^2+y^2) / λ) )
     x - y 座標上で ( - a , 0 ) に波源がある場合も同様にして
     z2=A sin 2π ( ( t / T ) + ( sqrt((x+a)^2+y^2) / λ) )
     ここで t を10回で1周期 T となるように決めて、10画面分描いておき。その後、この10画面を繰り返し表示させると、連続した動画が得られることになります。
     画面の数を増やせば増やしただけ、画面はスムーズに動きますが、当然その前の段階での画像書き込みの時間がよけいにかかることになります。
     今回の100*100ドット、10画面では表示までの時間が約 1 分かかりました。(Performa5210)

  4.  イライラ解消のためにプログレスバーをつけました。

  5.  Canvas1:MouseEnterに
     Timer1.mode=0
     Canvas1:MouseExitに
     Timer1.mode=2

     として、画面にマウスポインターが入ったら、静止させ、画面からマウスポインターが出たら、動き出すようにしています。

     REALbasicを初めて使う方へ


     今回の「干渉模様」ですが、ソースをいじって、どんな変化があるのか自分で試してみることが簡単にできます。たとえば、波源の座標 a やループの回数、あるいはグラフの色を決める rgb( , , ) の値など。これらのことから少しずつ自分でもプログラムできそうだな、と思いはじめた方はぜひこの機会に気軽にチャレンジしてみてください。

     波源の座標 a の変更の仕方

     0 REALbasicで「干渉模様」のファイルを開きます。
     1 EditメニューからEditorSettingsを開きSource EditorのFontをOsakaにします。
     2 ProjectのウインドウからWindow1をダブルクリックすると「干渉模様」とタイトルの付いたウインドウが開きます。このウインドウの中にある「準備(約 1 分)」のボタンをダブルクリックするとCode Browser(Window1)とタイトルの付いたウインドウが開きます。
     3 このウインドウのPushButton2:Actionにあるメインプログラム中の初期条件の部分をいじればよいわけです。
     以下の部分です

     // aは2つの波源の原点からの距離です。
      a=30
     // 

     4 Timer1のPropertiesウィンドウにあるPeriodの欄の数字を大きくすると、動きが遅くなります。

     5 とにかく何か変更して、実験してみてましょう。

     6 画面表示がおかしくなったら迷わずに再起動です。特に保存は頻繁に行いましょう。



     プログラムの説明は、About メニューおよびソースプログラムの中にかなり書き加えました。お楽しみ下さい。

     今回の「干渉模様0.2」がダウンロード出来ます。
       
      ソースプログラムのみです。REALbasic最新バージョンが必要です。30 kバイト

      ソースコードについての質問やご意見がありましたら以下のアドレスまでご連絡下さい。
              koko-@mx2.tiki.ne.jp


    このホームページのホストはです。 無料ホームページをどうぞ!