diff --git a/src/aphorisms/thirty_two.clj b/src/aphorisms/thirty_two.clj new file mode 100644 index 0000000..c60948b --- /dev/null +++ b/src/aphorisms/thirty_two.clj @@ -0,0 +1,97 @@ +(ns aphorisms.thirty-two + (:require [quil.core :as q] + [quil.middleware :as qm] + [thi.ng.geom.rect :as r] + [thi.ng.geom.core :as g] + [thi.ng.geom.circle :as c] + [thi.ng.math.core :as m])) + +(def bounds (r/rect 600 600)) +(def canvas (g/scale bounds 0.92)) + +(defn update-state + ([] {:t 0}) + ([_state] {:t (* 0.0002 (q/millis))})) + +(defn setup [] + (q/frame-rate 30) + (q/ellipse-mode :center) + (q/rect-mode :corners) + (q/color-mode :hsb 255) + (update-state)) + +(defn draw-state [{:keys [t]}] + (let [circles 10] + (q/background 232) + (q/no-fill) + (q/with-translation [(/ (g/width bounds) 2) + (/ (g/height bounds) 2)] + (q/stroke-weight 1) + (q/stroke 40 (* (* 0.5 (+ 1 (Math/sin (* 6 t)))) 255)) + (q/ellipse 0 0 60 60) + + (q/stroke 40) + (q/stroke-weight 1) + (doseq [i (range circles) + :let [off (* i (/ (* 2 Math/PI) circles)) + radius 100 + circ (* 2 Math/PI radius)]] + (q/ellipse (* radius (Math/cos (+ t off))) (* radius (Math/sin (+ t off))) + (/ circ circles 2) (/ circ circles 2))) + + (q/stroke-weight 0.5) + (doseq [i (range (* 2 circles)) + :let [n (* 2 circles) + radius 100 + off (* i (/ (* 2 Math/PI) n)) + circ (* 2 Math/PI radius)]] + (q/ellipse (* radius (Math/cos (+ t off))) (* radius (Math/sin (+ t off))) + (/ circ n 2) (/ circ n 2))) + + (q/stroke-weight 2) + (doseq [i (range (* 3 circles)) + :let [n (* 3 circles) + radius 140 + off (* i (/ (* 2 Math/PI) n))]] + (q/ellipse (* radius (Math/sin (+ t off))) (* radius (Math/cos (+ t off))) 1 1)) + + (q/stroke-weight 2) + (doseq [i (range (* 3 circles)) + :let [n (* 3 circles) + radius 144 + off (* i (/ (* 2 Math/PI) n))]] + (q/ellipse (* radius (Math/cos (+ t off))) (* radius (Math/sin (+ t off))) 1 1)) + + (q/stroke-weight 2) + (doseq [i (range (* 3 circles)) + :let [n (* 3 circles) + radius 148 + off (* i (/ (* 2 Math/PI) n))]] + (q/ellipse (* radius (Math/sin (+ t off))) (* radius (Math/cos (+ t off))) 1 1)) + + (q/stroke-weight 2) + (doseq [i (range (* 3 circles)) + :let [n (* 3 circles) + radius 152 + off (* i (/ (* 2 Math/PI) n))]] + (q/ellipse (* radius (Math/cos (+ t off))) (* radius (Math/sin (+ t off))) 1 1)) + + (q/stroke-weight 0.1) + (doseq [i (range (* 3 circles)) + :let [n (* 0.5 circles) + radius 202 + off (* i (/ (* 2 Math/PI) n)) + circ (* 2 Math/PI radius)]] + (q/ellipse (* radius (Math/sin (+ t off))) (* radius (Math/cos (+ t off))) + (/ circ n 6) (/ circ n 6)))))) + +#_:clj-kondo/ignore +(q/defsketch thirty-two + :title "Thirty-Two" + :size (:size bounds) + :settings #(q/pixel-density (q/display-density)) + :features [:keep-on-top] + :setup setup + :update update-state + :draw draw-state + :middleware [qm/pause-on-error #_(screenshottable) qm/fun-mode])