Skip to content

Instantly share code, notes, and snippets.

@nariakiiwatani
Created June 28, 2020 13:23
Show Gist options
  • Select an option

  • Save nariakiiwatani/9305b4f4a52e21ddadd03dba708a3987 to your computer and use it in GitHub Desktop.

Select an option

Save nariakiiwatani/9305b4f4a52e21ddadd03dba708a3987 to your computer and use it in GitHub Desktop.
(defn line-polar
{:params [{:label "length" :type "number"}
{:label "rot" :type "angle"}]
:handles {:draw (fn [{:params [l r]}]
[{:id "edge" :type "point" :pos (vec2/* [(cos r) (sin r)] [l l])}])
:drag (fn [{:id id :pos p :prev-pos pp :params [l r]}] [(vec2/dist [0 0] p) (+ r (calc-dragged-rotation :pos p :prev-pos pp))])
}
}
[l r]
(transform (rotate r)
(line [0 0] [l 0])))
(defn seconds
{:inverse (fn [ret] [ret])}
[sec] sec)
(defn to-seconds
{:inverse (fn [ret] [ret])}
[sec] sec)
(defn to-minutes [sec] (/ (to-seconds sec) 60))
(defn minutes
{:inverse (fn [ret] [(to-minutes ret)])}
[sec] (* (seconds sec) 60))
(def to-minutes
^(assoc (meta to-minutes)
:inverse (fn [ret] [(minutes ret)])) to-minutes)
(defn to-hours [sec] (/ (to-minutes sec) 60))
(defn hours
{:inverse (fn [ret] [(to-hours ret)])}
[sec] (* (minutes sec) 60))
(def to-hours
^(assoc (meta to-hours)
:inverse (fn [ret] [(hours ret)])) to-hours)
(deftime sec 20538.9020684615 :duration (hours 24))
(defvar speed 204.0695923038599)
(defvar t (* sec speed))
(defvar size 100)
(defn linear-map
{:inverse (fn [ret [from to value]] [to from ret])}
[from to value]
(lerp (second to) (first to) (/ (- value (first from)) (- (second from) (first from))))
)
(defn to-seconds-angle
{:inverse (fn [ret] [(linear-map [0 TWO_PI] [0 (minutes 1)] ret)])}
[t]
(linear-map [0 (minutes 1)] [0 TWO_PI] t))
(defn to-minutes-angle
{:inverse (fn [ret] [(linear-map [0 TWO_PI] [0 (hours 1)] ret)])}
[t]
(linear-map [0 (hours 1)] [0 TWO_PI] t))
(defn to-hours-angle
{:inverse (fn [ret] [(linear-map [0 TWO_PI] [0 (hours 12)] ret)])}
[t]
(linear-map [0 (hours 12)] [0 TWO_PI] t))
;(transform (rotate (- HALF_PI))
(style (stroke "salmon" 10) (circle [0 0] size))
(style (stroke "black" 10)
(line-polar (const 50) (to-hours-angle t)))
(style (stroke "black" 5)
(line-polar (const 100) (to-minutes-angle t)))
(style (stroke "black" 1)
(line-polar (const 100) (to-seconds-angle t)))
;)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment