Painting in Clojure

Painting in Clojure

Explore Clojure by building a digital Jackson Pollock.

0d5db21120a408c4c5dbd3ec1e1b55f0?s=128

Tom Booth

August 18, 2015
Tweet

Transcript

  1. Painting in Clojure by @tombooth

  2. Jackson Pollock Jackson Pollock: Number 8

  3. Defining our space - I

  4. Defining our space - II ( d e f s

    p a c e [ 8 ; ; w i d t h 5 ; ; h e i g h t 6 ] ) ; ; d e p t h ( d e f g r a v i t y [ 0 - 9 . 8 0 ] ) ( d e f c a n v a s - n o r m a l [ 0 1 0 ] )
  5. Picking a starting point A gesture has to start somewhere

    inside of our defined space. ( d e f n s t a r t i n g - p o i n t [ ] ( m a p r a n d s p a c e ) )
  6. Projection - I

  7. Projection - II ( d e f n t i

    m e - t o - c a n v a s [ p o s i t i o n v e l o c i t y a c c e l e r a t i o n ] ( l e t [ a a c c e l e r a t i o n b ( * 2 v e l o c i t y ) c ( * 2 p o s i t i o n ) d i s c r i m i n a n t ( - ( * b b ) ( * 4 a c ) ) m i n u s - b ( - 0 b ) a d d - s q r t ( / ( + m i n u s - b ( M a t h / s q r t d i s c r i m i n a n t ) ) ( * 2 a ) ) m i n u s - s q r t ( / ( - m i n u s - b ( M a t h / s q r t d i s c r i m i n a n t ) ) ( * 2 a ) ) ] ( m a x a d d - s q r t m i n u s - s q r t ) ) )
  8. Projection - III ( d e f n p o

    s i t i o n - a t [ t i m e i n i t i a l - p o s i t i o n i n i t i a l - v e l o c i t y a c c e l e r a t i o n ] ( + i n i t i a l - p o s i t i o n ( * i n i t i a l - v e l o c i t y t i m e ) ( / ( * a c c e l e r a t i o n t i m e t i m e ) 2 ) ) ) ( d e f n v e l o c i t y - a t [ t i m e i n i t i a l - v e l o c i t y a c c e l e r a t i o n ] ( + ( * a c c e l e r a t i o n t i m e ) i n i t i a l - v e l o c i t y ) ) ( d e f n p r o j e c t - p o i n t [ p o s i t i o n v e l o c i t y ] ( l e t [ [ i j k ] p o s i t i o n [ v i v j v k ] v e l o c i t y [ a i a j a k ] g r a v i t y t i m e ( t i m e - t o - c a n v a s j v j a j ) p r o j e c t e d - p o s i t i o n [ ( p o s i t i o n - a t t i m e i v i a i ) 0 ( p o s i t i o n - a t t i m e k v k a k ) ] p r o j e c t e d - v e l o c i t y [ ( v e l o c i t y - a t t i m e v i a i ) ( v e l o c i t y - a t t i m e v j a j ) ( v e l o c i t y - a t t i m e v k a k ) ] ] [ p r o j e c t e d - p o s i t i o n p r o j e c t e d - v e l o c i t y ] ) )
  9. Splatter - I

  10. Splatter - II ; ; B = V - (

    2 * ( V . N ) * N ) ( d e f n d o t - p r o d u c t [ v e c t o r 1 v e c t o r 2 ] ( r e d u c e + ( m a p * v e c t o r 1 v e c t o r 2 ) ) ) ( d e f n v e c t o r - s u b t r a c t i o n [ v e c t o r 1 v e c t o r 2 ] ( m a p - v e c t o r 1 v e c t o r 2 ) ) ( d e f n v e c t o r - m u l t i p l y - b y - c o n s t a n t [ v e c t o r c o n s t a n t ] ( m a p # ( * % c o n s t a n t ) v e c t o r ) ) ( d e f n b o u n c e - v e c t o r [ v e c t o r n o r m a l ] ( l e t [ v e c t o r - d o t - n o r m a l ( d o t - p r o d u c t v e c t o r n o r m a l ) e x t r e m e ( v e c t o r - m u l t i p l y - b y - c o n s t a n t n o r m a l ( * 2 v e c t o r - d o t - n o r m a l ) ) ] ( v e c t o r - s u b t r a c t i o n v e c t o r e x t r e m e ) ) )
  11. Paths - I

  12. Paths - II ( d e f n r a

    n d o m - p a t h [ p o s i t i o n s t e p - v e c t o r b o u n d s ] ( c o n s p o s i t i o n ( l a z y - s e q ( r a n d o m - p a t h ( v e c t o r - a d d ( v e c t o r - a d d p o s i t i o n s t e p - v e c t o r ) ( r a n d o m - v e c t o r - b e t w e e n ( - 0 b o u n d s ) b o u n d s ) ) s t e p - v e c t o r b o u n d s ) ) ) ) ( d e f n a n c h o r - p o i n t s [ p o s i t i o n m i n - d i s t a n c e m a x - d i s t a n c e m i n - s t e p s m a x - s t e p s v a r i a t i o n ] ( l e t [ d i r e c t i o n ( r a n d o m - u n i t - v e c t o r ) d i s t a n c e ( r a n d o m - b e t w e e n m i n - d i s t a n c e m a x - d i s t a n c e ) s t e p s ( r a n d o m - b e t w e e n m i n - s t e p s m a x - s t e p s ) s t e p - v e c t o r ( v e c t o r - m u l t i p l y - b y - c o n s t a n t d i r e c t i o n ( / d i s t a n c e s t e p s ) ) r a n d o m - p o s i t i o n s ( t a k e s t e p s ( r a n d o m - p a t h p o s i t i o n s t e p - v e c t o r v a r i a t i o n ) ) e n d - p o s i t i o n ( v e c t o r - a d d p o s i t i o n ( v e c t o r - m u l t i p l y - b y - c o n s t a n t s t e p - v e c t o r s t e p s ) ) ] ( c o n j ( v e c r a n d o m - p o s i t i o n s ) e n d - p o s i t i o n ) ) )
  13. Paths - III

  14. Paths - IV ( d e f n r e

    c u r - r e l a t i o n [ t a b ] ( + ( * t b ) ( * a ( - 1 t ) ) ) ) ( d e f n f o r - c o m p o n e n t [ t c o m p o n e n t - v a l s ] ( i f ( = ( c o u n t c o m p o n e n t - v a l s ) 1 ) ( f i r s t c o m p o n e n t - v a l s ) ( f o r - c o m p o n e n t t ( m a p # ( r e c u r - r e l a t i o n t % 1 % 2 ) c o m p o n e n t - v a l s ( r e s t c o m p o n e n t - v a l s ) ) ) ) ) ( d e f n f o r - t [ t c o m p o n e n t s ] ( m a p # ( f o r - c o m p o n e n t t % ) c o m p o n e n t s ) ) ( d e f n d e - c a s t e l j a u [ c o n t r o l - p o i n t s s t e p - a m o u n t ] ( l e t [ x - v a l s ( m a p f i r s t c o n t r o l - p o i n t s ) y - v a l s ( m a p s e c o n d c o n t r o l - p o i n t s ) z - v a l s ( m a p # ( n t h % 2 ) c o n t r o l - p o i n t s ) p o i n t s ( m a p # ( f o r - t % [ x - v a l s y - v a l s z - v a l s ] ) ( r a n g e 0 1 s t e p - a m o u n t ) ) ] p o i n t s ) )
  15. A sense of motion - I

  16. A sense of motion - II ( d e f

    n v e l o c i t y - b e t w e e n [ p o i n t 1 p o i n t 2 t o t a l - t i m e t o t a l - d i s t a n c e ] ( l e t [ d i f f e r e n c e - v e c t o r ( v e c t o r - s u b t r a c t i o n p o i n t 1 p o i n t 2 ) t i m e - b e t w e e n ( * t o t a l - t i m e ( / ( d i s t a n c e - b e t w e e n - p o i n t s p o i n t 1 p o i n t 2 ) t o t a l - d i s t a n c e ) ) ] ( v e c t o r - d i v i d e - b y - c o n s t d i f f e r e n c e - v e c t o r t i m e - b e t w e e n ) ) ) ( d e f n p a t h - v e l o c i t i e s [ p a t h t o t a l - t i m e ] ( l e t [ t o t a l - d i s t a n c e ( p a t h - l e n g t h p a t h ) n u m b e r - o f - p o i n t s ( c o u n t p a t h ) ] ( c o n j ( v e c ( m a p - 2 # ( v e l o c i t y - b e t w e e n % 1 % 2 t o t a l - t i m e t o t a l - d i s t a n c e ) p a t h ) ) [ 0 0 0 ] ) ) ) ( d e f n p a t h - m a s s e s [ p a t h i n i t i a l - m a s s ] ( l e t [ n u m b e r - o f - p o i n t s ( c o u n t p a t h ) s t e p ( - 0 ( / i n i t i a l - m a s s n u m b e r - o f - p o i n t s ) ) ] ( t a k e n u m b e r - o f - p o i n t s ( r a n g e i n i t i a l - m a s s 0 s t e p ) ) ) )
  17. Pull it all together Add a stroke Fill canvas