heyarne.aphorisms/src/aphorisms/seventeen.clj
2021-04-01 20:32:08 +02:00

67 lines
1.9 KiB
Clojure

(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])