Arantium Maestum

プログラミング、囲碁、読書の話題

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

f:id:zehnpaard:20160518055954p:plain

n = 5

f:id:zehnpaard:20160518060017p:plain

n = 10

f:id:zehnpaard:20160518060030p:plain