Stage aphorisms up until and including nineteen
This commit is contained in:
parent
d8b7bc3a02
commit
ef48c15e58
5 changed files with 225 additions and 1 deletions
|
|
@ -37,6 +37,6 @@
|
||||||
:setup setup
|
:setup setup
|
||||||
:update update-state
|
:update update-state
|
||||||
:draw draw-state
|
:draw draw-state
|
||||||
:renderer :p3d
|
:renderer :opengl
|
||||||
:features [:keep-on-top :no-bind-output]
|
:features [:keep-on-top :no-bind-output]
|
||||||
:middleware [qm/pause-on-error qm/fun-mode])
|
:middleware [qm/pause-on-error qm/fun-mode])
|
||||||
|
|
|
||||||
111
src/aphorisms/eighteen.clj
Normal file
111
src/aphorisms/eighteen.clj
Normal file
|
|
@ -0,0 +1,111 @@
|
||||||
|
(ns aphorisms.eighteen
|
||||||
|
(:require [quil.core :as q]
|
||||||
|
[quil.middleware :as qm]
|
||||||
|
[thi.ng.geom.vector :as v]
|
||||||
|
[thi.ng.geom.rect :as r]
|
||||||
|
[thi.ng.geom.core :as g]
|
||||||
|
[thi.ng.math.core :as m]))
|
||||||
|
|
||||||
|
(def bounds (r/rect 500))
|
||||||
|
|
||||||
|
(defn arc [c start end]
|
||||||
|
{:c c
|
||||||
|
:start start
|
||||||
|
:end end})
|
||||||
|
|
||||||
|
(defn radians [arc start-or-end]
|
||||||
|
(g/angle-between (:c arc) (get arc start-or-end)))
|
||||||
|
|
||||||
|
(defn radius [arc]
|
||||||
|
(m/mag (m/- (:c arc) (:start arc))))
|
||||||
|
|
||||||
|
(comment
|
||||||
|
(def tmp (arc (v/vec2 0 0) (v/vec2 -100 0) (v/vec2 0 100)))
|
||||||
|
|
||||||
|
(radians tmp :start) ;; => 3.141592653589793
|
||||||
|
(radians tmp :end) ;; => 1.5707963267948966
|
||||||
|
(radius tmp) ;; => 100.0
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
;; a random sample inside bounds separates the space into four parts
|
||||||
|
;; i want to get the biggest part
|
||||||
|
|
||||||
|
(identity bounds)
|
||||||
|
;; => {:p [0.0 0.0], :size [500.0 500.0]}
|
||||||
|
|
||||||
|
(g/random-point-inside bounds)
|
||||||
|
;; => [3.722300840831416 95.03615495022028]
|
||||||
|
|
||||||
|
|
||||||
|
(defn subdivide-at [rect p]
|
||||||
|
[(r/rect (:p rect) p)
|
||||||
|
(r/rect (v/vec2 (:x p) (r/bottom rect)) (v/vec2 (r/right rect) (:y p)))
|
||||||
|
(r/rect (v/vec2 (r/left rect) (:y p)) (v/vec2 (:x p) (r/top rect)))
|
||||||
|
(r/rect (v/vec2 (:x p) (:y p)) (v/vec2 (r/top rect) (r/right rect)))])
|
||||||
|
|
||||||
|
(let [division bounds
|
||||||
|
p (g/random-point-inside division)
|
||||||
|
biggest-division (->> (subdivide-at bounds p)
|
||||||
|
(sort-by (comp - g/area))
|
||||||
|
(first))]
|
||||||
|
[p
|
||||||
|
biggest-division
|
||||||
|
(-> (g/translate biggest-division (m/- p))
|
||||||
|
(g/scale 0.66)
|
||||||
|
(g/translate p))])
|
||||||
|
|
||||||
|
(defn reset-state [& _]
|
||||||
|
(let [p (g/random-point-inside bounds)
|
||||||
|
start (m/+ p (v/randvec2 50))
|
||||||
|
end (-> (g/translate start (m/- p))
|
||||||
|
(g/rotate (rand m/HALF_PI))
|
||||||
|
(g/translate p))]
|
||||||
|
{:arcs [(arc p start end)]}))
|
||||||
|
|
||||||
|
(defn setup []
|
||||||
|
(q/frame-rate 1)
|
||||||
|
(q/rect-mode :center)
|
||||||
|
(q/ellipse-mode :center)
|
||||||
|
(q/color-mode :hsb 360 100 100)
|
||||||
|
(q/background 10 20 100)
|
||||||
|
(reset-state))
|
||||||
|
|
||||||
|
(defn update-state [state]
|
||||||
|
state)
|
||||||
|
|
||||||
|
(defn draw-state [state]
|
||||||
|
(q/background 10 20 100)
|
||||||
|
(q/stroke 200 80 100)
|
||||||
|
(q/no-fill)
|
||||||
|
(doseq [{[x y] :c :as arc} (:arcs state)
|
||||||
|
:let [start (radians arc :start)
|
||||||
|
end (radians arc :end)]]
|
||||||
|
(q/ellipse x y 5 5)
|
||||||
|
(q/line (:c arc) (:start arc))
|
||||||
|
(q/line (:c arc) (:end arc))
|
||||||
|
(q/arc x y (radius arc) (radius arc) (min start end) (max start end))))
|
||||||
|
|
||||||
|
(defn origin-at-bottom-left
|
||||||
|
"Make processing and thi.ng use the same coordinate system, with the orgin
|
||||||
|
at the bottom left."
|
||||||
|
[options]
|
||||||
|
;; note that this usually doesn't make any difference, but we're using
|
||||||
|
;; "r/bottom" and "r/top" here soooo… let's be consistent
|
||||||
|
(update options :draw (fn [draw]
|
||||||
|
(fn [& args]
|
||||||
|
(q/translate 0 (get-in options [:size 1]))
|
||||||
|
(q/scale 1 -1)
|
||||||
|
(apply draw args)))))
|
||||||
|
|
||||||
|
#_:clj-kondo/ignore
|
||||||
|
(q/defsketch eighteen
|
||||||
|
:title "Eighteen"
|
||||||
|
:size (:size bounds)
|
||||||
|
:settings #(q/pixel-density (q/display-density))
|
||||||
|
:setup setup
|
||||||
|
:update update-state
|
||||||
|
:mouse-pressed reset-state
|
||||||
|
:draw draw-state
|
||||||
|
;; :renderer :p2d
|
||||||
|
:middleware [qm/pause-on-error qm/fun-mode origin-at-bottom-left])
|
||||||
|
|
@ -41,6 +41,10 @@
|
||||||
(apply q/vertex pt)))
|
(apply q/vertex pt)))
|
||||||
(q/end-shape :close))))
|
(q/end-shape :close))))
|
||||||
|
|
||||||
|
(defn settings []
|
||||||
|
(q/pixel-density (q/display-density))
|
||||||
|
(q/smooth 2))
|
||||||
|
|
||||||
(q/defsketch eleven
|
(q/defsketch eleven
|
||||||
:title "Eleven"
|
:title "Eleven"
|
||||||
:size [500 500]
|
:size [500 500]
|
||||||
|
|
|
||||||
42
src/aphorisms/nineteen.clj
Normal file
42
src/aphorisms/nineteen.clj
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
(ns aphorisms.nineteen
|
||||||
|
(:require [quil.core :as q]
|
||||||
|
[quil.middleware :as qm]
|
||||||
|
[thi.ng.geom.rect :as r]
|
||||||
|
[thi.ng.geom.core :as g]
|
||||||
|
[thi.ng.math.core :as m]))
|
||||||
|
|
||||||
|
(def bounds (r/rect 500 500))
|
||||||
|
|
||||||
|
(defn setup []
|
||||||
|
(q/frame-rate 1)
|
||||||
|
(q/rect-mode :center)
|
||||||
|
(q/ellipse-mode :center)
|
||||||
|
(q/color-mode :hsb 360 100 100)
|
||||||
|
(q/background 10 20 100)
|
||||||
|
{})
|
||||||
|
|
||||||
|
(defn update-state [state]
|
||||||
|
state)
|
||||||
|
|
||||||
|
(defn draw-state [state]
|
||||||
|
(let [canvas (g/scale (:size bounds) 0.92)]
|
||||||
|
(q/background 40 10 100)
|
||||||
|
(q/no-fill)
|
||||||
|
(q/with-translation [250 250]
|
||||||
|
(doseq [i (range 100)
|
||||||
|
:let [norm (* 0.01 i)
|
||||||
|
x (m/map-interval i [0 99] [(* -0.5 (:x canvas)) (* 0.5 (:x canvas))])
|
||||||
|
x-off (m/map-interval (q/sin (* norm q/PI)) [-1 1] [-50 50])]]
|
||||||
|
(q/line (+ x x-off) -20 (+ x x-off) 20)))))
|
||||||
|
|
||||||
|
|
||||||
|
#_:clj-kondo/ignore
|
||||||
|
(q/defsketch eighteen
|
||||||
|
:title "Eighteen"
|
||||||
|
:size (:size bounds)
|
||||||
|
:settings #(q/pixel-density (q/display-density))
|
||||||
|
:setup setup
|
||||||
|
:update update-state
|
||||||
|
:draw draw-state
|
||||||
|
;; :renderer :p2d
|
||||||
|
:middleware [qm/pause-on-error qm/fun-mode])
|
||||||
67
src/aphorisms/sixteen.clj
Normal file
67
src/aphorisms/sixteen.clj
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
(ns aphorisms.sixteen
|
||||||
|
(:require [thi.ng.math.core :as m]
|
||||||
|
[thi.ng.geom.core :as g]
|
||||||
|
[thi.ng.geom.vector :as v]
|
||||||
|
[thi.ng.geom.line :as l]
|
||||||
|
[thi.ng.math.noise :as n]
|
||||||
|
[thi.ng.geom.rect :as r]
|
||||||
|
[quil.core :as q]
|
||||||
|
[quil.middleware :as qm]))
|
||||||
|
|
||||||
|
(defn setup []
|
||||||
|
(q/frame-rate 30)
|
||||||
|
(q/color-mode :hsb 360 100 100)
|
||||||
|
(q/rect-mode :center)
|
||||||
|
(q/ellipse-mode :center)
|
||||||
|
(q/background 180 10 90)
|
||||||
|
{})
|
||||||
|
|
||||||
|
|
||||||
|
(defn update-state [state]
|
||||||
|
state)
|
||||||
|
|
||||||
|
(defn grid [r divisions]
|
||||||
|
(->>
|
||||||
|
(g/subdivide r {:num divisions})
|
||||||
|
(map (comp v/vec2 (juxt r/left r/top)))
|
||||||
|
#_(take (inc (* divisions divisions)))))
|
||||||
|
|
||||||
|
(def grid-points
|
||||||
|
(->> (g/subdivide (r/rect [72 72] [428 428]) {:num 25})
|
||||||
|
(map g/edges)
|
||||||
|
(apply concat)
|
||||||
|
(apply concat)
|
||||||
|
(dedupe)
|
||||||
|
(map v/vec2)))
|
||||||
|
|
||||||
|
(defn line-crossing [v length]
|
||||||
|
(l/line2 (m/- v (v/vec2 [(* length 0.5) 0]))
|
||||||
|
(m/+ v (v/vec2 [(* length 0.5) 0]))))
|
||||||
|
|
||||||
|
(defn draw-state [state]
|
||||||
|
(q/background 180 10 90)
|
||||||
|
(q/no-fill)
|
||||||
|
(doseq [[p1 p2 :as pt] grid-points
|
||||||
|
:let [length (m/map-interval p2 [72 428] [3 18])
|
||||||
|
[[x1 y1] [x2 y2]] (-> (line-crossing pt length)
|
||||||
|
(g/translate (m/- pt))
|
||||||
|
(g/rotate (+ m/QUARTER_PI
|
||||||
|
(* (n/noise2 (* 0.52 p1) (* 0.02 p2)) m/QUARTER_PI)))
|
||||||
|
(g/translate pt)
|
||||||
|
(g/vertices))]]
|
||||||
|
(q/line x1 y1 x2 y2)
|
||||||
|
(q/stroke-cap :round)
|
||||||
|
(q/stroke-weight 1.2)
|
||||||
|
(q/stroke 340 20 90)))
|
||||||
|
|
||||||
|
#_:clj-kondo/ignore
|
||||||
|
(q/defsketch sixteen
|
||||||
|
:title "Sixteen"
|
||||||
|
:size [500 500]
|
||||||
|
:settings #(q/pixel-density (q/display-density))
|
||||||
|
:setup setup
|
||||||
|
:update update-state
|
||||||
|
:draw draw-state
|
||||||
|
:renderer :p2d
|
||||||
|
:features [:keep-on-top :no-bind-output]
|
||||||
|
:middleware [qm/pause-on-error qm/fun-mode])
|
||||||
Loading…
Add table
Add a link
Reference in a new issue