74 lines
940 B
Common Lisp
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)))))) |