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

まずEmacsを起動してください. 次に以下の手順でEmacsで新たなファイルを開いて,左のプログラムを入力して保存して下さい.
作成するファイルの名前は次のルールのもとで自分にとってわかりやすくなるように適宜決めてください.
- ファイル名のルール
-
○ 英数字,「.」,「_」,「-」を組み合わせたファイル名にする.1文字めは英数字にする.ファイル名には空白文字,日本語の文字を入れない.
○ ファイル名は「.rb」で終わる(.rbはRubyファイルの拡張子).
- Emacsでの新規ファイル作成
-
1. Emacsの上部の[File]から[Visit New File]を選ぶ
→「Find file」というダイアログ画面が表示される
2. Nameの欄にファイル名を入力する
3. [OK]ボタンを押すか[Enter]キーでファイル名を決定する
→ファイルが開く
以下の説明ではファイル名を「mandel.rb」とします(他の名前にしている場合は適宜読み替えて下さい).
プログラムの入力に関する注意
プログラムの入力に関して,いくつか注意点を示します.
- 各行の左端の数字は入力しません.それらはEmacsが自動的に表示する行の番号です.
- ファイルを新規作成した時点で先頭の赤文字の部分のほとんどは自動で入力されます.
- このプログラムには日本語も含まれます(日本語が入っているのは「=begin」から「=end」の間と,'......'の内部だけです).
日本語と英語の入力を切り替えるには次のようにします.
まず予め「入力ソース」を「日本語(Mozc)」にしておく必要があります.
入力ソースの切替
画面右上の『ja▼』を押して選択
この設定は1度だけでOKのはずです. その後,英数字モードと日本語モードを切り替えます.
英語モードと日本語モードの切替
[半角/全角]
上の方法で日本語入力が動作しない場合,次を試してみてください.
英語モードと日本語モードの切替(Emacs)
[Ctrl]+[\]
Ctrlキーを押した状態で,バックスラッシュ(あるいは¥)を(一瞬)押します. なおこの「英数字/日本語」切替方法が使えるのはEmacsのみです. - プログラムの先頭の部分に「所属」「氏名」「学生番号」および「難易度」(自己評価で5段階)を記入してください.「パラメタの例」の欄については以下で説明します.
- 「'」(シングルクォート)は[Shift]+[7]で入力する記号です(日本語キーボードの場合).
なお「`」(バッククォート)という文字もありますが,本科目では使いません. - 大文字と小文字は区別して入力して下さい.
- 全て入力を終えたら,必ず保存して下さい([File]→[Save]). 入力の途中でもこまめに保存するとよいでしょう. その方が何かのトラブルがあったときのダメージを少なくできるでしょう.
- 「=end」以降で空白から始まっている行については, [Tab]キーを押せばスペースが自動的に入力されます.手でスペースを入力する必要はありません.
- 「 | 」(パイプ,縦棒)は[Shift]+[¥]で入力する記号です(日本語キーボードの場合).
プログラムの実行
入力できたら,ファイルを保存して,[Activities]からDockを開いて, 一番上の「端末」(Terminal)を起動します. 端末画面が現れたら,以下のようにプログラムを実行して下さい. なお「$」は端末画面に最初から出ているプロンプトを表しています(「ruby」から入力します).またプログラムのファイル名「mandel.rb」は自分がつけたファイルの名前に置き換えてください.
すると,次のようなウインドウが現われるはずです(画像の表示にはしばらく時間がかかるかもしれません).
真っ黒な部分には何もありません. 表示された図形の白い線の付近にズームしていくと上のような図形を発見できます.
![]() |
画像の一部を拡大するには次のようにします.
- 拡大する範囲を指定する
マウスの左ボタンのドラッグで 拡大する範囲を指定します. ドラッグすると白い枠が描かれるはずです. その枠をフレームといいます. 思った通りのフレームを作れなかったときは,ドラッグし直せばフレームは作り直せます. - フレーム内部を拡大して表示する
メニューの[画像]→[フレームの内部を拡大]を選択します(あるいは[Ctrl]+[x]).
この他にも次のようなことができます.
- 元に戻す
フレーム内部を拡大してから前の状態に戻したい場合は, メニューの[画像]→[元に戻す]を選択します(あるいは[Ctrl]+[u]).このように操作を取り消すことを一般にundoといいます. undoは初期状態に戻るまで何度でも実行できます. - リセット
メニューの[画像]→[リセット](あるいは[Ctrl]+[r])で, 初期状態に戻ります. - 終了
メニューの[画像]→[終了](あるいは[Ctrl]+[z])でプログラムを終了します.
終了する場合には, メニューの[画像]→[終了]を選択します(あるいは[Ctrl]+[z]).
パラメタのファイルへの取り込みとファイルの提出
既に説明したようにして拡大の操作を適宜行って, (綺麗な,面白い)画像が生成できたら, 画面下に表示されるパラメタをプログラムにコピーして取り込んで下さい(次図参照). 複数の画像に対応する複数のパラメタを取り込んでも構いません.
パラメタは次のようにプログラムの先頭の「=begin ... =end」の間に貼り付けて下さい.
=begin # 「所属,氏名,学生番号」も書くようにして下さい # (「課題提出に関する注意」を参照のこと) 所属: 都学部1回生 氏名: 左京太郎 学生番号: 0123456789 難易度(5段階評価): 1 パラメタの例: scale=200.0,center=(-0.5,0.0) ## このようにパラメタを貼り付ける(複数可) =end
コピーと貼り付けの方法を次に示します. まず3ボタンのマウス(左右のボタンとホイールのあるマウス)を使える場合は次のようにします.
- コピーしたい範囲をマウスの左ボタンでドラッグする(ドラッグした部分は反転表示される).
- 貼り付けたい位置でマウスの中ボタン(ホイール)を押す.
次のようにメニューを使う方法もあります.
- パラメタの表示欄を右クリック→メニューの「Select All」を選ぶ
- 再度,右クリック→メニューの「Copy」でデータをコピーする
- Emacsの「Edit」から「Paste」で貼り付ける
貼り付けたら再度保存した上で, ファイルをPandAで提出してください.
ウインドウが大きくてパラメタ表示欄が画面からはみ出してしまう場合
パラメタ表示欄はウインドウの下側に配置されます. そこで仮想型端末の画面に較べてウインドウが大きすぎると,パラメタ表示欄が画面からはみ出してしまう場合があります. 対処法としては,まず仮想型端末の画面(ブラウザの画面)が小さい場合には,ブラウザの画面を大きくすることが考えられます. あるいは次のようにプログラムを実行して,プログラムで開くウインドウを小さくすることも考えられます.
最後の数値がウインドウサイズを表しています(何も指定しない場合のサイズは480です).
課題提出に関する注意
- 「課題提出に関する注意」を必ず守るようにして下さい.
- 提出するのはRubyのファイルです. 生成された画像は提出しないで下さい.
パラメタを指定してプログラムを実行すれば画像は再現可能ですので, 画像は必要ありません.
画像の再現方法
プログラム実行のときに,上で扱ったパラメタ(scale,center)を指定することで, そのパラメタに対応した画像を再現できます.
- -s スケール(scale,拡大率)
- -c x座標,y座標(center,画面中心の座標)
なお拡大率が大きい場合,表示されるパラメタが近似値となることがあります. その場合,計算に使われている値と表示されるパラメタの値との差が無視できな くなることがあります. そのときは,中心(center)を変えずに拡大率を下げれば,元の画像の範囲とその周囲を含んだ画像を作ることはできるでしょう.
[参考] マンデルブロ集合
マンデルブロ集合とは複素力学系という分野で現れるものです. この分野では,z←f(z)(f(z)の値をzとする)という複素数zに関する非線形写像によるフィードバックの過程を繰り返し適用したときの点の挙動を調べます.
とくに有名なフィードバック過程として次に示すものがあります.
z ← z2+c
この過程に関するマンデルブロ集合とは,
z=0から始めて写像f(z)を繰り返し適用した結果,
zが無限遠の彼方に行ってしまわないような複素数cの集合のことをいいます.