Arantium Maestum

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

Quilでフラクタル Tree

「関数型オブジェクト指向AIプログラミング」フラクタルscalaからclojureに書き直す続き。

ツリー状の図形をフラクタルで描画してみる。

(defn tree [n length angle switch]
  (q/push-matrix)
  (if (= 1 n)
    (forward length angle)
    (let [l (/ length (/ 2 (Math/sqrt 2.0)))
          a (* Math/PI 0.15 switch)]
      (forward (* l 0.33) angle)
      (tree (dec n) (* l 0.8) (- angle a) 1)
      
      (forward (* l 0.33) angle)
      (tree (dec n) (* l 0.7) (+ angle (* a 1.8)) -1)

      (forward (* l 0.33) angle)
      (tree (dec n) (* l 0.6) angle 1)))
  (q/pop-matrix))

(defn draw []
  (q/translate 105 250)
  (tree 8 200 (* Math/PI 1.5) 1))

フラクタルのコードとしてはあまり美しくない気がする。特に1.8とか0.6とか、あまり必然性なさそうなのに綺麗な図形にするための修正値みたいなものが嫌。

f:id:zehnpaard:20160518212915p:plain