; stars

(clear)


; times

(defn times 
  (v f) 
  (
    (f v) 
    (if 
      (gt v 1) 
      (times 
        (sub v 1) f))))


; convert deg to radians

(defn deg-rad 
  (deg) 
  (mul deg 
    (div PI 180)))


; position on a circle from angle

(defn circle-pos 
  (cx cy r a) {:x 
  (add cx 
    (mul r 
      (cos a))) :y 
  (add cy 
    (mul r 
      (sin a)))})


; draw

(defn draw-spoke 
  (cx cy r a) 
  (
    (stroke 
      (line cx cy 
        (:x 
          (circle-pos cx cy r a)) 
        (:y 
          (circle-pos cx cy r a))) "white" 2)))

;
(defn draw-star 
  (cx cy r c) 
  (
    (times c 
      (λ 
        (i) 
        (
          (draw-spoke cx cy r 
            (deg-rad 
              (mul i 
                (div 360 c)))))))))


; main

(times 100 
  (λ () 
    (
      (draw-star 
        (random 100 frame:w) 
        (random 100 frame:h) 
        (random 10 100) 
        (floor 
          (random 3 32))))))