ronin/examples/basics/stars.lisp
2020-03-28 09:47:58 +09:00

74 lines
940 B
Common Lisp

; 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))))))