From 43dff58b33267a7b7552e0cd71ab46553b3eeb2e Mon Sep 17 00:00:00 2001 From: Charles Comstock Date: Mon, 30 Sep 2024 23:22:07 -0500 Subject: [PATCH] Draw a path between sunflower points instead of dotting along --- src/shimmers/sketches.cljs | 1 + src/shimmers/sketches/sunflower_points.cljs | 42 +++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/shimmers/sketches/sunflower_points.cljs diff --git a/src/shimmers/sketches.cljs b/src/shimmers/sketches.cljs index 86cdf7f4..6ae82586 100644 --- a/src/shimmers/sketches.cljs +++ b/src/shimmers/sketches.cljs @@ -244,6 +244,7 @@ shimmers.sketches.subliminal shimmers.sketches.substrate shimmers.sketches.sunflower + shimmers.sketches.sunflower-points shimmers.sketches.superposition shimmers.sketches.superposition-mirrored shimmers.sketches.terrain-grid diff --git a/src/shimmers/sketches/sunflower_points.cljs b/src/shimmers/sketches/sunflower_points.cljs new file mode 100644 index 00000000..010d920f --- /dev/null +++ b/src/shimmers/sketches/sunflower_points.cljs @@ -0,0 +1,42 @@ +(ns shimmers.sketches.sunflower-points + (:require + [clojure.math :as math] + [shimmers.common.svg :as csvg :include-macros true] + [shimmers.common.ui.controls :as ctrl] + [shimmers.common.ui.svg :as usvg] + [shimmers.math.equations :as eq] + [shimmers.math.vector :as v] + [shimmers.sketch :as sketch :include-macros true] + [thi.ng.geom.vector :as gv] + [thi.ng.math.core :as tm])) + +(def width 800) +(def height 600) +(defn rv [x y] + (gv/vec2 (* width x) (* height y))) + +(defn shapes [{:keys [points alpha]}] + (let [center (rv 0.5 0.5) + radius (* 0.45 (min width height)) + exterior (min (int (* alpha (math/sqrt points))) points) + interior (- points exterior)] + (csvg/path (into [[:M center]] + (for [i (range points) + :let [r (if (< i interior) (/ (float i) (inc interior)) 1.0) + theta (* eq/TAU (/ i (eq/sqr tm/PHI)))]] + [:L (v/+polar center (* r radius) theta)]))))) + +(defn scene [{:keys [scene-id]}] + (csvg/svg-timed {:id scene-id + :width width + :height height + :stroke "black" + :fill "white" + :stroke-width 0.5} + (shapes {:points 256 :alpha 1.0}))) + +(sketch/definition sunflower-points + {:created-at "2024-09-30" + :tags #{} + :type :svg} + (ctrl/mount (usvg/page sketch-args scene)))