├── .clj-kondo
├── babashka
│ └── sci
│ │ ├── config.edn
│ │ └── sci
│ │ └── core.clj
├── clojure2d
│ └── clojure2d
│ │ ├── config.edn
│ │ └── hooks
│ │ └── core.clj
├── config.edn
├── generateme
│ └── fastmath
│ │ ├── config.edn
│ │ └── hooks
│ │ ├── core.clj
│ │ ├── kernel.clj
│ │ ├── matrix.clj
│ │ └── vector.clj
├── hooks
│ ├── rt4.clj
│ └── rt4.clj~
└── sicmutils
│ └── sicmutils
│ ├── config.edn
│ └── hooks
│ ├── pattern
│ └── rule.clj
│ └── sicmutils
│ ├── abstract
│ └── function.clj
│ ├── calculus
│ └── coordinate.clj
│ ├── env.clj
│ └── util
│ └── def.clj
├── .gitignore
├── LICENSE
├── README.md
├── deps.edn
├── lib
└── xgboost4j-0.81-criteo-20180821_2.11-win64.jar
├── project.clj
├── resources
└── pico8
│ ├── license.txt
│ ├── pico-8-mono-reversed.ttf
│ ├── pico-8.ttf
│ └── readme.txt
├── results
├── ex00
│ ├── helloworld.jpg
│ └── rotating.jpg
├── ex02
│ └── blob.jpg
├── ex03
│ └── lines.jpg
├── ex04
│ ├── 061F9A12_000000.jpg
│ ├── 061F9A12_000001.jpg
│ ├── 061F9A12_000002.jpg
│ ├── 061F9A12_000003.jpg
│ ├── 061F9A12_000004.jpg
│ ├── 061F9A12_000005.jpg
│ ├── 061F9A12_000006.jpg
│ ├── 061F9A12_000007.jpg
│ ├── 061F9A12_000008.jpg
│ ├── 061F9A12_000009.jpg
│ ├── 061F9A12_000010.jpg
│ ├── 061F9A12_000011.jpg
│ ├── 061F9A12_000012.jpg
│ ├── 061F9A12_000013.jpg
│ └── 061F9A12_000014.jpg
├── ex05
│ ├── 061F9A12_000015.jpg
│ ├── 061F9A12_000016.jpg
│ ├── 061F9A12_000017.jpg
│ ├── 061F9A12_000018.jpg
│ ├── 061F9A12_000019.jpg
│ └── 061F9A12_000020.jpg
├── ex06
│ ├── 1FABF63A_000007.jpg
│ ├── 1FABF63A_000008.jpg
│ ├── 1FABF63A_000009.jpg
│ ├── 1FABF63A_000010.jpg
│ └── 1FABF63A_000011.jpg
├── ex07
│ ├── 1FABF63A_000002.jpg
│ ├── 1FABF63A_000003.jpg
│ ├── 1FABF63A_000004.jpg
│ ├── 1FABF63A_000005.jpg
│ └── 1FABF63A_000006.jpg
├── ex08
│ ├── 1FABF63A_000012.jpg
│ ├── 1FABF63A_000013.jpg
│ ├── 1FABF63A_000014.jpg
│ ├── 1FABF63A_000015.jpg
│ ├── 1FABF63A_000016.jpg
│ └── 1FABF63A_000017.jpg
├── ex09
│ ├── 1FABF63A_000018.jpg
│ ├── 1FABF63A_000019.jpg
│ ├── 1FABF63A_000020.jpg
│ ├── 1FABF63A_000021.jpg
│ ├── 1FABF63A_000022.jpg
│ ├── 1FABF63A_000023.jpg
│ └── 1FABF63A_000024.jpg
├── ex10
│ ├── 1FABF63A_000025.jpg
│ ├── 1FABF63A_000026.jpg
│ ├── 1FABF63A_000027.jpg
│ ├── 1FABF63A_000028.jpg
│ ├── 1FABF63A_000029.jpg
│ └── 1FABF63A_000030.jpg
├── ex11
│ ├── 1FABF63A_000031.jpg
│ ├── 1FABF63A_000032.jpg
│ ├── 1FABF63A_000033.jpg
│ ├── 1FABF63A_000034.jpg
│ ├── 1FABF63A_000035.jpg
│ ├── 1FABF63A_000036.jpg
│ ├── 1FABF63A_000037.jpg
│ ├── 1FABF63A_000038.jpg
│ ├── 1FABF63A_000039.jpg
│ ├── 1FABF63A_000040.jpg
│ ├── 1FABF63A_000041.jpg
│ ├── 1FABF63A_000042.jpg
│ └── 1FABF63A_000043.jpg
├── ex12
│ ├── 1FABF63A_000044.jpg
│ ├── 1FABF63A_000045.jpg
│ ├── 1FABF63A_000046.jpg
│ ├── 1FABF63A_000047.jpg
│ ├── 1FABF63A_000048.jpg
│ └── 1FABF63A_000049.jpg
├── ex13
│ ├── 1FABF63A_000050.jpg
│ ├── 1FABF63A_000051.jpg
│ └── 1FABF63A_000052.jpg
├── ex14
│ └── metaballs.jpg
├── ex15
│ ├── 1FABF63A_000054.jpg
│ ├── 1FABF63A_000055.jpg
│ ├── 1FABF63A_000056.jpg
│ ├── 1FABF63A_000057.jpg
│ ├── 1FABF63A_000058.jpg
│ ├── 1FABF63A_000059.jpg
│ ├── 1FABF63A_000060.jpg
│ ├── 1FABF63A_000061.jpg
│ └── 1FABF63A_000062.jpg
├── ex16
│ ├── 1FABF63A_000063.jpg
│ ├── 1FABF63A_000064.jpg
│ ├── 1FABF63A_000065.jpg
│ ├── 1FABF63A_000066.jpg
│ ├── 1FABF63A_000067.jpg
│ ├── 1FABF63A_000068.jpg
│ ├── 1FABF63A_000069.jpg
│ ├── 1FABF63A_000070.jpg
│ ├── 1FABF63A_000071.jpg
│ ├── 1FABF63A_000072.jpg
│ └── 1FABF63A_000073.jpg
├── ex17
│ ├── 1FABF63A_000074.jpg
│ ├── 1FABF63A_000075.jpg
│ └── 1FABF63A_000076.jpg
├── ex18
│ ├── 1FABF63A_000077.jpg
│ ├── 1FABF63A_000078.jpg
│ ├── 1FABF63A_000079.jpg
│ ├── 1FABF63A_000080.jpg
│ ├── 1FABF63A_000081.jpg
│ └── 1FABF63A_000082.jpg
├── ex19
│ ├── 1FABF63A_000083.jpg
│ ├── 1FABF63A_000084.jpg
│ ├── 1FABF63A_000085.jpg
│ ├── 1FABF63A_000086.jpg
│ ├── 1FABF63A_000087.jpg
│ ├── 1FABF63A_000088.jpg
│ ├── 1FABF63A_000089.jpg
│ ├── 1FABF63A_000090.jpg
│ └── 1FABF63A_000091.jpg
├── ex20
│ ├── 1FABF63A_000092.jpg
│ ├── 1FABF63A_000093.jpg
│ ├── 1FABF63A_000094.jpg
│ ├── 1FABF63A_000095.jpg
│ ├── 1FABF63A_000096.jpg
│ ├── 1FABF63A_000097.jpg
│ ├── 1FABF63A_000098.jpg
│ ├── 1FABF63A_000099.jpg
│ ├── 1FABF63A_000100.jpg
│ └── 1FABF63A_000101.jpg
├── ex21
│ ├── 1FABF63A_000103.jpg
│ ├── 1FABF63A_000104.jpg
│ ├── 1FABF63A_000105.jpg
│ ├── 1FABF63A_000106.jpg
│ ├── 1FABF63A_000107.jpg
│ └── 1FABF63A_000108.jpg
├── ex22
│ └── scene.jpg
├── ex23
│ └── scene.jpg
├── ex24
│ └── stripes.jpg
├── ex25
│ └── gff.jpg
├── ex26
│ └── 20198879_000008.jpg
├── ex27
│ ├── 20198879_000044.jpg
│ └── 20198879_000045.jpg
├── ex28
│ ├── 20198879_000047.jpg
│ └── 20198879_000048.jpg
├── ex29
│ ├── 20198879_000049.jpg
│ ├── 20198879_000050.jpg
│ ├── 20198879_000051.jpg
│ └── 20198879_000052.jpg
├── ex30
│ └── result.jpg
├── ex31
│ └── wind.jpg
├── ex32
│ ├── 20198879_000054.png
│ ├── 20198879_000055.png
│ ├── 20198879_000056.png
│ └── 20198879_000057.png
├── ex33
│ └── interpolations.jpg
├── ex34
│ ├── 20198879_000058.jpg
│ ├── 20198879_000059.jpg
│ ├── 20198879_000060.jpg
│ ├── 20198879_000061.jpg
│ ├── 20198879_000062.jpg
│ ├── 20198879_000063.jpg
│ └── 20198879_000064.jpg
├── ex35
│ ├── julia20198879_000067.jpg
│ ├── julia20198879_000069.jpg
│ ├── mandelbrot20198879_000066.jpg
│ └── mandelbrot20198879_000068.jpg
├── ex36
│ ├── 20198879_000070.jpg
│ ├── 20198879_000071.jpg
│ └── 20198879_000072.jpg
├── ex37
│ ├── 20198879_000073.jpg
│ ├── 20198879_000074.jpg
│ ├── 20198879_000075.jpg
│ ├── 20198879_000076.jpg
│ └── 20198879_000077.jpg
├── ex38
│ └── 20198879_000078.jpg
├── ex39
│ └── 20198879_000079.jpg
├── ex40
│ └── 20198879_000080.jpg
├── ex41
│ ├── 20198879_000081.jpg
│ ├── 20198879_000082.jpg
│ └── 20198879_000083.jpg
├── ex42
│ ├── 21BD7FCE_000000.jpg
│ ├── 21BD7FCE_000001.jpg
│ ├── 21BD7FCE_000002.jpg
│ └── 21BD7FCE_000003.jpg
├── ex44
│ ├── 367371E3_000001.jpg
│ ├── 367371E3_000002.jpg
│ ├── 367371E3_000004.jpg
│ └── 367371E3_000005.jpg
├── ex45
│ ├── 367371E3_000006.jpg
│ ├── 367371E3_000007.jpg
│ ├── 367371E3_000008.jpg
│ ├── 367371E3_000009.jpg
│ ├── 367371E3_000010.jpg
│ ├── 367371E3_000011.jpg
│ └── 367371E3_000012.jpg
├── ex47
│ └── nebula.jpg
├── ex51
│ ├── C641483C_000001.jpg
│ ├── C641483C_000002.jpg
│ └── C641483C_000003.jpg
├── ex52
│ ├── 5D5B5495_000001.jpg
│ ├── 5D5B5495_000002.jpg
│ ├── 5D5B5495_000003.jpg
│ ├── 5D5B5495_000004.jpg
│ ├── 5D5B5495_000005.jpg
│ ├── 5D5B5495_000006.jpg
│ ├── 5D5B5495_000007.jpg
│ ├── 5D5B5495_000008.jpg
│ ├── 5D5B5495_000009.jpg
│ ├── 5D5B5495_000010.jpg
│ └── 5DB06F3A_000000.jpg
├── ex53
│ └── spores.jpg
├── ex54
│ └── result.jpg
├── ex55
│ ├── difference.jpg
│ └── screen.jpg
├── ex56
│ ├── splat1.jpg
│ ├── splat2.jpg
│ ├── splat3.jpg
│ ├── splat4.jpg
│ └── splat5.jpg
├── ex58
│ ├── img1.jpg
│ ├── img10.jpg
│ ├── img11.jpg
│ ├── img12.jpg
│ ├── img13.jpg
│ ├── img2.jpg
│ ├── img3.jpg
│ ├── img4.jpg
│ ├── img5.jpg
│ ├── img6.jpg
│ ├── img7.jpg
│ ├── img8.jpg
│ └── img9.jpg
├── ex59
│ ├── 48055BA9_000001.jpg
│ ├── 48055BA9_000002.jpg
│ ├── 48055BA9_000004.jpg
│ ├── 48055BA9_000005.jpg
│ ├── 48055BA9_000006.jpg
│ ├── 48055BA9_000007.jpg
│ ├── 48055BA9_000008.jpg
│ ├── 48055BA9_000009.jpg
│ ├── 48055BA9_000010.jpg
│ └── 48055BA9_000011.jpg
├── ex60
│ ├── 6763E9C6_000007.jpg
│ ├── 6763E9C6_000008.jpg
│ ├── 6763E9C6_000009.jpg
│ └── 6763E9C6_000010.jpg
├── ex61
│ ├── 90E437A3_000001.jpg
│ ├── 90E437A3_000002.jpg
│ ├── 90E437A3_000003.jpg
│ ├── 90E437A3_000004.jpg
│ ├── 90E437A3_000005.jpg
│ ├── 90E437A3_000006.jpg
│ ├── 90E437A3_000007.jpg
│ └── 90E437A3_000008.jpg
├── ex62
│ ├── 04C81A12_000000.jpg
│ ├── 04C81A12_000001.jpg
│ └── 04C81A12_000002.jpg
├── ex63
│ └── plife.jpg
├── ex64
│ └── lenia.jpg
├── ex65
│ └── rd.jpg
├── games
│ └── the_king
│ │ ├── DE5FE9FA_000000.jpg
│ │ ├── DE5FE9FA_000012.jpg
│ │ └── DE5FE9FA_000027.jpg
├── neuroevolution
│ └── success.png
├── rt-in-weekend
│ ├── antialiasing.jpg
│ ├── camera1.jpg
│ ├── camera2-fov20.jpg
│ ├── camera2.jpg
│ ├── colors.jpg
│ ├── defocus.jpg
│ ├── dielectrics.jpg
│ ├── diffuse.jpg
│ ├── metal.jpg
│ ├── metal_fuzz.jpg
│ ├── random_scene.jpg
│ ├── random_scene_r2.jpg
│ ├── scene.jpg
│ ├── sky.jpg
│ ├── sphere.jpg
│ └── sphere2.jpg
├── rt4
│ ├── in_one_weekend
│ │ ├── ch02.jpg
│ │ ├── ch04.jpg
│ │ ├── ch05.jpg
│ │ ├── ch06a.jpg
│ │ ├── ch06b.jpg
│ │ ├── ch07.jpg
│ │ ├── ch08a.jpg
│ │ ├── ch08b.jpg
│ │ ├── ch08c.jpg
│ │ ├── ch09a.jpg
│ │ ├── ch09b.jpg
│ │ ├── ch10a.jpg
│ │ ├── ch10b.jpg
│ │ ├── ch10c.jpg
│ │ ├── ch12a.jpg
│ │ ├── ch12b.jpg
│ │ ├── ch12b2.jpg
│ │ ├── ch13.jpg
│ │ ├── ch14.jpg
│ │ └── ch14mid.jpg
│ ├── the_next_week
│ │ ├── ch02.jpg
│ │ ├── ch03.jpg
│ │ ├── ch04a.jpg
│ │ ├── ch04b.jpg
│ │ ├── ch04c.jpg
│ │ ├── ch05a.jpg
│ │ ├── ch05b.jpg
│ │ ├── ch05c.jpg
│ │ ├── ch05d.jpg
│ │ ├── ch05e.jpg
│ │ ├── ch05f.jpg
│ │ ├── ch05g.jpg
│ │ ├── ch06.jpg
│ │ ├── ch07a.jpg
│ │ ├── ch07b.jpg
│ │ ├── ch07c.jpg
│ │ ├── ch08a.jpg
│ │ ├── ch08b.jpg
│ │ ├── ch09.jpg
│ │ ├── ch10low.jpg
│ │ └── ch10mid.jpg
│ └── the_rest_of_your_life
│ │ ├── ch02a.jpg
│ │ ├── ch02b.jpg
│ │ ├── ch06a.jpg
│ │ ├── ch06b.jpg
│ │ ├── ch06c.jpg
│ │ ├── ch06d.jpg
│ │ └── ch08.jpg
└── test.jpg
└── src
├── GG
├── M
│ ├── M_1_1_01.clj
│ ├── M_1_2_01.clj
│ ├── M_1_3_01.clj
│ ├── M_1_3_02.clj
│ ├── M_1_3_03.clj
│ ├── M_1_5_01.clj
│ ├── M_2_1_01.clj
│ ├── M_2_2_01.clj
│ ├── M_2_3_01.clj
│ ├── M_2_3_02.clj
│ ├── M_2_5_01.clj
│ ├── M_4_1_01.clj
│ ├── M_4_2_01.clj
│ ├── M_4_2_02.clj
│ ├── M_4_2_03.clj
│ ├── M_4_2_04.clj
│ ├── M_5_1_01.clj
│ ├── M_6_1_01.clj
│ ├── M_6_1_02.clj
│ └── M_6_1_03.clj
├── P
│ ├── P_1_0_01.clj
│ ├── P_1_1_1_01.clj
│ ├── P_1_1_2_01.clj
│ ├── P_1_2_1_01.clj
│ ├── P_1_2_2_01.clj
│ ├── P_1_2_3_01.clj
│ ├── P_1_2_3_02.clj
│ ├── P_1_2_3_03.clj
│ ├── P_1_2_3_04.clj
│ ├── P_2_0_01.clj
│ ├── P_2_0_02.clj
│ ├── P_2_0_03.clj
│ ├── P_2_1_1_01.clj
│ ├── P_2_1_1_02.clj
│ ├── P_2_1_1_03.clj
│ ├── P_2_1_2_01.clj
│ ├── P_2_1_2_02.clj
│ ├── P_2_1_2_03.clj
│ ├── P_2_1_2_04.clj
│ ├── P_2_1_3_01.clj
│ ├── P_2_1_3_02.clj
│ ├── P_2_1_3_03.clj
│ ├── P_2_1_3_04.clj
│ ├── P_2_1_3_05.clj
│ ├── P_2_2_1_01.clj
│ ├── P_2_2_1_02.clj
│ ├── P_2_2_2_01.clj
│ ├── P_2_2_2_02.clj
│ ├── P_2_2_3_01.clj
│ ├── P_2_2_3_02.clj
│ ├── P_2_2_4_01.clj
│ ├── P_2_2_4_02.clj
│ ├── P_2_2_5_01.clj
│ ├── P_2_2_5_02.clj
│ └── P_2_3_1_01.clj
├── README.md
└── data
│ ├── 01.svg
│ ├── 02.svg
│ ├── arrow.svg
│ ├── pic1.jpg
│ ├── pic2.jpg
│ └── pic3.jpg
├── NOC
├── README.md
├── ch01
│ ├── bouncingball_novectors_1_1.clj
│ ├── bouncingball_vectors_1_2.clj
│ ├── bouncingball_vectors_type_1_2.clj
│ ├── motion101_1_7.clj
│ ├── motion101_acceleration_1_10.clj
│ ├── motion101_acceleration_1_8.clj
│ ├── motion101_acceleration_1_9.clj
│ ├── motion101_acceleration_list_1_11.clj
│ ├── vector_magnitude_1_5.clj
│ ├── vector_multiplication_1_4.clj
│ ├── vector_normalize_1_6.clj
│ └── vector_subtraction_1_3.clj
├── ch02
│ ├── attraction_2_6.clj
│ ├── attraction_many_2_7.clj
│ ├── fluidresistance_2_5.clj
│ ├── forces_2_1.clj
│ ├── forces_friction_2_4.clj
│ ├── forces_many_2_2.clj
│ ├── forces_many_realgravity.clj
│ ├── forces_mutual_attraction_boundaries.clj
│ └── mutual_attraction_2_8.clj
├── ch03
│ ├── angular_motion_3_1.clj
│ ├── exercise_additive_wave_3_9.clj
│ ├── exercise_cannon_3_2.clj
│ ├── forces_angular_motion_3_2.clj
│ ├── oscillating_objects_3_7.clj
│ ├── pointing_velocity_3_3.clj
│ ├── polartocartesian_3_4.clj
│ ├── polartocartesian_trail_3_4.clj
│ ├── simple_harmonic_motion_3_5.clj
│ ├── simple_harmonic_motion_3_6.clj
│ ├── static_wave_lines_3_8.clj
│ ├── wave_3_9.clj
│ └── wave_abc_3_9.clj
├── ch04
│ ├── particlesystemsmoke_4_8.clj
│ └── texture.png
├── ch06
│ ├── arrive_6_2.clj
│ ├── flocking_6_9.clj
│ ├── flowfield_6_4.clj
│ ├── pathfollowing_6_6.clj
│ ├── pathfollowingsimple_6_5.clj
│ ├── seek_6_1.clj
│ ├── seek_trail_6_1.clj
│ ├── separation_6_7.clj
│ ├── separationandseek_6_8.clj
│ ├── simplescalarprojection.clj
│ ├── staywithincircle.clj
│ ├── staywithinwalls_6_3.clj
│ └── staywithinwalls_trail_6_3.clj
├── ch07
│ ├── gameoflifesimple_7_2.clj
│ ├── gameoflifewraparound.clj
│ └── wolframca_figures_7_1.clj
├── ch08
│ ├── cantorset_8_4.clj
│ ├── koch_8_5.clj
│ ├── kochsimple_8_5.clj
│ ├── lsystem_8_9.clj
│ ├── mandelbrot_8_2.clj
│ ├── recursion_8_1.clj
│ ├── recursion_8_2.clj
│ ├── recursion_8_3.clj
│ ├── simple_lsystem_8_6.clj
│ ├── tree_8_4.clj
│ ├── tree_8_6.clj
│ ├── treestatic_8_6.clj
│ ├── treestochastic_8_7.clj
│ ├── treestochastic_angleonly_8_7.clj
│ └── treestochasticnoise_8_10.clj
└── introduction
│ ├── acceptreject_I_5.clj
│ ├── figure_I_2_bellcurve.clj
│ ├── figure_I_5_noise1dgraph.clj
│ ├── figure_I_6_randomgraph.clj
│ ├── gaussian2.clj
│ ├── gaussian_I_4.clj
│ ├── multipleprobability.clj
│ ├── noise1d.clj
│ ├── noise2d.clj
│ ├── noisedistribution.clj
│ ├── noisewalk_I_6.clj
│ ├── noisewalk_acceleration.clj
│ ├── noisewalk_many.clj
│ ├── noisewalk_velocity.clj
│ ├── randomdistribution_I_2.clj
│ ├── randomwalk.clj
│ ├── randomwalklevy.clj
│ ├── randomwalknoise.clj
│ ├── randomwalkpvector.clj
│ ├── randomwalktendstoright_I_3.clj
│ ├── randomwalktraditional2.clj
│ ├── randomwalktraditional3.clj
│ ├── randomwalktraditional_I_1.clj
│ ├── randomwalktrail.clj
│ └── simpleprobability.clj
├── ex00_helloworld.clj
├── ex01_events.clj
├── ex02_draw.clj
├── ex03_generative.clj
├── ex04_noise.clj
├── ex05_particles.clj
├── ex06_caustic.clj
├── ex07_glass.clj
├── ex08_folds.clj
├── ex09_curvature.clj
├── ex10_curvature2.clj
├── ex11_pixels.clj
├── ex12_overlays.clj
├── ex13_segmentation.clj
├── ex14_metaballs.clj
├── ex15_colorspace.clj
├── ex16_signal.clj
├── ex17_grids.clj
├── ex18_waves.clj
├── ex19_glitch.clj
├── ex20_colors.clj
├── ex21_popcorn.clj
├── ex22_raymarching.clj
├── ex23_raymarching2.clj
├── ex24_stripes.clj
├── ex25_gff.clj
├── ex26
├── 00.jpg
├── 01.jpg
├── 02.jpg
├── 03.jpg
├── 04.jpg
├── 05.jpg
├── 06.jpg
├── 07.jpg
├── 08.jpg
├── 09.jpg
├── 10.jpg
├── 11.jpg
├── 12.jpg
├── 13.jpg
├── 14.jpg
├── 15.jpg
├── 16.jpg
├── 17.jpg
├── 18.jpg
├── 19.jpg
├── 20.jpg
├── 21.jpg
├── 22.jpg
├── 23.jpg
├── 24.jpg
├── 25.jpg
├── 26.jpg
├── 27.jpg
├── 28.jpg
├── 29.jpg
├── 30.jpg
├── 31.jpg
├── 32.jpg
├── 33.jpg
├── 34.jpg
├── 35.jpg
├── 36.jpg
├── 37.jpg
├── 38.jpg
├── 39.jpg
├── 40.jpg
├── 41.jpg
├── 42.jpg
└── 43.jpg
├── ex26_freeart_source.clj
├── ex27_palettes.clj
├── ex28_double_pendulum.clj
├── ex29_explore_map.clj
├── ex30_generators.clj
├── ex31_wind.clj
├── ex32_harmonograph.clj
├── ex33_interpolations.clj
├── ex34_ducks_kalisets.clj
├── ex35_mandelbrot_julia.clj
├── ex36_spirograph.clj
├── ex37_fractal_bestiary.clj
├── ex38_old_school_xor.clj
├── ex39_old_school_tunnel.clj
├── ex40_old_school_fire.clj
├── ex41_path_fold.clj
├── ex42_string.clj
├── ex43_noise_figures.clj
├── ex44_diatoms.clj
├── ex45_scalar_fields.clj
├── ex46_random_distributions.clj
├── ex47_nebula.clj
├── ex48_filters.clj
├── ex49_archimedean_spiral.clj
├── ex50_grids.clj
├── ex51_grid_image.clj
├── ex53_ppl.clj
├── ex54_random_walk.clj
├── ex55_composing.clj
├── ex56_splats.clj
├── ex57_flocking.clj
├── ex58_circle_inversion.clj
├── ex59_plasmas.clj
├── ex60_metal_sheets.clj
├── ex61_horizontals.clj
├── ex62_eigenvalues.clj
├── ex63_particle_life.clj
├── ex64_particle_lenia.clj
├── ex65_reaction_diffusion.clj
├── ex66_spinning_flower_mandala.clj
├── ex67_elementary_cellular_automaton.clj
├── ex68_langton_ant.clj
├── ex69_turmites.clj
├── ex70_bitfields.clj
├── ex71_ince_beams.clj
├── ex72_physarium.clj
├── funprogramming.clj
├── games
└── the_king
│ ├── README.md
│ ├── gfx.clj
│ ├── map.clj
│ ├── physics.clj
│ └── the_king.clj
├── neuroevolution
├── README.md
├── car.clj
├── chromosome.clj
├── core.clj
├── draw.clj
├── environment.clj
├── nn.clj
└── simulate.clj
├── quil
├── README.md
├── game_of_life.clj
├── geometric_twinkle.clj
├── golden_ratio_flower.clj
└── waves.clj
├── rt4
├── README.md
├── color.clj
├── common.clj
├── copy.sh
├── in_one_weekend
│ ├── ch02
│ │ └── main.clj
│ ├── ch04
│ │ ├── main.clj
│ │ └── ray.clj
│ ├── ch05
│ │ ├── main.clj
│ │ └── ray.clj
│ ├── ch06a
│ │ ├── main.clj
│ │ └── ray.clj
│ ├── ch06b
│ │ ├── hittable.clj
│ │ ├── main.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch07
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch08a
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch08b
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch08c
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch09a
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch09b
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch10a
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch10b
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch10c
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ └── sphere.clj
│ ├── ch11
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ └── sphere.clj
│ ├── ch12a
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ └── sphere.clj
│ ├── ch12b
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ └── sphere.clj
│ ├── ch13
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ └── sphere.clj
│ └── ch14
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ └── sphere.clj
├── the_next_week
│ ├── ch02
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ └── sphere.clj
│ ├── ch03
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ └── sphere.clj
│ ├── ch04a
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch04b
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch04c
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch05a
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch05b
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch05c
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch05d
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch05e
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch05f
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch05g
│ │ ├── .#aabb.clj
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch06
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── quad.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch07a
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── quad.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch07b
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── quad.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch07c
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── quad.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch08a
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── quad.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch08b
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── quad.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ ├── ch09
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── constant_medium.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── quad.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
│ └── ch10
│ │ ├── aabb.clj
│ │ ├── bvh.clj
│ │ ├── camera.clj
│ │ ├── constant_medium.clj
│ │ ├── hittable.clj
│ │ ├── hittable_list.clj
│ │ ├── interval.clj
│ │ ├── main.clj
│ │ ├── material.clj
│ │ ├── moving_sphere.clj
│ │ ├── perlin.clj
│ │ ├── quad.clj
│ │ ├── ray.clj
│ │ ├── scene.clj
│ │ ├── sphere.clj
│ │ └── texture.clj
└── the_rest_of_your_life
│ ├── ch02
│ └── pi.clj
│ ├── ch02a
│ ├── aabb.clj
│ ├── bvh.clj
│ ├── camera.clj
│ ├── constant_medium.clj
│ ├── hittable.clj
│ ├── hittable_list.clj
│ ├── interval.clj
│ ├── main.clj
│ ├── material.clj
│ ├── moving_sphere.clj
│ ├── perlin.clj
│ ├── quad.clj
│ ├── ray.clj
│ ├── scene.clj
│ ├── sphere.clj
│ └── texture.clj
│ ├── ch02b
│ ├── aabb.clj
│ ├── bvh.clj
│ ├── camera.clj
│ ├── constant_medium.clj
│ ├── hittable.clj
│ ├── hittable_list.clj
│ ├── interval.clj
│ ├── main.clj
│ ├── material.clj
│ ├── moving_sphere.clj
│ ├── perlin.clj
│ ├── quad.clj
│ ├── ray.clj
│ ├── scene.clj
│ ├── sphere.clj
│ └── texture.clj
│ ├── ch03
│ └── integrate.clj
│ ├── ch04
│ └── sphere_importance.clj
│ ├── ch06a
│ ├── aabb.clj
│ ├── bvh.clj
│ ├── camera.clj
│ ├── constant_medium.clj
│ ├── hittable.clj
│ ├── hittable_list.clj
│ ├── interval.clj
│ ├── main.clj
│ ├── material.clj
│ ├── moving_sphere.clj
│ ├── perlin.clj
│ ├── quad.clj
│ ├── ray.clj
│ ├── scene.clj
│ ├── sphere.clj
│ └── texture.clj
│ ├── ch06b
│ ├── aabb.clj
│ ├── bvh.clj
│ ├── camera.clj
│ ├── constant_medium.clj
│ ├── hittable.clj
│ ├── hittable_list.clj
│ ├── interval.clj
│ ├── main.clj
│ ├── material.clj
│ ├── moving_sphere.clj
│ ├── perlin.clj
│ ├── quad.clj
│ ├── ray.clj
│ ├── scene.clj
│ ├── sphere.clj
│ └── texture.clj
│ ├── ch06c
│ ├── aabb.clj
│ ├── bvh.clj
│ ├── camera.clj
│ ├── constant_medium.clj
│ ├── hittable.clj
│ ├── hittable_list.clj
│ ├── interval.clj
│ ├── main.clj
│ ├── material.clj
│ ├── moving_sphere.clj
│ ├── perlin.clj
│ ├── quad.clj
│ ├── ray.clj
│ ├── scene.clj
│ ├── sphere.clj
│ └── texture.clj
│ ├── ch06d
│ ├── aabb.clj
│ ├── bvh.clj
│ ├── camera.clj
│ ├── constant_medium.clj
│ ├── hittable.clj
│ ├── hittable_list.clj
│ ├── interval.clj
│ ├── main.clj
│ ├── material.clj
│ ├── moving_sphere.clj
│ ├── perlin.clj
│ ├── quad.clj
│ ├── ray.clj
│ ├── scene.clj
│ ├── sphere.clj
│ └── texture.clj
│ └── ch08
│ ├── aabb.clj
│ ├── bvh.clj
│ ├── camera.clj
│ ├── constant_medium.clj
│ ├── hittable.clj
│ ├── hittable_list.clj
│ ├── interval.clj
│ ├── main.clj
│ ├── material.clj
│ ├── moving_sphere.clj
│ ├── onb.clj
│ ├── perlin.clj
│ ├── quad.clj
│ ├── ray.clj
│ ├── scene.clj
│ ├── sphere.clj
│ └── texture.clj
└── rt_in_weekend
├── README.md
├── camera.clj
├── ch10_camera1.clj
├── ch10_camera2.clj
├── ch11_defocus.clj
├── ch12_random_scene.clj
├── ch1_image.clj
├── ch3_sky.clj
├── ch4_sphere.clj
├── ch5_final_scene.clj
├── ch5_sphere.clj
├── ch6_antialiasing.clj
├── ch7_diffuse.clj
├── ch8_metal.clj
├── ch8_metal_fuzz.clj
├── ch9_dielectrics.clj
├── hitable.clj
├── material.clj
├── ray.clj
└── sphere.clj
/.clj-kondo/babashka/sci/config.edn:
--------------------------------------------------------------------------------
1 | {:hooks {:macroexpand {sci.core/copy-ns sci.core/copy-ns}}}
2 |
--------------------------------------------------------------------------------
/.clj-kondo/babashka/sci/sci/core.clj:
--------------------------------------------------------------------------------
1 | (ns sci.core)
2 |
3 | (defmacro copy-ns
4 | ([ns-sym sci-ns]
5 | `(copy-ns ~ns-sym ~sci-ns nil))
6 | ([ns-sym sci-ns opts]
7 | `[(quote ~ns-sym)
8 | ~sci-ns
9 | (quote ~opts)]))
10 |
--------------------------------------------------------------------------------
/.clj-kondo/clojure2d/clojure2d/config.edn:
--------------------------------------------------------------------------------
1 | {:lint-as {clojure2d.core/with-canvas clojure.core/let
2 | clojure2d.core/with-canvas-> clojure.core/->}
3 | :linters {:unused-private-var {:exclude [clojure2d.color/matrix-inverse
4 | clojure2d.color/test-colors]}}
5 | :hooks {:macroexpand {clojure2d.core/with-oriented-canvas hooks.core/with-oriented-canvas
6 | clojure2d.core/with-oriented-canvas-> hooks.core/with-oriented-canvas->
7 | clojure2d.core/make-set-color-fn hooks.core/make-set-color-fn}}}
8 |
--------------------------------------------------------------------------------
/.clj-kondo/clojure2d/clojure2d/hooks/core.clj:
--------------------------------------------------------------------------------
1 | (ns hooks.core)
2 |
3 | (defmacro with-oriented-canvas
4 | [_orientation [c canv] & body]
5 | `(clojure.core/let [~c ~canv] ~@body))
6 |
7 | (defmacro with-oriented-canvas->
8 | [_orientation canv & body]
9 | `(clojure.core/-> ~canv ~@body))
10 |
11 | (defmacro make-set-color-fn
12 | [_doc n f]
13 | `(clojure.core/def ~n ~f))
14 |
--------------------------------------------------------------------------------
/.clj-kondo/config.edn:
--------------------------------------------------------------------------------
1 | {:hooks {:macroexpand {rt4.common/pdotimes hooks.rt4/pdotimes}}}
2 |
--------------------------------------------------------------------------------
/.clj-kondo/generateme/fastmath/hooks/core.clj:
--------------------------------------------------------------------------------
1 | (ns hooks.core)
2 |
3 | ;; fastmath.core helpers
4 | (defmacro proxy->declare [s & _] `(declare ~s))
5 | (defmacro variadic-proxy->declare [_ n & _] `(declare ~n))
6 |
--------------------------------------------------------------------------------
/.clj-kondo/generateme/fastmath/hooks/kernel.clj:
--------------------------------------------------------------------------------
1 | (ns hooks.kernel)
2 |
3 | (defmacro emit-simple
4 | [name form]
5 | `(let [~'xs 0] [~name ~form]))
6 |
7 | (defmacro emit-beta
8 | [name form]
9 | `(let [~'xs 0 ~'beta 0] [~name ~form]))
10 |
--------------------------------------------------------------------------------
/.clj-kondo/generateme/fastmath/hooks/matrix.clj:
--------------------------------------------------------------------------------
1 | (ns hooks.matrix)
2 |
3 | (defmacro gen-mulm [_ _ _ _] `~'m2)
4 |
--------------------------------------------------------------------------------
/.clj-kondo/generateme/fastmath/hooks/vector.clj:
--------------------------------------------------------------------------------
1 | (ns hooks.vector)
2 |
3 | (defmacro primitive-ops
4 | [ops]
5 | `(declare ~@(for [o ops]
6 | `~(symbol (name o)))))
7 |
--------------------------------------------------------------------------------
/.clj-kondo/hooks/rt4.clj:
--------------------------------------------------------------------------------
1 | (ns hooks.rt4)
2 |
3 | (defmacro pdotimes
4 | [[l s _] & r]
5 | `(let [~l ~s] ~@r))
6 |
--------------------------------------------------------------------------------
/.clj-kondo/hooks/rt4.clj~:
--------------------------------------------------------------------------------
1 | (ns hooks.rt4)
2 |
3 |
--------------------------------------------------------------------------------
/.clj-kondo/sicmutils/sicmutils/hooks/sicmutils/env.clj:
--------------------------------------------------------------------------------
1 | (ns hooks.sicmutils.env
2 | (:require [clj-kondo.hooks-api :as api]
3 | [hooks.sicmutils.calculus.coordinate :as coord]))
4 |
5 | (defn bootstrap-repl!
6 | "Generates a form that looks like
7 |
8 | ```clj
9 | (do (declare 'x) (declare 'y) ,,,)
10 | ```
11 |
12 | For all vars exported by the `sicmutils.env` namespace."
13 | [{:keys [_node]}]
14 | (let [analysis (api/ns-analysis 'sicmutils.env)
15 | entries (into (:clj analysis) (:cljs analysis))
16 | xform (comp (filter
17 | (comp #{'sicmutils.env} :ns val))
18 | (map (comp coord/->declare api/token-node key)))
19 | declares (into [] xform entries)
20 | new-node (api/list-node
21 | (list*
22 | (api/token-node 'do)
23 | declares))]
24 | {:node new-node}))
25 |
--------------------------------------------------------------------------------
/.clj-kondo/sicmutils/sicmutils/hooks/sicmutils/util/def.clj:
--------------------------------------------------------------------------------
1 | (ns hooks.sicmutils.util.def
2 | (:require [clj-kondo.hooks-api :as api]))
3 |
4 | (defn import-def
5 | "Converts a node representing an invocation of
6 | the [[sicmutils.util.def/import-def]] macro into a matching `def` call."
7 | [{:keys [node]}]
8 | (let [[_ v sym] (:children node)
9 | sym (or sym (api/token-node
10 | (symbol (name (:value v)))))
11 | new-node (api/list-node
12 | [(api/token-node 'def)
13 | sym v])]
14 | {:node new-node}))
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | pom.xml
2 | pom.xml.asc
3 | *.class
4 | /classes/
5 | /target/
6 | /checkouts/
7 | .lein-deps-sum
8 | .lein-repl-history
9 | .lein-plugins/
10 | .lein-failures
11 | .nrepl-port
12 | .lsp
13 | .clj-kondo/.cache
--------------------------------------------------------------------------------
/deps.edn:
--------------------------------------------------------------------------------
1 | {:paths ["src" "resources"]
2 | :deps {org.clojure/clojure {:mvn/version "1.12.0"}
3 | sicmutils/sicmutils {:mvn/version "0.22.0"}
4 | clojure2d/clojure2d {:mvn/version "1.5.0-SNAPSHOT"}}}
5 |
--------------------------------------------------------------------------------
/lib/xgboost4j-0.81-criteo-20180821_2.11-win64.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/lib/xgboost4j-0.81-criteo-20180821_2.11-win64.jar
--------------------------------------------------------------------------------
/project.clj:
--------------------------------------------------------------------------------
1 | (defproject clojure2d-examples "1.5.0-SNAPSHOT"
2 | :description "Examples for Clojure2d library"
3 | :url "https://github.com/Clojure2D/clojure2d-examples"
4 | :license {:name "The Unlicense"
5 | :url "http://unlicense.org"}
6 | :plugins [[lein-tools-deps "0.4.5"]]
7 | :middleware [lein-tools-deps.plugin/resolve-dependencies-with-deps-edn]
8 | :lein-tools-deps/config {:config-files [:install :user :project]}
9 | :repl-options {:timeout 120000}
10 | :target-path "target/%s"
11 | :profiles {:eastwood {:plugins [[jonase/eastwood "1.4.0"]]
12 | :eastwood {:add-linters [:performance :boxed-math]}}})
13 |
--------------------------------------------------------------------------------
/resources/pico8/license.txt:
--------------------------------------------------------------------------------
1 | The FontStruction “PICO-8 mono reversed”
2 | (https://fontstruct.com/fontstructions/show/1340339) by “RhythmLynx” is
3 | licensed under a Creative Commons CC0 Public Domain Dedication license
4 | (http://creativecommons.org/publicdomain/zero/1.0/).
5 | “PICO-8 mono reversed” was originally cloned (copied) from the FontStruction
6 | “PICO-8” (https://fontstruct.com/fontstructions/show/1254853) by
7 | “RhythmLynx”, which is licensed under a Creative Commons CC0 Public Domain
8 | Dedication license (http://creativecommons.org/publicdomain/zero/1.0/).
--------------------------------------------------------------------------------
/resources/pico8/pico-8-mono-reversed.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/resources/pico8/pico-8-mono-reversed.ttf
--------------------------------------------------------------------------------
/resources/pico8/pico-8.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/resources/pico8/pico-8.ttf
--------------------------------------------------------------------------------
/results/ex00/helloworld.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex00/helloworld.jpg
--------------------------------------------------------------------------------
/results/ex00/rotating.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex00/rotating.jpg
--------------------------------------------------------------------------------
/results/ex02/blob.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex02/blob.jpg
--------------------------------------------------------------------------------
/results/ex03/lines.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex03/lines.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000000.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000001.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000002.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000003.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000004.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000004.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000005.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000006.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000006.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000007.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000008.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000009.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000010.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000011.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000012.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000012.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000013.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000013.jpg
--------------------------------------------------------------------------------
/results/ex04/061F9A12_000014.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex04/061F9A12_000014.jpg
--------------------------------------------------------------------------------
/results/ex05/061F9A12_000015.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex05/061F9A12_000015.jpg
--------------------------------------------------------------------------------
/results/ex05/061F9A12_000016.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex05/061F9A12_000016.jpg
--------------------------------------------------------------------------------
/results/ex05/061F9A12_000017.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex05/061F9A12_000017.jpg
--------------------------------------------------------------------------------
/results/ex05/061F9A12_000018.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex05/061F9A12_000018.jpg
--------------------------------------------------------------------------------
/results/ex05/061F9A12_000019.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex05/061F9A12_000019.jpg
--------------------------------------------------------------------------------
/results/ex05/061F9A12_000020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex05/061F9A12_000020.jpg
--------------------------------------------------------------------------------
/results/ex06/1FABF63A_000007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex06/1FABF63A_000007.jpg
--------------------------------------------------------------------------------
/results/ex06/1FABF63A_000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex06/1FABF63A_000008.jpg
--------------------------------------------------------------------------------
/results/ex06/1FABF63A_000009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex06/1FABF63A_000009.jpg
--------------------------------------------------------------------------------
/results/ex06/1FABF63A_000010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex06/1FABF63A_000010.jpg
--------------------------------------------------------------------------------
/results/ex06/1FABF63A_000011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex06/1FABF63A_000011.jpg
--------------------------------------------------------------------------------
/results/ex07/1FABF63A_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex07/1FABF63A_000002.jpg
--------------------------------------------------------------------------------
/results/ex07/1FABF63A_000003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex07/1FABF63A_000003.jpg
--------------------------------------------------------------------------------
/results/ex07/1FABF63A_000004.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex07/1FABF63A_000004.jpg
--------------------------------------------------------------------------------
/results/ex07/1FABF63A_000005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex07/1FABF63A_000005.jpg
--------------------------------------------------------------------------------
/results/ex07/1FABF63A_000006.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex07/1FABF63A_000006.jpg
--------------------------------------------------------------------------------
/results/ex08/1FABF63A_000012.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex08/1FABF63A_000012.jpg
--------------------------------------------------------------------------------
/results/ex08/1FABF63A_000013.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex08/1FABF63A_000013.jpg
--------------------------------------------------------------------------------
/results/ex08/1FABF63A_000014.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex08/1FABF63A_000014.jpg
--------------------------------------------------------------------------------
/results/ex08/1FABF63A_000015.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex08/1FABF63A_000015.jpg
--------------------------------------------------------------------------------
/results/ex08/1FABF63A_000016.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex08/1FABF63A_000016.jpg
--------------------------------------------------------------------------------
/results/ex08/1FABF63A_000017.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex08/1FABF63A_000017.jpg
--------------------------------------------------------------------------------
/results/ex09/1FABF63A_000018.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex09/1FABF63A_000018.jpg
--------------------------------------------------------------------------------
/results/ex09/1FABF63A_000019.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex09/1FABF63A_000019.jpg
--------------------------------------------------------------------------------
/results/ex09/1FABF63A_000020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex09/1FABF63A_000020.jpg
--------------------------------------------------------------------------------
/results/ex09/1FABF63A_000021.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex09/1FABF63A_000021.jpg
--------------------------------------------------------------------------------
/results/ex09/1FABF63A_000022.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex09/1FABF63A_000022.jpg
--------------------------------------------------------------------------------
/results/ex09/1FABF63A_000023.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex09/1FABF63A_000023.jpg
--------------------------------------------------------------------------------
/results/ex09/1FABF63A_000024.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex09/1FABF63A_000024.jpg
--------------------------------------------------------------------------------
/results/ex10/1FABF63A_000025.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex10/1FABF63A_000025.jpg
--------------------------------------------------------------------------------
/results/ex10/1FABF63A_000026.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex10/1FABF63A_000026.jpg
--------------------------------------------------------------------------------
/results/ex10/1FABF63A_000027.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex10/1FABF63A_000027.jpg
--------------------------------------------------------------------------------
/results/ex10/1FABF63A_000028.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex10/1FABF63A_000028.jpg
--------------------------------------------------------------------------------
/results/ex10/1FABF63A_000029.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex10/1FABF63A_000029.jpg
--------------------------------------------------------------------------------
/results/ex10/1FABF63A_000030.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex10/1FABF63A_000030.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000031.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000031.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000032.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000032.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000033.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000033.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000034.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000034.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000035.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000035.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000036.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000036.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000037.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000037.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000038.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000038.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000039.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000039.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000040.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000040.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000041.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000041.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000042.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000042.jpg
--------------------------------------------------------------------------------
/results/ex11/1FABF63A_000043.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex11/1FABF63A_000043.jpg
--------------------------------------------------------------------------------
/results/ex12/1FABF63A_000044.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex12/1FABF63A_000044.jpg
--------------------------------------------------------------------------------
/results/ex12/1FABF63A_000045.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex12/1FABF63A_000045.jpg
--------------------------------------------------------------------------------
/results/ex12/1FABF63A_000046.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex12/1FABF63A_000046.jpg
--------------------------------------------------------------------------------
/results/ex12/1FABF63A_000047.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex12/1FABF63A_000047.jpg
--------------------------------------------------------------------------------
/results/ex12/1FABF63A_000048.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex12/1FABF63A_000048.jpg
--------------------------------------------------------------------------------
/results/ex12/1FABF63A_000049.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex12/1FABF63A_000049.jpg
--------------------------------------------------------------------------------
/results/ex13/1FABF63A_000050.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex13/1FABF63A_000050.jpg
--------------------------------------------------------------------------------
/results/ex13/1FABF63A_000051.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex13/1FABF63A_000051.jpg
--------------------------------------------------------------------------------
/results/ex13/1FABF63A_000052.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex13/1FABF63A_000052.jpg
--------------------------------------------------------------------------------
/results/ex14/metaballs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex14/metaballs.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000054.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000054.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000055.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000055.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000056.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000056.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000057.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000057.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000058.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000058.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000059.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000059.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000060.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000060.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000061.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000061.jpg
--------------------------------------------------------------------------------
/results/ex15/1FABF63A_000062.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex15/1FABF63A_000062.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000063.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000063.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000064.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000064.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000065.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000065.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000066.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000066.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000067.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000067.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000068.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000068.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000069.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000069.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000070.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000070.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000071.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000071.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000072.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000072.jpg
--------------------------------------------------------------------------------
/results/ex16/1FABF63A_000073.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex16/1FABF63A_000073.jpg
--------------------------------------------------------------------------------
/results/ex17/1FABF63A_000074.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex17/1FABF63A_000074.jpg
--------------------------------------------------------------------------------
/results/ex17/1FABF63A_000075.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex17/1FABF63A_000075.jpg
--------------------------------------------------------------------------------
/results/ex17/1FABF63A_000076.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex17/1FABF63A_000076.jpg
--------------------------------------------------------------------------------
/results/ex18/1FABF63A_000077.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex18/1FABF63A_000077.jpg
--------------------------------------------------------------------------------
/results/ex18/1FABF63A_000078.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex18/1FABF63A_000078.jpg
--------------------------------------------------------------------------------
/results/ex18/1FABF63A_000079.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex18/1FABF63A_000079.jpg
--------------------------------------------------------------------------------
/results/ex18/1FABF63A_000080.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex18/1FABF63A_000080.jpg
--------------------------------------------------------------------------------
/results/ex18/1FABF63A_000081.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex18/1FABF63A_000081.jpg
--------------------------------------------------------------------------------
/results/ex18/1FABF63A_000082.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex18/1FABF63A_000082.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000083.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000083.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000084.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000084.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000085.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000085.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000086.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000086.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000087.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000087.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000088.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000088.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000089.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000089.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000090.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000090.jpg
--------------------------------------------------------------------------------
/results/ex19/1FABF63A_000091.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex19/1FABF63A_000091.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000092.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000092.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000093.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000093.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000094.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000094.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000095.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000095.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000096.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000096.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000097.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000097.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000098.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000098.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000099.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000099.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000100.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000100.jpg
--------------------------------------------------------------------------------
/results/ex20/1FABF63A_000101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex20/1FABF63A_000101.jpg
--------------------------------------------------------------------------------
/results/ex21/1FABF63A_000103.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex21/1FABF63A_000103.jpg
--------------------------------------------------------------------------------
/results/ex21/1FABF63A_000104.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex21/1FABF63A_000104.jpg
--------------------------------------------------------------------------------
/results/ex21/1FABF63A_000105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex21/1FABF63A_000105.jpg
--------------------------------------------------------------------------------
/results/ex21/1FABF63A_000106.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex21/1FABF63A_000106.jpg
--------------------------------------------------------------------------------
/results/ex21/1FABF63A_000107.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex21/1FABF63A_000107.jpg
--------------------------------------------------------------------------------
/results/ex21/1FABF63A_000108.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex21/1FABF63A_000108.jpg
--------------------------------------------------------------------------------
/results/ex22/scene.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex22/scene.jpg
--------------------------------------------------------------------------------
/results/ex23/scene.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex23/scene.jpg
--------------------------------------------------------------------------------
/results/ex24/stripes.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex24/stripes.jpg
--------------------------------------------------------------------------------
/results/ex25/gff.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex25/gff.jpg
--------------------------------------------------------------------------------
/results/ex26/20198879_000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex26/20198879_000008.jpg
--------------------------------------------------------------------------------
/results/ex27/20198879_000044.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex27/20198879_000044.jpg
--------------------------------------------------------------------------------
/results/ex27/20198879_000045.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex27/20198879_000045.jpg
--------------------------------------------------------------------------------
/results/ex28/20198879_000047.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex28/20198879_000047.jpg
--------------------------------------------------------------------------------
/results/ex28/20198879_000048.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex28/20198879_000048.jpg
--------------------------------------------------------------------------------
/results/ex29/20198879_000049.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex29/20198879_000049.jpg
--------------------------------------------------------------------------------
/results/ex29/20198879_000050.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex29/20198879_000050.jpg
--------------------------------------------------------------------------------
/results/ex29/20198879_000051.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex29/20198879_000051.jpg
--------------------------------------------------------------------------------
/results/ex29/20198879_000052.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex29/20198879_000052.jpg
--------------------------------------------------------------------------------
/results/ex30/result.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex30/result.jpg
--------------------------------------------------------------------------------
/results/ex31/wind.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex31/wind.jpg
--------------------------------------------------------------------------------
/results/ex32/20198879_000054.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex32/20198879_000054.png
--------------------------------------------------------------------------------
/results/ex32/20198879_000055.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex32/20198879_000055.png
--------------------------------------------------------------------------------
/results/ex32/20198879_000056.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex32/20198879_000056.png
--------------------------------------------------------------------------------
/results/ex32/20198879_000057.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex32/20198879_000057.png
--------------------------------------------------------------------------------
/results/ex33/interpolations.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex33/interpolations.jpg
--------------------------------------------------------------------------------
/results/ex34/20198879_000058.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex34/20198879_000058.jpg
--------------------------------------------------------------------------------
/results/ex34/20198879_000059.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex34/20198879_000059.jpg
--------------------------------------------------------------------------------
/results/ex34/20198879_000060.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex34/20198879_000060.jpg
--------------------------------------------------------------------------------
/results/ex34/20198879_000061.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex34/20198879_000061.jpg
--------------------------------------------------------------------------------
/results/ex34/20198879_000062.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex34/20198879_000062.jpg
--------------------------------------------------------------------------------
/results/ex34/20198879_000063.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex34/20198879_000063.jpg
--------------------------------------------------------------------------------
/results/ex34/20198879_000064.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex34/20198879_000064.jpg
--------------------------------------------------------------------------------
/results/ex35/julia20198879_000067.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex35/julia20198879_000067.jpg
--------------------------------------------------------------------------------
/results/ex35/julia20198879_000069.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex35/julia20198879_000069.jpg
--------------------------------------------------------------------------------
/results/ex35/mandelbrot20198879_000066.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex35/mandelbrot20198879_000066.jpg
--------------------------------------------------------------------------------
/results/ex35/mandelbrot20198879_000068.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex35/mandelbrot20198879_000068.jpg
--------------------------------------------------------------------------------
/results/ex36/20198879_000070.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex36/20198879_000070.jpg
--------------------------------------------------------------------------------
/results/ex36/20198879_000071.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex36/20198879_000071.jpg
--------------------------------------------------------------------------------
/results/ex36/20198879_000072.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex36/20198879_000072.jpg
--------------------------------------------------------------------------------
/results/ex37/20198879_000073.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex37/20198879_000073.jpg
--------------------------------------------------------------------------------
/results/ex37/20198879_000074.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex37/20198879_000074.jpg
--------------------------------------------------------------------------------
/results/ex37/20198879_000075.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex37/20198879_000075.jpg
--------------------------------------------------------------------------------
/results/ex37/20198879_000076.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex37/20198879_000076.jpg
--------------------------------------------------------------------------------
/results/ex37/20198879_000077.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex37/20198879_000077.jpg
--------------------------------------------------------------------------------
/results/ex38/20198879_000078.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex38/20198879_000078.jpg
--------------------------------------------------------------------------------
/results/ex39/20198879_000079.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex39/20198879_000079.jpg
--------------------------------------------------------------------------------
/results/ex40/20198879_000080.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex40/20198879_000080.jpg
--------------------------------------------------------------------------------
/results/ex41/20198879_000081.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex41/20198879_000081.jpg
--------------------------------------------------------------------------------
/results/ex41/20198879_000082.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex41/20198879_000082.jpg
--------------------------------------------------------------------------------
/results/ex41/20198879_000083.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex41/20198879_000083.jpg
--------------------------------------------------------------------------------
/results/ex42/21BD7FCE_000000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex42/21BD7FCE_000000.jpg
--------------------------------------------------------------------------------
/results/ex42/21BD7FCE_000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex42/21BD7FCE_000001.jpg
--------------------------------------------------------------------------------
/results/ex42/21BD7FCE_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex42/21BD7FCE_000002.jpg
--------------------------------------------------------------------------------
/results/ex42/21BD7FCE_000003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex42/21BD7FCE_000003.jpg
--------------------------------------------------------------------------------
/results/ex44/367371E3_000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex44/367371E3_000001.jpg
--------------------------------------------------------------------------------
/results/ex44/367371E3_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex44/367371E3_000002.jpg
--------------------------------------------------------------------------------
/results/ex44/367371E3_000004.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex44/367371E3_000004.jpg
--------------------------------------------------------------------------------
/results/ex44/367371E3_000005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex44/367371E3_000005.jpg
--------------------------------------------------------------------------------
/results/ex45/367371E3_000006.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex45/367371E3_000006.jpg
--------------------------------------------------------------------------------
/results/ex45/367371E3_000007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex45/367371E3_000007.jpg
--------------------------------------------------------------------------------
/results/ex45/367371E3_000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex45/367371E3_000008.jpg
--------------------------------------------------------------------------------
/results/ex45/367371E3_000009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex45/367371E3_000009.jpg
--------------------------------------------------------------------------------
/results/ex45/367371E3_000010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex45/367371E3_000010.jpg
--------------------------------------------------------------------------------
/results/ex45/367371E3_000011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex45/367371E3_000011.jpg
--------------------------------------------------------------------------------
/results/ex45/367371E3_000012.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex45/367371E3_000012.jpg
--------------------------------------------------------------------------------
/results/ex47/nebula.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex47/nebula.jpg
--------------------------------------------------------------------------------
/results/ex51/C641483C_000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex51/C641483C_000001.jpg
--------------------------------------------------------------------------------
/results/ex51/C641483C_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex51/C641483C_000002.jpg
--------------------------------------------------------------------------------
/results/ex51/C641483C_000003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex51/C641483C_000003.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000001.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000002.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000003.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000004.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000004.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000005.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000006.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000006.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000007.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000008.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000009.jpg
--------------------------------------------------------------------------------
/results/ex52/5D5B5495_000010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5D5B5495_000010.jpg
--------------------------------------------------------------------------------
/results/ex52/5DB06F3A_000000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex52/5DB06F3A_000000.jpg
--------------------------------------------------------------------------------
/results/ex53/spores.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex53/spores.jpg
--------------------------------------------------------------------------------
/results/ex54/result.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex54/result.jpg
--------------------------------------------------------------------------------
/results/ex55/difference.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex55/difference.jpg
--------------------------------------------------------------------------------
/results/ex55/screen.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex55/screen.jpg
--------------------------------------------------------------------------------
/results/ex56/splat1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex56/splat1.jpg
--------------------------------------------------------------------------------
/results/ex56/splat2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex56/splat2.jpg
--------------------------------------------------------------------------------
/results/ex56/splat3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex56/splat3.jpg
--------------------------------------------------------------------------------
/results/ex56/splat4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex56/splat4.jpg
--------------------------------------------------------------------------------
/results/ex56/splat5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex56/splat5.jpg
--------------------------------------------------------------------------------
/results/ex58/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img1.jpg
--------------------------------------------------------------------------------
/results/ex58/img10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img10.jpg
--------------------------------------------------------------------------------
/results/ex58/img11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img11.jpg
--------------------------------------------------------------------------------
/results/ex58/img12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img12.jpg
--------------------------------------------------------------------------------
/results/ex58/img13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img13.jpg
--------------------------------------------------------------------------------
/results/ex58/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img2.jpg
--------------------------------------------------------------------------------
/results/ex58/img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img3.jpg
--------------------------------------------------------------------------------
/results/ex58/img4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img4.jpg
--------------------------------------------------------------------------------
/results/ex58/img5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img5.jpg
--------------------------------------------------------------------------------
/results/ex58/img6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img6.jpg
--------------------------------------------------------------------------------
/results/ex58/img7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img7.jpg
--------------------------------------------------------------------------------
/results/ex58/img8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img8.jpg
--------------------------------------------------------------------------------
/results/ex58/img9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex58/img9.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000001.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000002.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000004.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000004.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000005.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000006.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000006.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000007.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000008.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000009.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000010.jpg
--------------------------------------------------------------------------------
/results/ex59/48055BA9_000011.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex59/48055BA9_000011.jpg
--------------------------------------------------------------------------------
/results/ex60/6763E9C6_000007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex60/6763E9C6_000007.jpg
--------------------------------------------------------------------------------
/results/ex60/6763E9C6_000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex60/6763E9C6_000008.jpg
--------------------------------------------------------------------------------
/results/ex60/6763E9C6_000009.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex60/6763E9C6_000009.jpg
--------------------------------------------------------------------------------
/results/ex60/6763E9C6_000010.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex60/6763E9C6_000010.jpg
--------------------------------------------------------------------------------
/results/ex61/90E437A3_000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex61/90E437A3_000001.jpg
--------------------------------------------------------------------------------
/results/ex61/90E437A3_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex61/90E437A3_000002.jpg
--------------------------------------------------------------------------------
/results/ex61/90E437A3_000003.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex61/90E437A3_000003.jpg
--------------------------------------------------------------------------------
/results/ex61/90E437A3_000004.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex61/90E437A3_000004.jpg
--------------------------------------------------------------------------------
/results/ex61/90E437A3_000005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex61/90E437A3_000005.jpg
--------------------------------------------------------------------------------
/results/ex61/90E437A3_000006.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex61/90E437A3_000006.jpg
--------------------------------------------------------------------------------
/results/ex61/90E437A3_000007.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex61/90E437A3_000007.jpg
--------------------------------------------------------------------------------
/results/ex61/90E437A3_000008.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex61/90E437A3_000008.jpg
--------------------------------------------------------------------------------
/results/ex62/04C81A12_000000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex62/04C81A12_000000.jpg
--------------------------------------------------------------------------------
/results/ex62/04C81A12_000001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex62/04C81A12_000001.jpg
--------------------------------------------------------------------------------
/results/ex62/04C81A12_000002.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex62/04C81A12_000002.jpg
--------------------------------------------------------------------------------
/results/ex63/plife.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex63/plife.jpg
--------------------------------------------------------------------------------
/results/ex64/lenia.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex64/lenia.jpg
--------------------------------------------------------------------------------
/results/ex65/rd.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/ex65/rd.jpg
--------------------------------------------------------------------------------
/results/games/the_king/DE5FE9FA_000000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/games/the_king/DE5FE9FA_000000.jpg
--------------------------------------------------------------------------------
/results/games/the_king/DE5FE9FA_000012.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/games/the_king/DE5FE9FA_000012.jpg
--------------------------------------------------------------------------------
/results/games/the_king/DE5FE9FA_000027.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/games/the_king/DE5FE9FA_000027.jpg
--------------------------------------------------------------------------------
/results/neuroevolution/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/neuroevolution/success.png
--------------------------------------------------------------------------------
/results/rt-in-weekend/antialiasing.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/antialiasing.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/camera1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/camera1.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/camera2-fov20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/camera2-fov20.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/camera2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/camera2.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/colors.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/colors.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/defocus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/defocus.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/dielectrics.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/dielectrics.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/diffuse.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/diffuse.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/metal.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/metal.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/metal_fuzz.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/metal_fuzz.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/random_scene.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/random_scene.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/random_scene_r2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/random_scene_r2.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/scene.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/scene.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/sky.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/sky.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/sphere.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/sphere.jpg
--------------------------------------------------------------------------------
/results/rt-in-weekend/sphere2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt-in-weekend/sphere2.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch02.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch04.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch05.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch06a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch06a.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch06b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch06b.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch07.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch08a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch08a.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch08b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch08b.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch08c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch08c.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch09a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch09a.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch09b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch09b.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch10a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch10a.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch10b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch10b.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch10c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch10c.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch12a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch12a.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch12b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch12b.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch12b2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch12b2.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch13.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch14.jpg
--------------------------------------------------------------------------------
/results/rt4/in_one_weekend/ch14mid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/in_one_weekend/ch14mid.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch02.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch03.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch04a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch04a.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch04b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch04b.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch04c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch04c.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch05a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch05a.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch05b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch05b.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch05c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch05c.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch05d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch05d.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch05e.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch05e.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch05f.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch05f.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch05g.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch05g.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch06.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch07a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch07a.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch07b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch07b.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch07c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch07c.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch08a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch08a.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch08b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch08b.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch09.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch10low.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch10low.jpg
--------------------------------------------------------------------------------
/results/rt4/the_next_week/ch10mid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_next_week/ch10mid.jpg
--------------------------------------------------------------------------------
/results/rt4/the_rest_of_your_life/ch02a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_rest_of_your_life/ch02a.jpg
--------------------------------------------------------------------------------
/results/rt4/the_rest_of_your_life/ch02b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_rest_of_your_life/ch02b.jpg
--------------------------------------------------------------------------------
/results/rt4/the_rest_of_your_life/ch06a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_rest_of_your_life/ch06a.jpg
--------------------------------------------------------------------------------
/results/rt4/the_rest_of_your_life/ch06b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_rest_of_your_life/ch06b.jpg
--------------------------------------------------------------------------------
/results/rt4/the_rest_of_your_life/ch06c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_rest_of_your_life/ch06c.jpg
--------------------------------------------------------------------------------
/results/rt4/the_rest_of_your_life/ch06d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_rest_of_your_life/ch06d.jpg
--------------------------------------------------------------------------------
/results/rt4/the_rest_of_your_life/ch08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/rt4/the_rest_of_your_life/ch08.jpg
--------------------------------------------------------------------------------
/results/test.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/results/test.jpg
--------------------------------------------------------------------------------
/src/GG/M/M_1_3_02.clj:
--------------------------------------------------------------------------------
1 | (ns GG.M.M-1-3-02
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.random :as r]
4 | [clojure2d.pixels :as p]
5 | [clojure2d.color :as c]))
6 |
7 | (def ^:const wname "M_1_3_02")
8 |
9 | (def cnvs (canvas 512 512))
10 | (def window (show-window {:canvas cnvs
11 | :window-name wname
12 | :state 0}))
13 |
14 | (defn draw
15 | "Draw lines and dots."
16 | [seed]
17 |
18 | (let [rng (r/rng :well512a seed)
19 | filt (fn [_] (c/gray (r/irandom rng 255)))]
20 | (p/set-canvas-pixels! cnvs (p/filter-colors filt (p/to-pixels cnvs))))
21 |
22 | seed)
23 |
24 | (defmethod mouse-event [wname :mouse-pressed] [_ s]
25 | (draw (r/irand 100000)))
26 |
27 | (draw 42)
28 |
--------------------------------------------------------------------------------
/src/GG/P/P_1_0_01.clj:
--------------------------------------------------------------------------------
1 | (ns GG.P.P-1-0-01
2 | (:require [clojure2d.core :refer :all]
3 | [clojure2d.color :as c]
4 | [fastmath.core :as m]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 | (m/use-primitive-operators)
9 |
10 | (def ^:const hue-scale (/ 255.0 360.0))
11 |
12 | (defn draw
13 | "Draw rectangle"
14 | [canvas window _ _]
15 | (when (mouse-in-window? window)
16 | (let [mx (mouse-x window)
17 | my (mouse-y window)]
18 | (-> canvas
19 | (set-background (c/from-HSB* (c/color (* hue-scale (* 0.5 my)) 255 255)))
20 | (set-color (c/from-HSB* (c/color (* hue-scale (- 360.0 (* 0.5 my))) 255 255)))
21 | (crect 360 360 (inc mx) (inc mx))))))
22 |
23 | (show-window (canvas 720 720) "P_1_0_01" draw)
24 |
--------------------------------------------------------------------------------
/src/GG/P/P_1_1_1_01.clj:
--------------------------------------------------------------------------------
1 | (ns GG.P.P-1-1-1-01
2 | (:require [clojure2d.core :refer :all]
3 | [clojure2d.color :as c]
4 | [fastmath.core :as m]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 | (m/use-primitive-operators)
9 |
10 | (defn draw
11 | "Draw rectangles"
12 | [canvas window _ _]
13 | (when (mouse-in-window? window)
14 | (let [step-x (+ 2 (mouse-x window))
15 | step-y (+ 2 (mouse-y window))]
16 | (doseq [^long grid-y (range 0 (height canvas) step-y)
17 | ^long grid-x (range 0 (width canvas) step-x)]
18 | (-> canvas
19 | (set-color (c/from-HSB* (c/color (* grid-x (/ 255.0 (width canvas)))
20 | (* (- (height canvas) grid-y) (/ 255.0 (height canvas)))
21 | 255)))
22 | (rect grid-x grid-y step-x step-y))))))
23 |
24 | (show-window (canvas 800 400) "P_1_1_1_01" draw)
25 |
--------------------------------------------------------------------------------
/src/GG/P/P_2_0_01.clj:
--------------------------------------------------------------------------------
1 | (ns GG.P.P-2-0-01
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defn draw
10 | "Draw lines"
11 | [canvas window _ _]
12 | (let [circle-res (int (m/norm (mouse-y window) 0 (height canvas) 2 80))
13 | radius (+ 0.5 (- (mouse-x window) (* 0.5 (width canvas))))
14 | angle (/ m/TWO_PI circle-res)]
15 | (-> canvas
16 | (set-stroke (/ (max 1.0 (mouse-y window)) 20.0) :square)
17 | (set-background :white)
18 | (set-color :black)
19 | (translate (* 0.5 (width window)) (* 0.5 (height window))))
20 | (dotimes [i circle-res]
21 | (let [x (* radius (m/cos (* i angle)))
22 | y (* radius (m/sin (* i angle)))]
23 | (line canvas 0 0 x y)))))
24 |
25 | (def window (show-window (canvas 550 550) "P_2_0_01" draw))
26 |
--------------------------------------------------------------------------------
/src/GG/data/01.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
16 |
--------------------------------------------------------------------------------
/src/GG/data/02.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
--------------------------------------------------------------------------------
/src/GG/data/pic1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/GG/data/pic1.jpg
--------------------------------------------------------------------------------
/src/GG/data/pic2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/GG/data/pic2.jpg
--------------------------------------------------------------------------------
/src/GG/data/pic3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/GG/data/pic3.jpg
--------------------------------------------------------------------------------
/src/NOC/README.md:
--------------------------------------------------------------------------------
1 | ## Nature of Code examples
2 |
3 | * Book: http://natureofcode.com/
4 | * Repository: https://github.com/shiffman/The-Nature-of-Code-Examples
5 |
6 | ## Licencing // Copyright
7 |
8 | ```
9 | All of the book's code examples are licensed under the MIT License.
10 |
11 | Author of originals: Daniel Shiffman, http://shiffman.net/
12 | ```
13 |
--------------------------------------------------------------------------------
/src/NOC/ch01/vector_magnitude_1_5.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch01.vector-magnitude-1-5
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.vector :as v])
4 | (:import fastmath.vector.Vec2))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 |
9 | (show-window
10 | (canvas 640 360)
11 | "Example 1-5: Vector magnitude"
12 | (fn [canvas window _ _]
13 | (let [center (Vec2. (/ (width window) 2) (/ (height window) 2))
14 | ^Vec2 mouse (v/sub (mouse-pos window) center)]
15 |
16 | (-> canvas
17 | (set-background :white)
18 | (set-stroke 2.0)
19 | (set-color :black)
20 | (rect 0 0 (v/mag mouse) 10)
21 | (translate (.x center) (.y center))
22 | (line 0 0 (.x mouse) (.y mouse))))))
23 |
24 | ;; Note: when you go outside window (mouse-pos window) returns [-1,-1].
25 |
--------------------------------------------------------------------------------
/src/NOC/ch01/vector_multiplication_1_4.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch01.vector-multiplication-1-4
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.vector :as v])
4 | (:import fastmath.vector.Vec2))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 |
9 | (show-window
10 | (canvas 640 360)
11 | "Example 1-4: Vector multiplication"
12 | (fn [canvas window _ _]
13 | (let [center (Vec2. (/ (width window) 2) (/ (height window) 2))
14 | ^Vec2 mouse (-> (mouse-pos window)
15 | (v/sub center)
16 | (v/mult 0.5))]
17 |
18 | (-> canvas
19 | (set-background :white)
20 | (translate (.x center) (.y center))
21 | (set-stroke 2.0)
22 | (set-color :black)
23 | (line 0 0 (.x mouse) (.y mouse))))))
24 |
25 | ;; Note: when you go outside window (mouse-pos window) returns [-1,-1].
26 |
27 |
--------------------------------------------------------------------------------
/src/NOC/ch01/vector_normalize_1_6.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch01.vector-normalize-1-6
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.vector :as v])
4 | (:import fastmath.vector.Vec2))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 |
9 | (show-window
10 | (canvas 640 360)
11 | "Example 1-4: Vector normalization"
12 | (fn [canvas window _ _]
13 | (let [center (Vec2. (/ (width window) 2) (/ (height window) 2))
14 | ^Vec2 mouse (-> (mouse-pos window)
15 | (v/sub center)
16 | (v/normalize)
17 | (v/mult 150))]
18 |
19 | (-> canvas
20 | (set-background :white)
21 | (translate (.x center) (.y center))
22 | (set-stroke 2.0)
23 | (set-color :black)
24 | (line 0 0 (.x mouse) (.y mouse))))))
25 |
26 | ;; Note: when you go outside window (mouse-pos window) returns [-1,-1].
27 |
28 |
--------------------------------------------------------------------------------
/src/NOC/ch01/vector_subtraction_1_3.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch01.vector-subtraction-1-3
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.vector :as v])
4 | (:import fastmath.vector.Vec2))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 |
9 | (show-window
10 | (canvas 640 360)
11 | "Example 1-3: Vector subtraction"
12 | (fn [canvas window _ _]
13 | (let [center (Vec2. (/ (width window) 2) (/ (height window) 2))
14 | ^Vec2 mouse (v/sub (mouse-pos window) center)]
15 |
16 | (-> canvas
17 | (set-background :white)
18 | (translate (.x center) (.y center))
19 | (set-stroke 2.0)
20 | (set-color :black)
21 | (line 0 0 (.x mouse) (.y mouse))))))
22 |
23 | ;; Note: when you go outside window (mouse-pos window) returns [-1,-1].
24 |
--------------------------------------------------------------------------------
/src/NOC/ch03/angular_motion_3_1.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch03.angular-motion-3-1
2 | (:require [clojure2d.core :refer :all]))
3 |
4 | (set! *warn-on-reflection* true)
5 | (set! *unchecked-math* :warn-on-boxed)
6 |
7 | (def ^:const ^int w 800)
8 | (def ^:const ^int h 200)
9 |
10 | (defn draw
11 | ""
12 | [canvas window _ state]
13 | (let [[^double angle ^double velocity] (or state [0.0 0.0])]
14 | (-> canvas
15 | (set-background :white)
16 | (set-stroke 2.0)
17 | (translate (/ w 2) (/ h 2))
18 | (rotate angle)
19 | (set-color 127 127 127)
20 | (ellipse 60 0 16 16)
21 | (ellipse -60 0 16 16)
22 | (set-color :black)
23 | (ellipse 60 0 16 16 true)
24 | (ellipse -60 0 16 16 true)
25 | (line -60 0 60 0))
26 | [(+ angle velocity) (+ velocity 0.0001)]))
27 |
28 | (def window (show-window (canvas w h) "Angular motion 3_1" draw))
29 |
--------------------------------------------------------------------------------
/src/NOC/ch03/polartocartesian_3_4.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch03.polartocartesian-3-4
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 |
8 | (def ^:const ^int w 640)
9 | (def ^:const ^int h 360)
10 |
11 | (def ^:const ^double r (* h 0.4))
12 |
13 | (defn draw
14 | ""
15 | [canvas _ _ state]
16 | (let [^double theta (or state 0.0)
17 | x (* r (m/cos theta))
18 | y (* r (m/sin theta))]
19 |
20 | (-> canvas
21 | (set-background :white)
22 | (translate (/ w 2) (/ h 2))
23 | (set-color :black)
24 | (set-stroke 2.0)
25 | (line 0 0 x y)
26 | (ellipse x y 48 48 true)
27 | (set-color 127 127 127)
28 | (ellipse x y 47 47))
29 |
30 | (+ theta 0.02)))
31 |
32 | (def window (show-window (canvas w h) "Polar to cartesian 3_4" draw))
33 |
--------------------------------------------------------------------------------
/src/NOC/ch03/polartocartesian_trail_3_4.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch03.polartocartesian-trail-3-4
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 |
8 | (def ^:const ^int w 800)
9 | (def ^:const ^int h 200)
10 |
11 | (def ^:const ^double r (* h 0.4))
12 |
13 | (defn draw
14 | ""
15 | [canvas _ _ state]
16 | (let [^double theta (or state 0.0)
17 | x (* r (m/cos theta))
18 | y (* r (m/sin theta))]
19 |
20 | (-> canvas
21 | (set-color :white 5)
22 | (rect 0 0 w h)
23 | (translate (/ w 2) (/ h 2))
24 | (set-color :black)
25 | (set-stroke 2.0)
26 | (line 0 0 x y)
27 | (ellipse x y 48 48 true)
28 | (set-color 127 127 127)
29 | (ellipse x y 47 47))
30 |
31 | (+ theta 0.02)))
32 |
33 | (def window (show-window (black-canvas w h) "Polar to cartesian trail 3_4" draw))
34 |
--------------------------------------------------------------------------------
/src/NOC/ch03/simple_harmonic_motion_3_5.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch03.simple-harmonic-motion-3-5
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 |
8 | (def ^:const ^int w 640)
9 | (def ^:const ^int h 360)
10 |
11 | (def ^:const ^double period 120)
12 | (def ^:const ^double amplitude 300)
13 |
14 | (defn draw
15 | ""
16 | [canvas window ^long framecount _]
17 | (let [x (* amplitude (m/sin (/ (* m/TWO_PI framecount) period)))]
18 | (-> canvas
19 | (set-background :white)
20 | (set-stroke 2.0)
21 | (translate (/ w 2) (/ h 2))
22 | (set-color :black)
23 | (line 0 0 x 0)
24 | (set-color 127 127 127)
25 | (ellipse x 0 48 48)
26 | (set-color :black)
27 | (ellipse x 0 48 48 true))))
28 |
29 | (def window (show-window (canvas w h) "Simple harmonic motion 3_5" draw))
30 |
--------------------------------------------------------------------------------
/src/NOC/ch03/simple_harmonic_motion_3_6.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch03.simple-harmonic-motion-3-6
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 |
8 | (def ^:const ^int w 640)
9 | (def ^:const ^int h 360)
10 |
11 | (def ^:const ^double aVelocity 0.03)
12 | (def ^:const ^double amplitude 300)
13 |
14 | (defn draw
15 | ""
16 | [canvas window _ state]
17 | (let [^double angle (or state 0.0)
18 | x (* amplitude (m/sin angle))]
19 | (-> canvas
20 | (set-background :white)
21 | (translate (/ w 2) (/ h 2))
22 | (set-color :black)
23 | (line 0 0 x 0)
24 | (set-color 175 175 175)
25 | (ellipse x 0 20 20)
26 | (set-color :black)
27 | (ellipse x 0 20 20 true))
28 |
29 | (+ angle aVelocity)))
30 |
31 | (def window (show-window (canvas w h) "Simple harmonic motion 3_6" draw))
32 |
--------------------------------------------------------------------------------
/src/NOC/ch03/static_wave_lines_3_8.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch03.static-wave-lines-3-8
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 |
8 | (def ^:const ^int w 640)
9 | (def ^:const ^int h 360)
10 |
11 | (defn create-shape
12 | "Create sin shape"
13 | []
14 | (map-indexed #(vector %2 (m/norm (m/sin (* 0.1 ^double %1)) -1.0 1.0 0 h)) (range 0 (inc w) 5)))
15 |
16 | (def cnvs (canvas w h))
17 | (def window (show-window cnvs "Static wave lines 3_8"))
18 |
19 | (with-canvas-> cnvs
20 | (set-background :white)
21 | (set-color :black)
22 | (set-stroke 2.0)
23 | (path (create-shape)))
24 |
--------------------------------------------------------------------------------
/src/NOC/ch03/wave_3_9.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch03.wave-3-9
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 |
8 | (def ^:const ^int w 640)
9 | (def ^:const ^int h 360)
10 |
11 | (defn draw
12 | ""
13 | [canvas _ ^long fc _]
14 | (let [startangle (* fc 0.015)]
15 |
16 | (set-background canvas :white)
17 | (set-stroke canvas 2.0)
18 | (loop [x (int 0)
19 | angle startangle]
20 | (when (<= x w)
21 | (let [y (m/norm (m/sin angle) -1.0 1.0 0 h)]
22 | (set-color canvas :black 50)
23 | (ellipse canvas x y 48 48)
24 | (set-color canvas :black)
25 | (ellipse canvas x y 48 48 true))
26 | (recur (+ x 24) (+ angle 0.23))))))
27 |
28 | (show-window (canvas w h) "Wave 3_9" draw)
29 |
--------------------------------------------------------------------------------
/src/NOC/ch03/wave_abc_3_9.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch03.wave-abc-3-9
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 |
8 | (def ^:const ^int w 250)
9 | (def ^:const ^int h 200)
10 |
11 | (def ^:const ^double angleVel (rand-nth [0.05 0.2 0.4]))
12 |
13 | (defn draw
14 | ""
15 | [canvas _ ^long fc _]
16 | (let [startangle (* fc 0.015)]
17 |
18 | (set-background canvas :white)
19 | (set-stroke canvas 2.0)
20 | (loop [x (int 0)
21 | angle startangle]
22 | (when (<= x w)
23 | (let [y (m/norm (m/sin angle) -1.0 1.0 0 h)]
24 | (set-color canvas :black 50)
25 | (ellipse canvas x y 48 48)
26 | (set-color canvas :black)
27 | (ellipse canvas x y 48 48 true))
28 | (recur (+ x 24) (+ angle angleVel))))))
29 |
30 | (def window (show-window (canvas w h) "Wave abc 3_9" draw))
31 |
--------------------------------------------------------------------------------
/src/NOC/ch04/texture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/NOC/ch04/texture.png
--------------------------------------------------------------------------------
/src/NOC/ch08/cantorset_8_4.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch08.cantorset-8-4
2 | (:require [clojure2d.core :refer :all]))
3 |
4 | (def cnvs (canvas 800 200))
5 | (def window (show-window cnvs "Cantor set 8_4"))
6 |
7 | (defn cantor
8 | "Draw cantor set recursively."
9 | [canvas x y len]
10 | (when (>= len 1.0)
11 | (rect canvas x y len 10)
12 | (cantor canvas x (+ y 30) (/ len 3.0))
13 | (cantor canvas (+ x (/ (* 2.0 len) 3.0)) (+ y 30) (/ len 3.0))))
14 |
15 | (with-canvas-> cnvs
16 | (set-background :white)
17 | (set-color :black)
18 | (cantor 35 0 730))
19 |
--------------------------------------------------------------------------------
/src/NOC/ch08/recursion_8_1.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch08.recursion-8-1
2 | (:require [clojure2d.core :refer :all]))
3 |
4 | (def cnvs (canvas 640 360))
5 | (def window (show-window cnvs "Recursion 8_1"))
6 |
7 | (defn draw-circle
8 | "Draw recursively smaller circles."
9 | [canvas x y r]
10 | (ellipse canvas x y r r true)
11 | (when (> r 2.0)
12 | (recur canvas x y (* 0.75 r))))
13 |
14 | (with-canvas-> cnvs
15 | (set-background :white)
16 | (set-color :black)
17 | (draw-circle (/ (width cnvs) 2)
18 | (/ (height cnvs) 2)
19 | (width cnvs)))
20 |
--------------------------------------------------------------------------------
/src/NOC/ch08/recursion_8_2.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch08.recursion-8-2
2 | (:require [clojure2d.core :refer :all]))
3 |
4 | (def cnvs (canvas 640 360))
5 | (def window (show-window cnvs "Recursion 8_2"))
6 |
7 | (defn draw-circle
8 | ""
9 | [canvas x y r]
10 | (ellipse canvas x y r r true)
11 | (when (> r 2.0)
12 | (let [r2 (/ r 2)]
13 | (draw-circle canvas (+ x r2) y r2)
14 | (draw-circle canvas (- x r2) y r2))))
15 |
16 | (with-canvas-> cnvs
17 | (set-background :white)
18 | (set-color :black)
19 | (draw-circle (/ (width cnvs) 2)
20 | (/ (height cnvs) 2)
21 | 400))
22 |
--------------------------------------------------------------------------------
/src/NOC/ch08/recursion_8_3.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch08.recursion-8-3
2 | (:require [clojure2d.core :refer :all]))
3 |
4 | (def cnvs (canvas 640 360))
5 | (def window (show-window cnvs "Recursion 8_3"))
6 |
7 | (defn draw-circle
8 | ""
9 | [canvas x y r]
10 | (ellipse canvas x y r r true)
11 | (when (> r 8)
12 | (let [r2 (/ r 2)]
13 | (draw-circle canvas (+ x r2) y r2)
14 | (draw-circle canvas (- x r2) y r2)
15 | (draw-circle canvas x (+ y r2) r2)
16 | (draw-circle canvas x (- y r2) r2))))
17 |
18 | (with-canvas-> cnvs
19 | (set-background :white)
20 | (set-color :black)
21 | (draw-circle (/ (width cnvs) 2)
22 | (/ (height cnvs) 2)
23 | 400))
24 |
--------------------------------------------------------------------------------
/src/NOC/ch08/simple_lsystem_8_6.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch08.simple-lsystem-8-6
2 | (:require [clojure2d.core :refer :all]))
3 |
4 | (def cnvs (canvas 200 200))
5 | (def window (show-window {:canvas cnvs
6 | :window-name "Simple L-system 8_6"
7 | :state {:string "A"
8 | :generation 0}}))
9 |
10 | (with-canvas-> cnvs
11 | (set-background :white)
12 | (set-color :black)
13 | (text "Click mouse to generate" 10 (- (height cnvs) 20)))
14 |
15 | (defmethod mouse-event [(:window-name window) :mouse-pressed] [_ {:keys [string generation] :as state}]
16 | (println (str "Generatation " generation ": " string))
17 | {:string (reduce #(str %1 (if (= %2 \A) "AB" "A")) "" string)
18 | :generation (inc generation)})
19 |
--------------------------------------------------------------------------------
/src/NOC/ch08/treestatic_8_6.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.ch08.treestatic-8-6
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]))
4 |
5 | (def cnvs (canvas 800 200 :mid))
6 | (def window (show-window cnvs "Tree Static 8_6"))
7 |
8 | (defn branch
9 | "Generate branches."
10 | [canvas len]
11 | (let [nlen (* 0.66 len)]
12 |
13 | (-> canvas
14 | (line 0 0 0 (- len))
15 | (translate 0 (- len)))
16 |
17 | (if (> nlen 2.0)
18 | (-> canvas
19 | (push-matrix)
20 | (rotate (/ m/PI 5.0))
21 | (branch nlen)
22 | (pop-matrix)
23 | (push-matrix)
24 | (rotate (/ m/PI -5.0))
25 | (branch nlen)
26 | (pop-matrix))
27 | canvas)))
28 |
29 | (with-canvas-> cnvs
30 | (set-background :white)
31 | (set-color :black)
32 | (set-stroke 2.0)
33 | (translate (/ (width cnvs) 2) (height cnvs))
34 | (branch 60))
35 |
--------------------------------------------------------------------------------
/src/NOC/introduction/figure_I_5_noise1dgraph.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.figure-I-5-noise1dgraph
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.random :as r]
4 | [fastmath.vector :as v]
5 | [fastmath.core :as m]))
6 |
7 | (set! *warn-on-reflection* true)
8 | (set! *unchecked-math* :warn-on-boxed)
9 | (m/use-primitive-operators)
10 |
11 | (defn draw
12 | "Draw on canvas."
13 | [canvas window framecount state]
14 | (let [^double t (or state 0.0)
15 | p (map #(v/vec2 % (* (height window) (r/noise (+ t (* 0.01 ^double %))))) (range 0 (width canvas) 2))]
16 |
17 | (-> canvas
18 | (set-background :white)
19 | (set-color :black)
20 | (set-stroke 2.0)
21 | (path p))
22 |
23 | (+ t 0.01)))
24 |
25 | (def window (show-window (canvas 400 200) "Noise 1d graph" draw))
26 |
--------------------------------------------------------------------------------
/src/NOC/introduction/figure_I_6_randomgraph.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.figure-I-6-randomgraph
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.random :as r]
4 | [fastmath.vector :as v]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 |
9 | (def cnvs (canvas 400 200))
10 | (def window (show-window cnvs "Random graph"))
11 |
12 | (let [p (map #(v/vec2 % (r/drand (height cnvs))) (range 0 (width cnvs) 2))]
13 | (with-canvas-> cnvs
14 | (set-background :white)
15 | (set-color :black)
16 | (set-stroke 2.0)
17 | (path p)))
18 |
--------------------------------------------------------------------------------
/src/NOC/introduction/gaussian2.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.gaussian2
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.random :as r]
4 | [fastmath.core :as m]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 | (m/use-primitive-operators)
9 |
10 | (defn draw
11 | "Draw on canvas."
12 | [canvas window framecount state]
13 | (let [r (r/grand 100 100) ;; setting mean and stdev is built into the library
14 | g (r/grand 200 20)
15 | b (r/grand 0 50)
16 | xloc (r/grand (* 0.5 (width canvas)) (* 0.1 (width canvas)))
17 | yloc (r/grand (* 0.5 (width canvas)) (* 0.1 (width canvas)))]
18 |
19 | (-> canvas
20 | (set-background 0 0 0 1)
21 | (set-color r g b)
22 | (ellipse xloc yloc 8 8))))
23 |
24 | (show-window (canvas 200 200) "Gaussian2" 120 draw)
25 |
--------------------------------------------------------------------------------
/src/NOC/introduction/gaussian_I_4.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.gaussian-I-4
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.random :as r]
4 | [fastmath.core :as m]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 | (m/use-primitive-operators)
9 |
10 | (defn draw
11 | ""
12 | [canvas _ _ _]
13 | (let [xloc (r/grand (* 0.5 (width canvas)) 60)]
14 |
15 | (-> canvas
16 | (set-color :black 10)
17 | (ellipse xloc (* 0.5 (height canvas)) 16 16))))
18 |
19 | (let [canvas (canvas 640 360)]
20 |
21 | (with-canvas-> canvas
22 | (set-background :white))
23 |
24 | (show-window canvas "Random Walk - Gaussian" draw))
25 |
--------------------------------------------------------------------------------
/src/NOC/introduction/noise1d.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.noise1d
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.random :as n]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 |
8 | (def ^:const ^double xincrement 0.005)
9 |
10 | (defn draw
11 | ""
12 | [canvas _ _ state]
13 | (let [^double xoff (or state 0.0)
14 | n (* (width canvas) (n/noise xoff))]
15 |
16 | (-> canvas
17 | (set-background 0 0 0 10)
18 | (set-color 200 200 200)
19 | (ellipse n (* 0.5 (height canvas)) 16 16))
20 |
21 | (+ xoff xincrement)))
22 |
23 | (show-window (canvas 200 200) "Noise 1D" draw)
24 |
25 | ;; clojure2d noise has more octaves than Processing noise, some scalling is needed
26 |
--------------------------------------------------------------------------------
/src/NOC/introduction/noise2d.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.noise2d
2 | (:require [clojure2d.color :as c]
3 | [clojure2d.core :refer :all]
4 | [fastmath.core :as m]
5 | [fastmath.random :as r]
6 | [clojure2d.pixels :as p]))
7 |
8 | (set! *warn-on-reflection* true)
9 | (set! *unchecked-math* :warn-on-boxed)
10 |
11 | (def cnvs (canvas 640 360))
12 | (def window (show-window cnvs "Noise 2d"))
13 |
14 | (let [pixels (p/to-pixels cnvs)]
15 |
16 | (dotimes [x (width cnvs)]
17 | (dotimes [y (height cnvs)]
18 | (let [xoff (m/norm x 0 (width cnvs) 0 (* 0.02 (width cnvs)))
19 | yoff (m/norm y 0 (height cnvs) 0 (* 0.02 (height cnvs)))
20 | b (* 255.0 (r/noise xoff yoff))]
21 |
22 | (p/set-color! pixels x y (c/gray b)))))
23 |
24 | (p/set-canvas-pixels! cnvs pixels))
25 |
--------------------------------------------------------------------------------
/src/NOC/introduction/noisewalk_I_6.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.noisewalk-I-6
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]
4 | [fastmath.random :as r]
5 | [fastmath.vector :as v])
6 | (:import [fastmath.vector Vec2]))
7 |
8 | (set! *warn-on-reflection* true)
9 | (set! *unchecked-math* :warn-on-boxed)
10 |
11 | (def step (v/vec2 0.005 0.005))
12 |
13 | (defn draw
14 | ""
15 | [canvas _ _ state]
16 | (let [^Vec2 noff (or state (v/vec2 (r/drand 1000) (r/drand 1000)))
17 |
18 | x (m/norm (r/noise (.x noff)) 0.0 1.0 0.0 (width canvas))
19 | y (m/norm (r/noise (.y noff)) 0.0 1.0 0.0 (height canvas))]
20 |
21 | (-> canvas
22 | (set-background :white)
23 | (set-color 127 127 127)
24 | (ellipse x y 48 48)
25 | (set-color :black)
26 | (ellipse x y 48 48 true))
27 |
28 | (v/add noff step)))
29 |
30 | (show-window (canvas 800 200) "Noise Walk I_6" 30 draw)
31 |
--------------------------------------------------------------------------------
/src/NOC/introduction/randomwalk.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.randomwalk
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]
4 | [fastmath.random :as r]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 | (m/use-primitive-operators)
9 |
10 | (defn draw
11 | ""
12 | [canvas _ _ state]
13 | (let [[^double x ^double y] (or state [(* 0.5 (width canvas))
14 | (* 0.5 (height canvas))])
15 | vx (r/drand -2.0 2.0)
16 | vy (r/drand -2.0 2.0)
17 | nx (m/constrain (+ x vx) 0.0 (width canvas))
18 | ny (m/constrain (+ y vy) 0.0 (height canvas))]
19 |
20 | (-> canvas
21 | (set-background :white)
22 | (set-color 175 175 175)
23 | (crect nx ny 40 40)
24 | (set-color 0 0 0)
25 | (crect nx ny 40 40 true))
26 |
27 | [nx ny]))
28 |
29 | (show-window (canvas 400 400) "Random Walk" 30 draw)
30 |
--------------------------------------------------------------------------------
/src/NOC/introduction/randomwalknoise.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.randomwalknoise
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]
4 | [fastmath.random :as r]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 |
9 | (defn calc-noise
10 | "Return position based on noise values."
11 | [tx ty w h]
12 | [(m/norm (r/noise tx) 0 1 0 w)
13 | (m/norm (r/noise ty) 0 1 0 h)])
14 |
15 | (defn draw
16 | ""
17 | [canvas _ _ state]
18 | (let [[^double tx ^double ty ^double x ^double y] (or state (concat [0 10000] (calc-noise 0 10000 (width canvas) (height canvas))))
19 | [^double nx ^double ny] (calc-noise tx ty (width canvas) (height canvas))]
20 |
21 | (-> canvas
22 | (set-color :white)
23 | (line x y nx ny))
24 |
25 | [(+ tx 0.01) (+ ty 0.01) nx ny]))
26 |
27 | (show-window (black-canvas 640 360) "Random Walk - Levy" draw)
28 |
--------------------------------------------------------------------------------
/src/NOC/introduction/randomwalktraditional2.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.randomwalktraditional2
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]
4 | [fastmath.random :as r]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 |
9 | (defn draw
10 | ""
11 | [canvas _ _ state]
12 | (let [[^double x ^double y] (or state [(* 0.5 (width canvas))
13 | (* 0.5 (height canvas))])
14 | stepx (dec (int (r/drand 3)))
15 | stepy (dec (int (r/drand 3)))
16 | nx (m/constrain (+ x stepx) 0 (width canvas))
17 | ny (m/constrain (+ y stepy) 0 (height canvas))]
18 |
19 | (-> canvas
20 | (set-color :white)
21 | (point nx ny))
22 |
23 | [nx ny]))
24 |
25 | (show-window (black-canvas 200 200) "Random Walk - Traditional 2" draw)
26 |
--------------------------------------------------------------------------------
/src/NOC/introduction/randomwalktraditional3.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.randomwalktraditional3
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]
4 | [fastmath.random :as r]))
5 |
6 | (set! *warn-on-reflection* true)
7 | (set! *unchecked-math* :warn-on-boxed)
8 |
9 | (defn draw
10 | ""
11 | [canvas _ _ state]
12 | (let [[^double x ^double y] (or state [(* 0.5 (width canvas))
13 | (* 0.5 (height canvas))])
14 | stepx (r/drand -1.0 1.0)
15 | stepy (r/drand -1.0 1.0)
16 | nx (m/constrain (+ x stepx) 0 (width canvas))
17 | ny (m/constrain (+ y stepy) 0 (height canvas))]
18 |
19 | (-> canvas
20 | (set-color :white)
21 | (point x y))
22 |
23 | [nx ny]))
24 |
25 | (show-window (black-canvas 200 200) "Random Walk - Traditional 3" draw)
26 |
--------------------------------------------------------------------------------
/src/NOC/introduction/simpleprobability.clj:
--------------------------------------------------------------------------------
1 | (ns NOC.introduction.simpleprobability
2 | (:require [clojure2d.core :refer :all]
3 | [fastmath.core :as m]
4 | [fastmath.random :as r])
5 | (:import [fastmath.vector Vec2]))
6 |
7 | (set! *warn-on-reflection* true)
8 | (set! *unchecked-math* :warn-on-boxed)
9 |
10 | ;; move mouse around window
11 |
12 | (defn draw
13 | ""
14 | [canvas window _ state]
15 | (let [^Vec2 v (or state (Vec2. 0.0 0.0))
16 | prob (/ (m/constrain (mouse-x window) 5 (width window)) (double (width window)))
17 | nx (m/wrap 0 (width canvas) (+ 10.0 (.x v)))
18 | ny (if (zero? nx)
19 | (m/wrap 0 (height canvas) (+ 10.0 (.y v)))
20 | (.y v))]
21 |
22 | (when (< (r/drand) prob)
23 | (-> canvas
24 | (set-background :black 1)
25 | (set-color :white)
26 | (ellipse nx ny 10 10)))
27 |
28 | (Vec2. nx ny)))
29 |
30 | (def window (show-window (black-canvas 200 200) "Simple probability" draw))
31 |
--------------------------------------------------------------------------------
/src/ex26/00.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/00.jpg
--------------------------------------------------------------------------------
/src/ex26/01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/01.jpg
--------------------------------------------------------------------------------
/src/ex26/02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/02.jpg
--------------------------------------------------------------------------------
/src/ex26/03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/03.jpg
--------------------------------------------------------------------------------
/src/ex26/04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/04.jpg
--------------------------------------------------------------------------------
/src/ex26/05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/05.jpg
--------------------------------------------------------------------------------
/src/ex26/06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/06.jpg
--------------------------------------------------------------------------------
/src/ex26/07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/07.jpg
--------------------------------------------------------------------------------
/src/ex26/08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/08.jpg
--------------------------------------------------------------------------------
/src/ex26/09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/09.jpg
--------------------------------------------------------------------------------
/src/ex26/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/10.jpg
--------------------------------------------------------------------------------
/src/ex26/11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/11.jpg
--------------------------------------------------------------------------------
/src/ex26/12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/12.jpg
--------------------------------------------------------------------------------
/src/ex26/13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/13.jpg
--------------------------------------------------------------------------------
/src/ex26/14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/14.jpg
--------------------------------------------------------------------------------
/src/ex26/15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/15.jpg
--------------------------------------------------------------------------------
/src/ex26/16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/16.jpg
--------------------------------------------------------------------------------
/src/ex26/17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/17.jpg
--------------------------------------------------------------------------------
/src/ex26/18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/18.jpg
--------------------------------------------------------------------------------
/src/ex26/19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/19.jpg
--------------------------------------------------------------------------------
/src/ex26/20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/20.jpg
--------------------------------------------------------------------------------
/src/ex26/21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/21.jpg
--------------------------------------------------------------------------------
/src/ex26/22.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/22.jpg
--------------------------------------------------------------------------------
/src/ex26/23.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/23.jpg
--------------------------------------------------------------------------------
/src/ex26/24.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/24.jpg
--------------------------------------------------------------------------------
/src/ex26/25.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/25.jpg
--------------------------------------------------------------------------------
/src/ex26/26.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/26.jpg
--------------------------------------------------------------------------------
/src/ex26/27.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/27.jpg
--------------------------------------------------------------------------------
/src/ex26/28.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/28.jpg
--------------------------------------------------------------------------------
/src/ex26/29.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/29.jpg
--------------------------------------------------------------------------------
/src/ex26/30.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/30.jpg
--------------------------------------------------------------------------------
/src/ex26/31.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/31.jpg
--------------------------------------------------------------------------------
/src/ex26/32.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/32.jpg
--------------------------------------------------------------------------------
/src/ex26/33.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/33.jpg
--------------------------------------------------------------------------------
/src/ex26/34.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/34.jpg
--------------------------------------------------------------------------------
/src/ex26/35.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/35.jpg
--------------------------------------------------------------------------------
/src/ex26/36.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/36.jpg
--------------------------------------------------------------------------------
/src/ex26/37.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/37.jpg
--------------------------------------------------------------------------------
/src/ex26/38.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/38.jpg
--------------------------------------------------------------------------------
/src/ex26/39.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/39.jpg
--------------------------------------------------------------------------------
/src/ex26/40.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/40.jpg
--------------------------------------------------------------------------------
/src/ex26/41.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/41.jpg
--------------------------------------------------------------------------------
/src/ex26/42.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/42.jpg
--------------------------------------------------------------------------------
/src/ex26/43.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clojure2D/clojure2d-examples/5bb20fd09ffde348e45250f7dd925d99b61ce2b6/src/ex26/43.jpg
--------------------------------------------------------------------------------
/src/quil/README.md:
--------------------------------------------------------------------------------
1 | ## Quil examples
2 |
3 | * Page: http://quil.info/examples
4 | * Repository: https://github.com/quil/quil
5 |
6 | ## Quil licencing // Copyright
7 |
8 | ```
9 | Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.
10 |
11 | The official Processing.org's jars, used as dependencies, are distributed under LGPL and their code can be found on http://processing.org/
12 | ```
13 |
--------------------------------------------------------------------------------
/src/rt4/README.md:
--------------------------------------------------------------------------------
1 | # [Ray Tracing](https://github.com/RayTracing/raytracing.github.io/tree/book1-review) series
2 |
3 | Based on development branch.
4 |
5 | Notes:
6 |
7 | * Each change and resulting image has it's own separate folder
8 | * Rendering is computed using several parallel threads (via `pmap`)
9 | * Perlin is implemented but `fastmath.random` version is used (for a speed)
10 | * `fastmath.vector` is used for vector operations
11 | * Some minor enhancements are made
12 | * The result is displayed in a window during rendering. `clojure2d.pixels` buffer is used as a storage.
13 | * More optimized version starts with The Next Week, Chapter 10
14 | * The Next Week, Chapter 10 contains additional renderer with reconstruction (antialiasing) kernel. See common.clj and clojure2d.pixels
15 |
16 | Yes, it's slow!
17 |
18 | ## Book1
19 |
20 | 
21 |
22 | ## Book2
23 |
24 | 
25 |
--------------------------------------------------------------------------------
/src/rt4/copy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | echo "Copying from $1 to $2"
4 | mkdir -p $2
5 | cd $1
6 |
7 | for i in *.clj
8 | do
9 | echo $i
10 | cat $i | sed -e "s/$1/$2/g" > ../$2/$i
11 | done
12 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch02/main.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch02.main
2 | (:require [fastmath.core :as m]
3 | [rt4.common :as common]
4 | [clojure2d.pixels :as p]
5 | [clojure2d.color :as c]))
6 |
7 | (set! *warn-on-reflection* true)
8 | (set! *unchecked-math* :warn-on-boxed)
9 | (m/use-primitive-operators)
10 |
11 | (def ^:const image-width 256)
12 | (def ^:const image-height 256)
13 |
14 | ;; precompute
15 | (def ^:const image-width- (dec image-width))
16 | (def ^:const image-height- (dec image-height))
17 |
18 | (def image (common/make-pixels-and-show image-width image-height))
19 |
20 | (common/pdotimes [j image-height]
21 | (dotimes [i image-width]
22 | (let [r (/ (double i) image-width-)
23 | g (/ (double j) image-height-)]
24 | (p/set-color! (:pixels image) i (- image-height- j) (c/scale-up [r g 0.25])))))
25 |
26 | (comment
27 | (common/save image "results/rt4/in_one_weekend/ch02.jpg"))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch04/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch04.ray
2 | (:require [fastmath.vector :as v]))
3 |
4 | (defprotocol RayProto
5 | (at [ray t]))
6 |
7 | (defrecord Ray [origin direction]
8 | RayProto
9 | (at [_ t] (v/add origin (v/mult direction t))))
10 |
11 | (defn ray
12 | [origin direction]
13 | (->Ray origin direction))
14 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch05/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch05.ray
2 | (:require [fastmath.vector :as v]))
3 |
4 | (defprotocol RayProto
5 | (at [ray t]))
6 |
7 | (defrecord Ray [origin direction]
8 | RayProto
9 | (at [_ t] (v/add origin (v/mult direction t))))
10 |
11 | (defn ray
12 | [origin direction]
13 | (->Ray origin direction))
14 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch06a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch06a.ray
2 | (:require [fastmath.vector :as v]))
3 |
4 | (defprotocol RayProto
5 | (at [ray t]))
6 |
7 | (defrecord Ray [origin direction]
8 | RayProto
9 | (at [_ t] (v/add origin (v/mult direction t))))
10 |
11 | (defn ray
12 | [origin direction]
13 | (->Ray origin direction))
14 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch06b/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch06b.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-tmin ray-tmax]))
11 |
12 | (defrecord HitData [p normal ^double t front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal t]}]
16 | (hit-data r p normal t))
17 | ([r p normal t]
18 | (let [front-face? (neg? (v/dot (:direction r) normal))]
19 | (->HitData p (if front-face? normal (v/sub normal)) t front-face?))))
20 |
21 | (defn hit-list
22 | "Traverse all scene objects."
23 | [xs ray ray-tmin ray-tmax]
24 | (reduce (fn [curr-hit object]
25 | (if-let [hit-object (hit object ray ray-tmin (or (:t curr-hit) ray-tmax))]
26 | hit-object
27 | curr-hit)) nil xs))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch06b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch06b.ray
2 | (:require [fastmath.vector :as v]))
3 |
4 | (defprotocol RayProto
5 | (at [ray t]))
6 |
7 | (defrecord Ray [origin direction]
8 | RayProto
9 | (at [_ t] (v/add origin (v/mult direction t))))
10 |
11 | (defn ray
12 | [origin direction]
13 | (->Ray origin direction))
14 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch07/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch07.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch07/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch07.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch08a/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch08a.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch08a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch08a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch08b/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch08b.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch08b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch08b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch08c/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch08c.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch08c/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch08c.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch09a/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch09a.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch09a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch09a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch09b/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch09b.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch09b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch09b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch10a/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch10a.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch10a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch10a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch10b/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch10b.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch10b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch10b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch10c/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch10c.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch10c/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch10c.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch11/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch11.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch11/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch11.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch12a/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch12a.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch12a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch12a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch12b/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch12b.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch12b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch12b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch13/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch13.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch13/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch13.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch14/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch14.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/in_one_weekend/ch14/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.in-one-weekend.ch14.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | [origin direction]
18 | (->Ray origin direction))
19 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch02/interval.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch02.interval
2 | (:refer-clojure :exclude [empty])
3 | (:require [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol IntervalProto
10 | (contains [interval x]) ;; a <= x <= b
11 | ;; introduced due to the bug in the book (in the time of writing this code), a < x <= b
12 | (contains- [interval x])
13 | (clamp [interval x]))
14 |
15 | (defrecord Interval [^double mn ^double mx]
16 | IntervalProto
17 | (contains [_ x] (m/between? mn mx ^double x))
18 | (contains- [_ x] (m/between-? mn mx ^double x))
19 | (clamp [_ x] (m/constrain ^double x mn mx)))
20 |
21 | (defn interval
22 | ([] (->Interval ##Inf ##-Inf))
23 | ([m] (map->Interval m))
24 | ([^double mn ^double mx] (->Interval mn mx)))
25 |
26 | (def empty (interval))
27 | (def universe (interval ##-Inf ##Inf))
28 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch02/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch02.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch03/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch03.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t]}]
16 | (hit-data r p normal mat t))
17 | ([r p normal mat t]
18 | (let [front-face? (neg? (v/dot (:direction r) normal))]
19 | (->HitData p (if front-face? normal (v/sub normal)) mat t front-face?))))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch03/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch03.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch04a/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch04a.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch04a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch04a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch04b/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch04b.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch04b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch04b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch04c/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch04c.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch04c/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch04c.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05a/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05a.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05a/perlin.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05a.perlin
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]
4 | [fastmath.random :as r])
5 | (:import [fastmath.vector Vec3]))
6 |
7 | (set! *warn-on-reflection* true)
8 | (set! *unchecked-math* :warn-on-boxed)
9 | (m/use-primitive-operators)
10 |
11 | (defrecord Perlin [ranfloat perm-x perm-y perm-z])
12 |
13 | (defn- generate-perm []
14 | (vec (shuffle (range 256))))
15 |
16 | (defn perlin
17 | []
18 | (->Perlin (vec (repeatedly 256 r/drand))
19 | (generate-perm) (generate-perm) (generate-perm)))
20 |
21 | (defn noise
22 | [^Perlin perlin ^Vec3 p]
23 | (let [i (bit-and (int (* 4.0 (.x p))) 0xff)
24 | j (bit-and (int (* 4.0 (.y p))) 0xff)
25 | k (bit-and (int (* 4.0 (.z p))) 0xff)]
26 | ((.ranfloat perlin)
27 | (bit-xor ((.perm-x perlin) i)
28 | ((.perm-y perlin) j)
29 | ((.perm-z perlin) k)))))
30 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05b/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05b.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05c/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05c.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05c/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05c.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05d/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05d.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05d/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05d.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05e/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05e.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05e/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05e.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05f/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05f.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05f/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05f.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05g/.#aabb.clj:
--------------------------------------------------------------------------------
1 | tsl@st-00994-1.13322
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05g/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05g.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch05g/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch05g.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch06/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch06.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch06/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch06.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch07a/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch07a.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch07a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch07a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch07b/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch07b.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch07b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch07b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch07c/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch07c.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch07c/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch07c.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch08a/hittable.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch08a.hittable
2 | (:require [fastmath.core :as m]
3 | [fastmath.vector :as v]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol HittableProto
10 | (hit [object r ray-t]))
11 |
12 | (defrecord HitData [p normal mat ^double t u v front-face?])
13 |
14 | (defn hit-data
15 | ([r {:keys [p normal mat t u v]
16 | :or {u 0.0 v 0.0}}]
17 | (hit-data r p normal mat t u v))
18 | ([r p normal mat t]
19 | (hit-data r p normal mat t 0.0 0.0))
20 | ([r p normal mat t u v]
21 | (let [front-face? (neg? (v/dot (:direction r) normal))]
22 | (->HitData p (if front-face? normal (v/sub normal)) mat t u v front-face?))))
23 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch08a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch08a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch08b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch08b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch09/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch09.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_next_week/ch10/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-next-week.ch10.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_rest_of_your_life/ch02a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-rest-of-your-life.ch02a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_rest_of_your_life/ch02b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-rest-of-your-life.ch02b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_rest_of_your_life/ch06a/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-rest-of-your-life.ch06a.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_rest_of_your_life/ch06b/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-rest-of-your-life.ch06b.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_rest_of_your_life/ch06c/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-rest-of-your-life.ch06c.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_rest_of_your_life/ch06d/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-rest-of-your-life.ch06d.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt4/the_rest_of_your_life/ch08/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt4.the-rest-of-your-life.ch08.ray
2 | (:require [fastmath.vector :as v]
3 | [fastmath.core :as m]))
4 |
5 | (set! *warn-on-reflection* true)
6 | (set! *unchecked-math* :warn-on-boxed)
7 | (m/use-primitive-operators)
8 |
9 | (defprotocol RayProto
10 | (at [ray t]))
11 |
12 | (defrecord Ray [origin direction ^double time]
13 | RayProto
14 | (at [_ t] (v/add origin (v/mult direction t))))
15 |
16 | (defn ray
17 | ([m] (map->Ray (merge {:time 0.0} m)))
18 | ([origin direction] (->Ray origin direction 0.0))
19 | ([origin direction time] (->Ray origin direction time)))
20 |
--------------------------------------------------------------------------------
/src/rt_in_weekend/README.md:
--------------------------------------------------------------------------------
1 | # Ray Tracing in One Weekend
2 |
3 | Implementation in Clojure using Fastmath and Clojure2d libraries
4 |
5 | ## Final scene
6 |
7 | 
8 |
9 | ## Book
10 |
11 | [_Ray Tracing in One Weekend_](https://raytracing.github.io/books/RayTracingInOneWeekend.html)
12 |
--------------------------------------------------------------------------------
/src/rt_in_weekend/ch1_image.clj:
--------------------------------------------------------------------------------
1 | (ns rt-in-weekend.ch1-image
2 | (:require [clojure2d.core :refer :all]
3 | [clojure2d.pixels :as p]
4 | [clojure2d.extra.utils :as u]
5 | [fastmath.vector :as v]))
6 |
7 | (def img (p/pixels 800 400))
8 |
9 | (dotimes [j (height img)]
10 | (dotimes [i (width img)]
11 | (let [r (/ (double i) (width img))
12 | g (/ (double (- (dec (height img)) j)) (height img))
13 | col (v/mult (v/vec4 r g 0.2 1.0) 255.0)]
14 | (p/set-color! img i j col))))
15 |
16 | (u/show-image img)
17 |
18 | ;; (save img "results/rt-in-weekend/colors.jpg")
19 |
--------------------------------------------------------------------------------
/src/rt_in_weekend/hitable.clj:
--------------------------------------------------------------------------------
1 | (ns rt-in-weekend.hitable)
2 |
3 | (deftype HitData [^double t p normal material])
4 |
5 | (defprotocol HitableProto
6 | (hit [object ray t-min t-max]))
7 |
8 | (defn hit-list
9 | "Traverse all scene objects."
10 | [xs ray t-min t-max]
11 | (reduce (fn [curr-hit object]
12 | (if-let [hit-object (hit object ray t-min (if curr-hit (.t ^HitData curr-hit) t-max))]
13 | hit-object
14 | curr-hit)) nil xs))
15 |
--------------------------------------------------------------------------------
/src/rt_in_weekend/ray.clj:
--------------------------------------------------------------------------------
1 | (ns rt-in-weekend.ray
2 | (:require [fastmath.vector :as v]))
3 |
4 | (defprotocol RayProto
5 | (point-at-parameter [r t]))
6 |
7 | (deftype Ray [origin direction]
8 | RayProto
9 | (point-at-parameter [_ t]
10 | (v/add origin (v/mult direction t))))
11 |
--------------------------------------------------------------------------------