必修課題3@アルゴリズムとデータ構造入門

Hilbert curve ・ Koch curve ・ Sierpinski's Gasket の説明


締め切りは2月22日午後5時 (卒業される方は2月15日午後5時).
提出先は, 10号館事務室前ポスト.
  1. 気のきいた painter を1種類作れ。
  2. 空間充填曲線を1種類作れ。(例. Hilbert curve, Peano curve
  3. フラクタルを1種類作れ。(例. Koch curve, Snowflake, Sierpinski's Gasket, zn+1=zn+c

  4. プログラムは奥乃宛にメイルでも送付して下さい.


painter のプログラムは奥乃宛にメイルでも送付して下さい.
出力は下記の通りです.
(output-canvas 'foo.ps)
で foo.ps というポストスクリプトファイルが作成されますので, そのファイルをプリンタに出力して下さい.


質問がある場合には, 奥乃の部屋 (10号館3階335号室ドアにロボットのポスター有) まで訪問するか, メイル (okuno@kuis.kyoto-u.ac.jp) で.


空間充填曲線


例による Hilbert curve の説明



4つの基本形


下記の4つの基本形をレベルが大きくなるごとに分解していきます.

各基本形に書かれている4つの小さな領域は, 分解の仕方です. 例えば, 基本形Aは, 次のレベルでは4つの領域に分解され, それぞれの領域に図に示されたように基本形 D, A, A, B が書かれます.


Scheme プログラムの書き方


  1. 各基本形に対して, レベル0なら, コ型を書くための頂点リストを求める.
  2. さもなければ, 分解形の再帰的に呼出し, 頂点を求める.
  3. 求まった頂点リストから 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つの基本形をレベルが大きくなるごとに分解していきます.


空間充填曲線 2


例による Peano curve の説明


ペアノ曲線は Hilbert curve と同じ考えで作成できる. 上記は8つのパタンで構成.


フラクタル


例による Koch curve の説明



Scheme プログラムの書き方


  1. 各線形に対して, レベル0なら, 三角形の頂点リストを求める.
  2. さもなければ, 分解形の再帰的に呼出し, 頂点を求める.
  3. 求まった頂点リストから 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  ; 白色
  ))


TUS-TKを使用した例


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 知飛