Quilでフラクタル Szierpinski
「関数型オブジェクト指向AIプログラミング」のフラクタルをscalaからclojureに書き直す続き。
フラクタルといえばマンデルブロかシェルピンスキー、というくらいにメジャーなフラクタルであるシェルピンスキー三角を描いてみる。
(defn szierpinski ([n length] (szierpinski n length 0 0)) ([n length x y] (let [len2 (/ length 2)] (if (= n 1) (let [x1 (+ x len2) x2 (- x len2) y1 (+ y (* len2 (Math/sqrt 3)))] (q/line x y x1 y1) (q/line x1 y1 x2 y1) (q/line x2 y1 x y)) (let [len3 (/ len2 2) x3 (+ x len3) x4 (- x len3) y2 (+ y (* len3 (Math/sqrt 3)))] (szierpinski (dec n) len2 x y) (szierpinski (dec n) len2 x3 y2) (szierpinski (dec n) len2 x4 y2))))))
変数名がイケてないのでいつか考え直したい・・・
まあ何はともあれ、ちゃんと走る。
n = 3
n = 5
n = 10