(ns aphorisms.seventeen (:require [quil.core :as q] [quil.middleware :as qm] [thi.ng.geom.circle :as circle] [thi.ng.geom.core :as g] [thi.ng.math.core :as m] [thi.ng.math.noise :as n] [thi.ng.geom.circle :as c] [thi.ng.geom.vector :as v])) (def circ (c/circle 100)) (n/noise1 0.1) (defn setup [] (q/frame-rate 30) (q/rect-mode :center) (q/ellipse-mode :center) (q/color-mode :hsb 360 100 100) (q/background 180 10 90) {:pointer (v/vec2 250 250)}) (defn update-state [state] state) (defn circle [seed radius] (let [c-off-x (n/noise1 (* 0.0001 seed)) c-off-y (n/noise1 (* -0.0004 seed))] (c/circle (* c-off-x (/ radius 3)) (* c-off-y (/ radius 3)) radius))) (defn mix-hsb [hsb-a hsb-b x] (mapv + (map (partial * (- 1 x)) hsb-a) (map (partial * x) hsb-b))) (defn draw-state [state] (let [fg-color [20 120 90] bg-color [180 5 90]] (q/background 180 5 90) (q/with-translation [250 250] (doseq [[idx radius] (map-indexed vector (range 20 150 10))] (q/no-fill) (q/no-stroke) (let [paint (if (zero? idx) q/fill q/stroke) {[x y] :p r :r} (as-> (circle (+ (q/millis) (* idx 100)) radius) shape (g/translate shape (m/*! (m/-! shape))))] (apply paint (mix-hsb fg-color bg-color (/ (inc idx) 10))) (q/ellipse x y r r)))))) (let [center (v/vec2 250 250) mouse (v/vec2 100 100)] (g/translate center (m/*! (m/- mouse center) 0.1))) (defn mouse-moved [state ev] (assoc state (v/vec2 ev))) #_:clj-kondo/ignore (q/defsketch seventeen :title "Seventeen" :size [500 500] :settings #(q/pixel-density (q/display-density)) :setup setup :update update-state :draw draw-state :mouse-moved mouse-moved ;; :renderer :p2d :features [:keep-on-top :no-bind-output] :middleware [qm/pause-on-error qm/fun-mode])