[ [プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  マンデルブロ集合画像の生成 ]

[課題00] マンデルブロ集合画像の生成

課題

課題提出に関する注意」をよく理解した上で, 次に示すプログラムを入力,実行して, 以下の指示にしたがって提出して下さい.

目次

  1. プログラムの概要
  2. プログラムの入力
  3. プログラムの実行
  4. パラメタのファイルへの取り込みとファイルの提出
  5. 画像の再現方法
  6. [参考] マンデルブロ集合

プログラムの概要

今回のプログラムは「マンデルブロ集合」に基づく画像を生成するものです. プログラムを実行することで,以下のような画像を見ることができます(プログラムで表示する画像はモノクロで,生成した画像に色を付けてあります). 最初の画像がマンデルブロ集合の全体をとらえたものです(中心の黒い部分がマンデルブロ集合). その他の画像は,マンデルブロ集合の境界線の近くを拡大してとらえたものです. 境界線のどの辺りをどれほど拡大してみるかによって,現れる図形は大きく異なります.

マンデルブロ集合 サンプル画像(1) マンデルブロ集合 サンプル画像(2) マンデルブロ集合 サンプル画像(3) マンデルブロ集合 サンプル画像(4)

プログラムの入力

mandel.rb

まずEmacsを起動してください. 次に以下の手順でEmacsで新たなファイルを開いて,左のプログラムを入力して保存して下さい.

作成するファイルの名前は次のルールのもとで自分にとってわかりやすくなるように適宜決めてください.

ファイル名のルール
○ 英数字,「.」,「_」,「-」を組み合わせたファイル名にする.1文字めは英数字にする.ファイル名には空白文字,日本語の文字を入れない.
○ ファイル名は「.rb」で終わる(.rbはRubyファイルの拡張子).

Emacsでの新規ファイル作成
1. Emacsの上部の[File]から[Visit New File]を選ぶ
 →「Find file」というダイアログ画面が表示される
2. Nameの欄にファイル名を入力する
3. [OK]ボタンを押すか[Enter]キーでファイル名を決定する
 →ファイルが開く

以下の説明ではファイル名を「mandel.rb」とします(他の名前にしている場合は適宜読み替えて下さい).

プログラムの入力に関する注意

プログラムの入力に関して,いくつか注意点を示します.

プログラムの実行

入力できたら,ファイルを保存して,[Activities]からDockを開いて, 一番上の「端末」(Terminal)を起動します. 端末画面が現れたら,以下のようにプログラムを実行して下さい. なお「$」は端末画面に最初から出ているプロンプトを表しています(「ruby」から入力します).またプログラムのファイル名「mandel.rb」は自分がつけたファイルの名前に置き換えてください.

$ ruby  mandel.rb

すると,次のようなウインドウが現われるはずです(画像の表示にはしばらく時間がかかるかもしれません).

真っ黒な部分には何もありません. 表示された図形の白い線の付近にズームしていくと上のような図形を発見できます.


mandel.rbのウインドウ

画像の一部を拡大するには次のようにします.

  1. 拡大する範囲を指定する
    マウスの左ボタンのドラッグで 拡大する範囲を指定します. ドラッグすると白い枠が描かれるはずです. その枠をフレームといいます. 思った通りのフレームを作れなかったときは,ドラッグし直せばフレームは作り直せます.

  2. フレーム内部を拡大して表示する
    メニューの[画像]→[フレームの内部を拡大]を選択します(あるいは[Ctrl]+[x]).

この他にも次のようなことができます.

パラメタのファイルへの取り込みとファイルの提出

既に説明したようにして拡大の操作を適宜行って, (綺麗な,面白い)画像が生成できたら, 画面下に表示されるパラメタをプログラムにコピーして取り込んで下さい(次図参照). 複数の画像に対応する複数のパラメタを取り込んでも構いません.

mandel

パラメタは次のようにプログラムの先頭の「=begin ... =end」の間に貼り付けて下さい.


=begin

# 「所属,氏名,学生番号」も書くようにして下さい
# (「課題提出に関する注意」を参照のこと)
所属:     都学部1回生  
氏名:     左京太郎       
学生番号:  0123456789   
難易度(5段階評価): 1

パラメタの例: 
scale=200.0,center=(-0.5,0.0) ## このようにパラメタを貼り付ける(複数可)


=end

コピーと貼り付けの方法を次に示します. まず3ボタンのマウス(左右のボタンとホイールのあるマウス)を使える場合は次のようにします.

  1. コピーしたい範囲をマウスの左ボタンでドラッグする(ドラッグした部分は反転表示される).
  2. 貼り付けたい位置でマウスの中ボタン(ホイール)を押す.

次のようにメニューを使う方法もあります.

  1. パラメタの表示欄を右クリック→メニューの「Select All」を選ぶ
  2. 再度,右クリック→メニューの「Copy」でデータをコピーする
  3. Emacsの「Edit」から「Paste」で貼り付ける

貼り付けたら再度保存した上で, ファイルをPandAで提出してください.

ウインドウが大きくてパラメタ表示欄が画面からはみ出してしまう場合

パラメタ表示欄はウインドウの下側に配置されます. そこで仮想型端末の画面に較べてウインドウが大きすぎると,パラメタ表示欄が画面からはみ出してしまう場合があります. 対処法としては,まず仮想型端末の画面(ブラウザの画面)が小さい場合には,ブラウザの画面を大きくすることが考えられます. あるいは次のようにプログラムを実行して,プログラムで開くウインドウを小さくすることも考えられます.

$ ruby  mandel.rb  -w  300

最後の数値がウインドウサイズを表しています(何も指定しない場合のサイズは480です).

課題提出に関する注意

パラメタを指定してプログラムを実行すれば画像は再現可能ですので, 画像は必要ありません.

画像の再現方法

プログラム実行のときに,上で扱ったパラメタ(scale,center)を指定することで, そのパラメタに対応した画像を再現できます.

$ ruby  mandel.rb  -s 200  -c -0.5,0.0

なお拡大率が大きい場合,表示されるパラメタが近似値となることがあります. その場合,計算に使われている値と表示されるパラメタの値との差が無視できな くなることがあります. そのときは,中心(center)を変えずに拡大率を下げれば,元の画像の範囲とその周囲を含んだ画像を作ることはできるでしょう.

[参考] マンデルブロ集合

マンデルブロ集合とは複素力学系という分野で現れるものです. この分野では,z←f(z)(f(z)の値をzとする)という複素数zに関する非線形写像によるフィードバックの過程を繰り返し適用したときの点の挙動を調べます.

とくに有名なフィードバック過程として次に示すものがあります.

  z ← z2+c
この過程に関するマンデルブロ集合とは, z=0から始めて写像f(z)を繰り返し適用した結果, zが無限遠の彼方に行ってしまわないような複素数cの集合のことをいいます.

[ [プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  マンデルブロ集合画像の生成 ]