1556 Biomorphs
(meta linear-colour-space: 1)
;; main will render a Dawkin's Biomorph
(render)
;; render a segment at 0, 0 with a length along the positive x axis
;;
(fn (segment angle: 0.1
length: 100
colour: (col/rgb r: 0.0 g: 0.0 b: 0.3 alpha: 1.0))
(rotate angle: angle)
(rect position: [(/ length 2) 0]
width: length
height: 5 ~ (gen/int min: 2 max: 30)
colour: colour)
;; translate to start the next segment at the end of this one
(translate vector: [length 0]))
;; render-half is a series of segments which will have differing
;; lengths and angles
;;
(fn (render-half)
(segment length: 30 ~ (gen/int max: 100) angle: 101 ~ (gen/scalar max: 360))
(segment length: 43 ~ (gen/int max: 100) angle: 02 ~ (gen/scalar max: 360))
(segment length: 73 ~ (gen/int max: 100) angle: 211 ~ (gen/scalar max: 360))
(segment length: 33 ~ (gen/int max: 100) angle: 21 ~ (gen/scalar max: 360))
(segment length: 13 ~ (gen/int max: 100) angle: 106 ~ (gen/scalar max: 360))
(segment length: 03 ~ (gen/int max: 100) angle: 302 ~ (gen/scalar max: 360))
(segment length: 43 ~ (gen/int max: 100) angle: 26 ~ (gen/scalar max: 360))
(segment length: 23 ~ (gen/int max: 100) angle: 108 ~ (gen/scalar max: 360))
(segment length: 43 ~ (gen/int max: 100) angle: 102 ~ (gen/scalar max: 360))
(segment length: 83 ~ (gen/int max: 100) angle: 31 ~ (gen/scalar max: 360))
(segment length: 63 ~ (gen/int max: 100) angle: 204 ~ (gen/scalar max: 360))
(segment length: 93 ~ (gen/int max: 100) angle: 108 ~ (gen/scalar max: 360))
(segment length: 23 ~ (gen/int max: 100) angle: 14 ~ (gen/scalar max: 360))
(segment length: 34 ~ (gen/int max: 100) angle: 308 ~ (gen/scalar max: 360))
(segment length: 53 ~ (gen/int max: 100) angle: 102 ~ (gen/scalar max: 360))
(segment length: 33 ~ (gen/int max: 100) angle: 213 ~ (gen/scalar max: 360))
(segment length: 73 ~ (gen/int max: 100) angle: 34 ~ (gen/scalar max: 360))
(segment length: 23 ~ (gen/int max: 100) angle: 104 ~ (gen/scalar max: 360))
(segment length: 53 ~ (gen/int max: 100) angle: 217 ~ (gen/scalar max: 360))
(segment length: 63 ~ (gen/int max: 100) angle: 09 ~ (gen/scalar max: 360))
(segment length: 23 ~ (gen/int max: 100) angle: 301 ~ (gen/scalar max: 360))
(segment length: 93 ~ (gen/int max: 100) angle: 21 ~ (gen/scalar max: 360))
(segment length: 53 ~ (gen/int max: 100) angle: 123 ~ (gen/scalar max: 360))
(segment length: 43 ~ (gen/int max: 100) angle: 12 ~ (gen/scalar max: 360))
(segment length: 33 ~ (gen/int max: 100) angle: 015 ~ (gen/scalar max: 360))
(segment length: 23 ~ (gen/int max: 100) angle: 037 ~ (gen/scalar max: 360))
(segment length: 23 ~ (gen/int max: 100) angle: 212 ~ (gen/scalar max: 360))
(segment length: 63 ~ (gen/int max: 100) angle: 38 ~ (gen/scalar max: 360))
(segment length: 93 ~ (gen/int max: 100) angle: 114 ~ (gen/scalar max: 360))
(segment length: 23 ~ (gen/int max: 100) angle: 300 ~ (gen/scalar max: 360)))
;; render the Biomorph as 2 symmetrical halves
(fn (render)
(on-matrix-stack
(translate vector: [(/ canvas/width 2) (/ canvas/height 2)])
(repeat/symmetry-vertical fn: (address-of render-half))))