Not completely working -- tree drawing is still borked -- but much better.

This commit is contained in:
Simon Brooke 2025-08-30 12:56:48 +01:00
parent 357d4c5853
commit 252ddaf5a6

View file

@ -38,13 +38,21 @@
:else (not-a-number! n)))
(defn sanitise-angle
"Take this `angle`, and return a number between 0 and 360 that represents
it as an angular measurement."
[angle]
(let [v (cond (.isNaN js/Number angle) 0
(< (abs angle) 0.5) 0
(< (abs angle) 360) angle
:else (rem 360 angle))]
(.log js/console (str "(sanitise-angle " angle ") -> " v))
v))
(let [a (abs angle)
p (pos? angle)
v (cond (.isNaN js/Number a) 0
(< a 0.5) 0
(<= a 360) angle
;; TODO: `rem` is possibly wrong when we get into negative numbers
:else (loop [r a]
(if (<= r 360) r
(recur (- r 360)))))
v' (if p v (- 360 v))]
(.log js/console (str "(sanitise-angle " angle ") -> " v'))
v'))
(defn turn!
"Turn the turtle clockwise by this `angle`, expressed in degrees with
@ -54,7 +62,7 @@
(if (number? angle)
(swap! turtle assoc :theta
(sanitise-angle
(rem 360 (+ (:theta @turtle) angle))))
(+ (:theta @turtle) angle)))
(not-a-number! angle))
(.info js/console (str "(turn! " angle
") :: :theta now " (:theta @turtle)))
@ -215,8 +223,7 @@
(log-turtle!)
(turn-to! 180)
;; (draw-tree! 100 70 60 5 0.25 0.7 3)
;; (map #(draw-polygon! % 100) (range 3 20))
(draw-polygon! 3 100)
(doall (map #(draw-polygon! % 100) (range 3 20)))
</script>
</body>
</html>