Last active
December 1, 2020 10:37
-
-
Save shspage/c75a2a3875366b1ad10c509ee24f066f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; bezier_study | |
;; To Edit the Shape: | |
;; Click each "segment" at the end | |
;; of this code and drag the point. | |
(defn adjust_dir [p p1 p2] | |
(let [angle (vec2/angle (vec2/- p1 p)) | |
len (vec2/dist p1 p2)] | |
(vec2/+ p1 (vec2/dir angle len)))) | |
(defn ui_line [p0 p1] | |
{:type "path" :path (line p0 p1) :class "dashed"}) | |
(defn ui_point [id p] | |
{:id id :type "point" :pos p}) | |
(defn segment | |
{:handles | |
{:draw (fn {:params [p0 p1 p2]} | |
[(ui_line p0 p1) | |
(ui_line p1 p2) | |
(ui_point :ldir p0) | |
(ui_point :anc p1) | |
(ui_point :rdir p2)]) | |
:drag (fn {:id id :pos p :params[p0 p1 p2]} | |
(case id | |
:ldir [p p1 (adjust_dir p p1 p2)] | |
:rdir [(adjust_dir p p1 p0) p1 p] | |
:anc (let [d (vec2/- p1 p)] | |
[(vec2/- p0 d) p (vec2/- p2 d)]))) | |
}} | |
[p0 p1 p2] | |
{:p0 p0 :p1 p1 :p2 p2} | |
) | |
(defn bezier | |
[& segs] | |
(apply concat [:path :M (get (first segs) :p1)] | |
(for [n (range (dec (count segs)))] | |
[:C (get (nth segs n) :p2) | |
(get (nth segs (inc n)) :p0) | |
(get (nth segs (inc n)) :p1)]))) | |
:start-sketch | |
(background "#fff") | |
(style (stroke "#888" 4) | |
(bezier | |
(segment [206.5501 144.5429] [141.8392 51.9955] [90.0704 -22.0424]) | |
(segment [-11.9160 -40.0951] [-85.9539 11.6737] [-145.1843 53.0887]) | |
(segment [-159.6264 134.6778] [-118.2114 193.9082] [-85.0794 241.2924]) | |
(segment [-19.8081 252.8461] [27.5762 219.7141] [65.4836 193.2085]) | |
(segment [74.7266 140.9915] [48.2210 103.0841] [27.0165 72.7581]) | |
(segment [-14.7572 65.3638] [-45.0831 86.5682] [-69.3438 103.5318]) | |
(segment [-75.2593 136.9507] [-58.2958 161.2115] [-44.7249 180.6201]) | |
(segment [-17.9898 185.3525] [1.4188 171.7816] [16.9457 160.9249]))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment