151c Flower

(meta linear-colour-space: 1)

(define math/TAU 6.283185)

(wash)
(flower colour: (col/rgb r: 0.8 ~ (gen/scalar)
                         g: 0.3 ~ (gen/scalar)
                         b: 0.2 ~ (gen/scalar)
                         alpha: 0.4 ~ (gen/scalar))
        posx: (/ canvas/width 2)
        posy: (/ canvas/height 2)
        sc: 1.0 ~ (gen/scalar min: 0.6 max: 2.0))

(fn (petal-1 angle: 0
             colour: (col/rgb r: 0.0 g: 1.0 b: 0.0 alpha: 1.0))
  (on-matrix-stack
    (rotate angle: (math/radians->degrees from: angle))
    (bezier-bulging tessellation: 20
                    line-width: 50 ~ (gen/int min: 10 max: 200)
                    colour: colour
                    coords: [[0 0]
                             [233.33 100]
                             [566.66 -100]
                             [800 0]])))

(fn (petal-2 angle: 0
             colour: (col/rgb r: 0.0 g: 1.0 b: 0.0 alpha: 1.0))
  (on-matrix-stack
    (rotate angle: (math/radians->degrees from: angle))
    (bezier-bulging tessellation: 20
                    line-width: 50 ~ (gen/int min: 10 max: 200)
                    colour: colour
                    coords: [[0 0]
                             [233.33 -100]
                             [566.66 100]
                             [800 0]])))

(fn (circ-1 petals: 0
            colour: (col/rgb r: 0.0 g: 1.0 b: 0.0 alpha: 1.0)
            sc: 1.0)
  (on-matrix-stack
    (scale scalar: sc)
    (define
      strokes petals
      colcol (col/set-alpha from: colour value: 0.3)
      rem (interp/build from: [0 strokes] to: [0 math/TAU]))
    (loop (i from: 0 to: strokes)
          (petal-1 angle: (interp/value from: rem t: i) colour: colcol))))

(fn (circ-2 petals: 0
            colour: (col/rgb r: 0.0 g: 1.0 b: 0.0 alpha: 1.0)
            sc: 1.0)
  (on-matrix-stack
    (scale scalar: sc)
    (define
      strokes petals
      colcol (col/set-alpha from: colour value: 0.4)
      rem (interp/build from: [0 strokes] to: [0 math/TAU]))
    (loop (i from: 0 to: strokes)
          (petal-2 angle: (interp/value from: rem t: i) colour: colcol))))

(fn (layered-petals petals: 0
                    colour: (col/rgb r: 0.0 g: 1.0 b: 0.0 alpha: 1.0)
                    sc: 1.0)
  (circ-1 petals: petals colour: colour sc: sc)
  (rotate angle: (math/radians->degrees from: 0.1 ~ (gen/scalar min: 0.01 max: 0.4)))
  (circ-2 petals: petals colour: colour sc: sc))

(fn (flower colour: (col/rgb r: 0.0 g: 1.0 b: 0.0 alpha: 0.5)
            posx: 0
            posy: 0
            sc: 1)
  (on-matrix-stack
    (translate vector: [posx posy])
    (scale scalar: sc)
    (define [c2 c3] (col/analagous from: colour))
    (layered-petals petals: 23 ~ (gen/int min: 1 max: 50) colour: colour sc: 0.6 ~ (gen/scalar min: 0.1 max: 0.9))
    (layered-petals petals: 19 ~ (gen/int min: 1 max: 50) colour: c3 sc: 0.5 ~ (gen/scalar min: 0.1 max: 0.9))
    (layered-petals petals: 17 ~ (gen/int min: 1 max: 50) colour: c2 sc: 0.3 ~ (gen/scalar min: 0.1 max: 0.9))))

(fn (wash vol: 200
          line-width: 70
          line-segments: 5
          colour: (col/rgb r: 0.627 g: 0.627 b: 0.627 alpha: 0.4)
          seed: 272)
  (define
    w/3 (/ canvas/width 3)
    h/3 (/ canvas/height 3))
  (loop (d from: -20 to: 1020 inc: 20)
        (bezier tessellation: line-segments
                line-width: line-width
                coords: [[0            (wash-n x: 0            d: d seed: seed vol: vol)]
                         [w/3          (wash-n x: w/3          d: d seed: seed vol: vol)]
                         [(* w/3 2)    (wash-n x: (* w/3 2)    d: d seed: seed vol: vol)]
                         [canvas/width (wash-n x: canvas/width d: d seed: seed vol: vol)]]
                colour: colour)

        (bezier tessellation: line-segments
                line-width: line-width
                coords: [[(wash-n x: 0             d: d seed: seed vol: vol) 0]
                         [(wash-n x: h/3           d: d seed: seed vol: vol) h/3]
                         [(wash-n x: (* h/3 2)     d: d seed: seed vol: vol) (* h/3 2)]
                         [(wash-n x: canvas/height d: d seed: seed vol: vol) canvas/height]]
                colour: colour)))

(fn (wash-n x: 0 d: 0 seed: 0 vol: 1)
  (+ d (* vol (prng/perlin x: x y: d z: seed))))