diff --git a/index.html b/index.html index b614a0f..b938f38 100644 --- a/index.html +++ b/index.html @@ -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))) \ No newline at end of file