必修課題3@アルゴリズムとデータ構造入門
Hilbert curve ・ Koch curve ・ Sierpinski's Gasket の説明
締め切りは2月22日午後5時 (卒業される方は2月15日午後5時).
提出先は, 10号館事務室前ポスト.
- 気のきいた painter を1種類作れ。
- 空間充填曲線を1種類作れ。(例. Hilbert curve,
Peano curve)
- フラクタルを1種類作れ。(例. Koch curve, Snowflake, Sierpinski's Gasket,
zn+1=zn+c)
- プログラムは奥乃宛にメイルでも送付して下さい.
painter のプログラムは奥乃宛にメイルでも送付して下さい.
出力は下記の通りです.
(output-canvas 'foo.ps)
で foo.ps というポストスクリプトファイルが作成されますので,
そのファイルをプリンタに出力して下さい.
質問がある場合には, 奥乃の部屋 (10号館3階335号室ドアにロボットのポスター有) まで訪問するか, メイル (okuno@kuis.kyoto-u.ac.jp) で.
空間充填曲線
例による Hilbert curve の説明
4つの基本形
下記の4つの基本形をレベルが大きくなるごとに分解していきます.
- 基本形A ==> 分解形: D → A → A → B
- 基本形B ==> 分解形: C → B → B → A
- 基本形C ==> 分解形: B → C → C → D
- 基本形D ==> 分解形: A → D → D → C
各基本形に書かれている4つの小さな領域は, 分解の仕方です.
例えば, 基本形Aは, 次のレベルでは4つの領域に分解され,
それぞれの領域に図に示されたように基本形 D, A, A, B が書かれます.
Scheme プログラムの書き方
- 各基本形に対して, レベル0なら, コ型を書くための頂点リストを求める.
- さもなければ, 分解形の再帰的に呼出し, 頂点を求める.
- 求まった頂点リストから segment を求め, painter を作成.
(define (hilbert-a X0 Y0 X1 Y1 i)
(let ((xs (/ (+ (* 3.0 X0) X1) 4.0))
(ys (/ (+ (* 3.0 Y0) Y1) 4.0))
(xm (/ (+ X0 X1) 2.0))
(ym (/ (+ Y0 Y1) 2.0))
(xl (/ (+ X0 (* 3.0 X1)) 4.0))
(yl (/ (+ Y0 (* 3.0 Y1)) 4.0)) )
(if (= i 0)
(list (make-vect xl yl) (make-vect xs yl)
(make-vect xs ys) (make-vect xl ys) )
(append (hilbert-d xm ym X1 Y1 (- i 1))
(hilbert-a X0 ym xm Y1 (- i 1))
(hilbert-a X0 Y0 xm ym (- i 1))
(hilbert-b xm Y0 X1 ym (- i 1)) ))))
レベルダウンの様子
下記の4つの基本形をレベルが大きくなるごとに分解していきます.
- レベル0: 基本形A
- レベル1: 上の右端 (赤字入り)
- レベル2: 右図
- レベル3: 右図
- レベル4: 右図
- レベル5: 右図
空間充填曲線 2
例による Peano curve の説明
ペアノ曲線は Hilbert curve と同じ考えで作成できる.
上記は8つのパタンで構成.
フラクタル
例による Koch curve の説明
Scheme プログラムの書き方
- 各線形に対して, レベル0なら, 三角形の頂点リストを求める.
- さもなければ, 分解形の再帰的に呼出し, 頂点を求める.
- 求まった頂点リストから segment を求め, painter を作成.
フラクタル 2
例による Sierpinski's Gasket の説明
三角形の中は塗りつぶす必要あり. (MIT-Scheme では未完)
フラクタル 3
例による Mandelbrot Curve の説明
このプログラムは,
(paint g1 (procedure->painter mandelbrot))
(define (mandelbrot x y)
(if (zn+1=zn+(x + iy) が収束)
0 ; 黒色
255 ; 白色
))
tustk2 ではカラーが使えます.
MIT Schemeを使用するときの注意
MIT Scheme を使う選択をされた方は, MIT-Scheme ではなく,
MIT-Scheme-6001 をインストールして下さい.
また, コースウェアは ArtDigita University の
コースウエア
のページにある Problem Set 4 のプログラム (
go.scm,
hend.scm,
hutils.scm,
prmpnt.scm
) を使用して下さい. (動作確認済み)
procedure->painter, segments->painter,
picture->painter, number->painter
などを使うこと. 使い方は上記のファイルの定義から読みとること.
画像は pgm 形式です.
例は, einstein_tongue.pgm,
orida-sensei.pgm.
Back to アルゴリズムとデータ構造入門 講義関係のページ 2004年度データ構造
Copyleft (C) 2005. All wrongs reserved.
Last modified: Sun Feb 13 23:48:54 2005
奥乃博 with 知飛