#N canvas 648 0 599 694 10;
#X text 269 178 disable falling;
#X obj 2 116 t a a;
#X obj 344 371 #fold +;
#X obj 8 392 s position;
#X obj 192 49 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
;
#X obj 192 102 #store;
#X obj 295 123 # / 2;
#X obj 283 352 #ravel;
#X obj 34 116 s size;
#X obj 283 371 #fold +;
#X obj 392 289 #ravel;
#X obj 253 179 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
1;
#X obj 295 55 r position;
#X obj 2 190 shunt 3;
#X obj 197 85 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
-1;
#X text 210 47 auto;
#N canvas 680 82 536 447 finger 0;
#X obj 196 7 inlet;
#X obj 112 297 # *;
#X obj 13 244 #store;
#X obj 13 19 inlet;
#X obj 259 9 loadbang;
#X text 22 159 "dig" the sphere into the sand;
#X text 87 85 compute a halfsphere;
#X obj 196 26 # - 32;
#X obj 13 420 outlet;
#X obj 242 28 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 117 260 find out how high the compensation torus should be
;
#X obj 13 225 #finished;
#X obj 13 206 t a a;
#N canvas 669 471 332 190 halfsphere 0;
#X obj 45 19 inlet distancemap;
#X obj 45 133 outlet image;
#X obj 45 57 # inv+ 200;
#X text 120 58 16 * radius^2;
#X obj 45 76 # max 0;
#X obj 45 38 # sq-;
#X obj 45 95 # sqrt;
#X obj 45 114 #outer ignore (0);
#X connect 0 0 5 0;
#X connect 2 0 4 0;
#X connect 4 0 6 0;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 7 0 1 0;
#X restore 104 103 pd halfsphere;
#N canvas 0 0 287 192 torus 0;
#X obj 59 26 inlet;
#X obj 59 140 outlet;
#X obj 59 64 # inv+ 200;
#X text 112 45 toroidal radius;
#X text 140 66 16*radius^2;
#X obj 59 45 # sq- 20;
#X obj 59 83 # max;
#X obj 59 102 # sqrt;
#X obj 59 121 #outer ignore (0);
#X connect 0 0 5 0;
#X connect 2 0 6 0;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 8 0 1 0;
#X restore 259 47 pd torus;
#X text 66 415 put extra sand as a ring around the hole;
#X obj 112 278 #redim (64 64 1);
#X obj 64 343 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
;
#N canvas 265 109 415 174 distance_map_with_centre_32 0;
#X obj 27 77 #fold +;
#X obj 27 115 outlet;
#X text 63 21 bang;
#X obj 27 20 inlet;
#X text 97 63 make distance map;
#X obj 27 58 # sq-;
#X obj 27 39 #for (-128 -128) (128 128) (4 4);
#X obj 27 96 # sqrt;
#X connect 0 0 7 0;
#X connect 3 0 6 0;
#X connect 5 0 0 0;
#X connect 6 0 5 0;
#X connect 7 0 1 0;
#X restore 259 28 pd distance_map_with_centre_32;
#X obj 13 343 shunt;
#X obj 13 141 #draw_image - (1 1 1 s #) (0 0);
#X obj 104 122 #cast s;
#X obj 112 225 #fold + \, seed (1 s #);
#X obj 112 206 #fold + \, seed (1 s #);
#X obj 112 244 # / (s # 20);
#X obj 259 280 #cast s;
#X obj 112 316 # div (s # 256);
#X obj 13 397 #draw_image - (1 1 1 s #) (0 0);
#X connect 0 0 7 0;
#X connect 1 0 26 0;
#X connect 2 0 19 0;
#X connect 3 0 20 0;
#X connect 4 0 18 0;
#X connect 7 0 20 2;
#X connect 7 0 27 2;
#X connect 9 0 18 0;
#X connect 11 0 2 0;
#X connect 12 0 11 0;
#X connect 12 1 2 1;
#X connect 12 1 23 0;
#X connect 13 0 21 0;
#X connect 14 0 25 0;
#X connect 16 0 1 0;
#X connect 17 0 19 1;
#X connect 18 0 13 0;
#X connect 18 0 14 0;
#X connect 19 0 27 0;
#X connect 19 1 8 0;
#X connect 20 0 12 0;
#X connect 21 0 20 1;
#X connect 22 0 24 0;
#X connect 23 0 22 0;
#X connect 24 0 16 0;
#X connect 25 0 1 1;
#X connect 26 0 27 1;
#X connect 27 0 8 0;
#X restore 244 152 pd finger;
#X obj 305 306 # -;
#X obj 344 352 #ravel;
#X msg 2 76 240 320;
#X obj 392 308 #fold +;
#X text 324 239 enable stats;
#X text 249 430 checking for conservation of amounts of sand;
#N canvas 705 216 520 385 lighting 0;
#X obj -3 266 outlet;
#X obj -3 18 inlet;
#X obj -3 37 #t;
#X text 182 38 colourise the horizontal differences;
#X text 183 88 colourise the vertical differences;
#X text 26 321 which is x^3 - 8x^2 + 8x - 1 = (x^2 - 7x - 1)(x-1);
#X obj 118 154 # +;
#X obj -3 190 # +;
#X obj 21 37 t a a;
#X text 311 73 red/cyan;
#X text 311 123 green/purple;
#X text 25 306 a slightly nicer looking [#convolve] used this:;
#X text 305 306 (1 8 8 1) \, fold inv+;
#X text 26 334 and a factorisable polynomial = a [#convolve] that can
be replaced by a sequence of two [#convolve].;
#X obj 167 73 #outer & (3 s # -1 0 0);
#X obj 167 125 #outer & (3 s # 0 -1 0);
#X obj 118 173 # << (s # 3);
#X obj -3 209 # << (s # 2);
#X obj -3 228 # + (3 s # 220 200 180);
#X obj -3 247 #clip (s #) (s # 255);
#X obj -3 98 #inner (1 3 s # 1 1 1);
#X obj 167 106 #convolve (2 1 s # 1 1) \, fold inv+;
#X obj 167 54 #convolve (1 2 s # 1 1) \, fold inv+;
#X connect 1 0 2 0;
#X connect 2 0 20 0;
#X connect 2 1 8 0;
#X connect 6 0 16 0;
#X connect 7 0 17 0;
#X connect 8 0 21 0;
#X connect 8 1 22 0;
#X connect 14 0 6 1;
#X connect 15 0 6 0;
#X connect 16 0 7 1;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 19 0 0 0;
#X connect 20 0 7 0;
#X connect 21 0 15 0;
#X connect 22 0 14 0;
#X restore 21 288 pd lighting;
#X obj 308 240 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
1;
#X text 214 83 step;
#X obj 67 203 vradio 15 1 0 3 empty empty empty 0 -6 0 8 -241291 -1
-1 1;
#X obj 2 372 #out window;
#X obj 283 411 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
-262144 -1 -1 0 256;
#X obj 344 411 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
-262144 -1 -1 0 256;
#X obj 392 346 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
-262144 -1 -1 0 256;
#X text 87 216 differential;
#X text 86 201 heightmap;
#X text 86 232 topographic;
#X obj 152 102 t a a;
#X obj 217 222 t a a;
#X obj 2 57 loadbang;
#X obj 305 279 t a a;
#X text -1 41 set size & reset;
#X obj 68 164 loadbang;
#X msg 68 183 1;
#X msg 8 96 120 160;
#N canvas 0 0 522 250 topographic 0;
#X obj 35 18 inlet;
#X obj 35 189 outlet;
#X obj 187 170 #greyscale_to_rgb;
#X obj 35 56 # & (s # 127);
#X obj 35 75 # abs- (s # 108);
#X obj 35 94 # min (s # 20);
#X obj 35 113 # inv+ (s # 20);
#X obj 35 132 # << (s # 4);
#X obj 35 151 #clip (s #) (s # 255);
#X text 175 168 =;
#X obj 35 37 #convolve (3 3 s # 1 2 1 2 4 2);
#X obj 35 170 #inner (1 3 s # 1 1 1);
#X connect 0 0 10 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 8 0 11 0;
#X connect 10 0 3 0;
#X connect 11 0 1 0;
#X restore 41 307 pd topographic;
#X text -1 24 Copyright 2002 \, 2006 Mathieu Bouchard;
#X obj 344 333 # abs-;
#X obj 295 74 #mouse \, \, \, \, \,;
#X obj 217 133 shunt;
#X obj 217 178 shunt;
#X obj 266 239 spigot;
#X obj 283 333 # !=;
#X text 540 42 16.8 fps;
#X text 540 28 14.2 fps;
#X text 540 55 17.1 fps;
#X obj 2 350 #scale_by 2;
#X obj 0 0 doc_demo;
#X obj 2 411 fps;
#X floatatom 2 430 5 0 0 0 - - -;
#N canvas 790 230 663 420 falling_sand 0;
#X obj 12 234 # +;
#X text 209 229 vertical falling;
#X obj 12 70 inlet;
#X obj 12 253 # +;
#X obj 12 296 # +;
#X text 200 169 horizontal falling;
#X obj 12 315 # +;
#X obj 12 342 outlet;
#X text 237 110 bug;
#X obj 12 133 #t;
#X obj 12 89 t a b;
#X obj 92 150 # +;
#X obj 72 71 # / 4;
#X text 107 69 this is _NOT_ the same as >> 2;
#X obj 72 -5 loadbang;
#X obj 39 234 #store;
#X obj 39 253 #store;
#X obj 39 296 #store;
#X obj 39 315 #store;
#X obj 129 92 #store (1111 # 128);
#X msg 171 111 3072 # 128;
#X obj 129 111 # rand;
#X obj 129 130 # - 32;
#X obj 129 149 # div 50;
#X obj 129 168 #cast s;
#X obj 72 90 #cast s;
#X obj 55 -4 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 92 187 #convolve (1 2 s # 1 1) \, fold inv+;
#X obj 72 52 # - 128;
#X obj 72 14 #for -128 128;
#X obj 72 33 # & 255;
#X obj 92 206 #convolve (1 3 s # 1 1 0) \, fold inv+;
#X obj 92 249 #convolve (2 1 s # 1 1) \, fold inv+;
#X obj 92 268 #convolve (3 1 s # 1 1 0) \, fold inv+;
#X connect 0 0 3 0;
#X connect 2 0 10 0;
#X connect 3 0 4 0;
#X connect 4 0 6 0;
#X connect 6 0 7 0;
#X connect 9 0 0 0;
#X connect 9 1 11 0;
#X connect 10 0 9 0;
#X connect 10 1 19 0;
#X connect 11 0 27 0;
#X connect 11 0 31 0;
#X connect 11 0 32 0;
#X connect 11 0 33 0;
#X connect 12 0 25 0;
#X connect 14 0 29 0;
#X connect 15 0 0 1;
#X connect 16 0 3 1;
#X connect 17 0 4 1;
#X connect 18 0 6 1;
#X connect 19 0 21 0;
#X connect 20 0 21 0;
#X connect 21 0 22 0;
#X connect 22 0 23 0;
#X connect 23 0 24 0;
#X connect 24 0 11 1;
#X connect 25 0 15 1;
#X connect 25 0 16 1;
#X connect 25 0 17 1;
#X connect 25 0 18 1;
#X connect 26 0 29 0;
#X connect 27 0 15 0;
#X connect 28 0 12 0;
#X connect 29 0 30 0;
#X connect 30 0 28 0;
#X connect 31 0 16 0;
#X connect 32 0 17 0;
#X connect 33 0 18 0;
#X restore 217 197 pd falling_sand;
#X obj 305 260 #cast s;
#N canvas 0 0 450 300 heightmap 0;
#X obj 16 18 inlet;
#X obj 167 75 #greyscale_to_rgb;
#X obj 16 37 # << (s # 2);
#X obj 16 56 # + (s # 128);
#X obj 16 94 #clip (s #) (s # 255);
#X text 156 75 =;
#X obj 16 113 outlet;
#X obj 16 75 #inner (1 3 s # 1 1 1);
#X connect 0 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 7 0;
#X connect 4 0 6 0;
#X connect 7 0 4 0;
#X restore 2 269 pd heightmap;
#X obj 192 66 metro 20;
#X obj 283 390 #to_f;
#X obj 344 390 #to_f;
#X obj 392 327 #to_f;
#X msg 2 135 \$1 \$2 1 s #;
#X connect 1 0 64 0;
#X connect 1 1 8 0;
#X connect 2 0 62 0;
#X connect 4 0 60 0;
#X connect 5 0 46 0;
#X connect 6 0 16 1;
#X connect 7 0 9 0;
#X connect 9 0 61 0;
#X connect 10 0 20 0;
#X connect 11 0 47 1;
#X connect 12 0 45 0;
#X connect 13 0 59 0;
#X connect 13 1 23 0;
#X connect 13 2 42 0;
#X connect 14 0 5 0;
#X connect 16 0 47 0;
#X connect 17 0 44 0;
#X connect 17 0 49 0;
#X connect 18 0 2 0;
#X connect 19 0 1 0;
#X connect 20 0 63 0;
#X connect 23 0 53 0;
#X connect 24 0 48 1;
#X connect 26 0 13 1;
#X connect 27 0 3 0;
#X connect 27 0 55 0;
#X connect 34 0 13 0;
#X connect 34 1 5 1;
#X connect 35 0 34 0;
#X connect 35 1 48 0;
#X connect 36 0 19 0;
#X connect 37 0 17 1;
#X connect 37 1 17 0;
#X connect 39 0 40 0;
#X connect 40 0 26 0;
#X connect 41 0 1 0;
#X connect 42 0 53 0;
#X connect 44 0 18 0;
#X connect 45 0 6 0;
#X connect 45 1 6 0;
#X connect 45 4 46 1;
#X connect 46 0 47 0;
#X connect 46 1 16 0;
#X connect 47 0 57 0;
#X connect 47 1 35 0;
#X connect 48 0 58 0;
#X connect 49 0 7 0;
#X connect 53 0 27 0;
#X connect 55 0 56 0;
#X connect 57 0 35 0;
#X connect 58 0 37 0;
#X connect 58 0 10 0;
#X connect 59 0 53 0;
#X connect 60 0 5 0;
#X connect 61 0 28 0;
#X connect 62 0 29 0;
#X connect 63 0 30 0;
#X connect 64 0 34 0;

