2011/03/20

Gauche-gd: 再帰曲線(フラクタル)

といっても「もうひとつの Scheme 入門」の手続き群から出力されたデータを適当に加工して使用しました。つまりデータを基に線を引いただけだったりします。

(use graphics.gd)
(use util.list)
(use srfi-1)

(define (file->data p x path)
  (let1 ls (call-with-input-file path
             (^p (port-map identity (^ _ (read p)))))
    (let1 ls (map (^e (x->integer (floor (+ p (* e x))))) ls)
      (let1 ls (slices ls 2)
        (map (^ (e1 e2)
                (append e1 e2))
             ls (cdr ls))))))

(define (data->img w h data)
  (let1 im (gd-image-create-true-color w h)
    (gd-image-fill im 0 0 (gd-true-color 255 255 255))
    (for-each (^e (line! im
                         (first e)
                         (second e)
                         (third e)
                         (fourth e)
                         (gd-true-color 0 0 0))) data)
    im))

(define d (file->data 150 400 "/cygdrive/c/tmp/d14.dat"))
(define c (file->data 250 70 "/cygdrive/c/tmp/c14.dat"))
(define k (file->data 80 600 "/cygdrive/c/tmp/k5.dat"))

(save-as (data->img 800 450 d) "/cygdrive/c/tmp/dragon.png")
(save-as (data->img 500 800 c) "/cygdrive/c/tmp/c.png")
(save-as (data->img 750 300 k) "/cygdrive/c/tmp/k.png")

フラクタル幾何学(上) (ちくま学芸文庫)

0 件のコメント:

コメントを投稿