1918 Einstein

(meta linear-colour-space: 1)

(define texture "einstein.png")
(define per-pixel-funcs [(address-of pass-0)
                         (address-of pass-1)
                         (address-of pass-2)
                         (address-of pass-3)])

(each (per-pixel-func from: per-pixel-funcs)
      (bitmap/each from: texture
                   position: [500 500]
                   width: 1000
                   height: 1000
                   fn: per-pixel-func))

(fn (pass-0 colour: (col/rgb r: 0 g: 0 b: 0 alpha: 0) position: [100 100])
  (per-pixel a: (col/e0 from: colour)
             width: 1.0
             from: [0 0]
             to: [1 1]))

(fn (pass-1 colour: (col/rgb r: 0 g: 0 b: 0 alpha: 0) position: [100 100])
  (per-pixel a: (col/e0 from: colour)
             width: {14.3 (gen/scalar min: 0.1 max: 15)}
             from: [{10 (gen/scalar min: -15 max: 15)} {5 (gen/scalar min: -15 max: 15)}]
             to: [{-9 (gen/scalar min: -15 max: 15)} {-1 (gen/scalar min: -15 max: 15)}]))

(fn (pass-2 colour: (col/rgb r: 0 g: 0 b: 0 alpha: 0) position: [100 100])
  (per-pixel a: (col/e0 from: colour)
             width: {2.4 (gen/scalar min: 0.1 max: 15)}
             from: [{15 (gen/scalar min: -15 max: 15)} {-5 (gen/scalar min: -15 max: 15)}]
             to: [{-0 (gen/scalar min: -15 max: 15)} {-2 (gen/scalar min: -15 max: 15)}]))

(fn (pass-3 colour: (col/rgb r: 0 g: 0 b: 0 alpha: 0) position: [100 100])
  (per-pixel a: (col/e0 from: colour)
             width: {4.8 (gen/scalar min: 0.1 max: 15)}
             from: [{-5 (gen/scalar min: -15 max: 15)} {-2 (gen/scalar min: -15 max: 15)}]
             to: [{-7 (gen/scalar min: -15 max: 15)} {-3 (gen/scalar min: -15 max: 15)}]))

(fn (per-pixel a: 0 width: 0 from: [0 0] to: [0 0])
  (define
    angle (* a math/PI)
    angle-cos (angle.math/cos)
    angle-sin (angle.math/sin))
  (line from: [(* (from.get-x) angle-cos) (* (from.get-y) angle-sin)]
        to: [(* (to.get-x) angle-cos) (* (to.get-y) angle-sin)]
        width: (- width a)
        colour: (col/rgb r: a g: a b: a alpha: 0.2)))