├── .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 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/GG/data/02.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 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 | ![Final render](../../results/rt4/in_one_weekend/ch14mid.jpg) 21 | 22 | ## Book2 23 | 24 | ![Final render](../../results/rt4/the_next_week/ch10mid.jpg) 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 | ![](../../results/rt-in-weekend/random_scene_r2.jpg) 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 | --------------------------------------------------------------------------------