-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathphysigs3.pd
1208 lines (1208 loc) · 30.1 KB
/
physigs3.pd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#N canvas 322 77 863 456 10;
#N canvas 166 0 738 397 physigs-linkforces 0;
#X obj 71 21 inlet;
#X obj 220 58 outlet;
#X obj 71 160 switch~;
#X obj 220 29 bang~;
#X text 390 45 Formula: F = -[k*(|p2-p1|- len) + D*(vel2-vel1)]*(p2-p1)/|p2-p1|
;
#X msg 85 133 set \$1 1 1;
#X obj 85 112 r \$0-num-links;
#N canvas 0 0 456 205 dsp-guard 0;
#X obj 105 49 r pd;
#X obj 105 70 route dsp;
#X obj 66 91 spigot;
#X obj 66 26 inlet;
#X obj 66 119 outlet;
#X text 123 26 blocks messages while dsp is off;
#X msg 121 91 1;
#X connect 0 0 1 0;
#X connect 1 0 2 1;
#X connect 2 0 4 0;
#X connect 3 0 2 0;
#X connect 6 0 2 1;
#X restore 71 90 pd dsp-guard;
#X obj 71 62 b;
#N canvas 0 0 1067 600 calc-link-forces 0;
#X text 202 513 set new forces;
#X obj 148 361 tabreceive~ \$1-link-k;
#X obj 131 389 *~;
#X text 80 286 substract length;
#X obj 203 314 /~;
#X obj 466 370 /~;
#X text 372 310 normalized difference vector (x \, y);
#X obj 205 437 *~;
#X obj 468 442 *~;
#X text 466 507 set new forces;
#X obj 204 492 tabsend~ \$1-link-force-x;
#X obj 469 486 tabsend~ \$1-link-force-y;
#X text 155 338 TODO: why not negative?;
#N canvas 0 0 1065 395 velocity-difference 0;
#X obj 71 178 -~;
#X obj 374 179 -~;
#X obj 71 143 tabread~ \$1-vel-x;
#X obj 231 145 tabread~ \$1-vel-x;
#X obj 373 144 tabread~ \$1-vel-y;
#X obj 512 146 tabread~ \$1-vel-y;
#X obj 370 34 inlet~;
#X obj 530 34 inlet~;
#X obj 72 233 outlet~;
#X obj 374 232 outlet~;
#X obj 841 48 inlet~;
#X obj 71 205 *~;
#X obj 375 207 *~;
#X text 852 30 damping;
#X obj 664 181 -~;
#X obj 664 234 outlet~;
#X obj 665 209 *~;
#X obj 663 146 tabread~ \$1-vel-z;
#X obj 802 148 tabread~ \$1-vel-z;
#X connect 0 0 11 0;
#X connect 1 0 12 0;
#X connect 2 0 0 0;
#X connect 3 0 0 1;
#X connect 4 0 1 0;
#X connect 5 0 1 1;
#X connect 6 0 4 0;
#X connect 6 0 2 0;
#X connect 6 0 17 0;
#X connect 7 0 5 0;
#X connect 7 0 3 0;
#X connect 7 0 18 0;
#X connect 10 0 12 1;
#X connect 10 0 11 1;
#X connect 10 0 16 1;
#X connect 11 0 8 0;
#X connect 12 0 9 0;
#X connect 14 0 16 0;
#X connect 16 0 15 0;
#X connect 17 0 14 0;
#X connect 18 0 14 1;
#X restore 472 213 pd velocity-difference;
#X obj 638 213 tabreceive~ \$1-link-D;
#X obj 467 407 *~;
#X obj 204 391 *~;
#X obj 131 305 -~;
#X obj 149 266 tabreceive~ \$1-link-length;
#N canvas 0 0 543 306 get-link-force-y 0;
#X obj 109 45 inlet~;
#X obj 108 173 outlet~;
#X obj 150 105 tabreceive~ \$1-link-force-y;
#X text 186 43 order forcing;
#X connect 0 0 1 0;
#X connect 2 0 1 0;
#X restore 468 462 pd get-link-force-y;
#N canvas 0 0 543 306 get-link-force-x 0;
#X obj 109 45 inlet~;
#X obj 108 173 outlet~;
#X text 186 43 order forcing;
#X obj 149 105 tabreceive~ \$1-link-force-x;
#X connect 0 0 1 0;
#X connect 3 0 1 0;
#X restore 204 461 pd get-link-force-x;
#X obj 566 106 tabread~ \$1-pos-y;
#X obj 427 104 tabread~ \$1-pos-y;
#X obj 292 103 tabread~ \$1-pos-x;
#X obj 132 101 tabread~ \$1-pos-x;
#X obj 132 50 tabreceive~ \$1-link-m2;
#X obj 292 50 tabreceive~ \$1-link-m1;
#N canvas 292 57 690 380 get-vector-length-and-diff 0;
#X obj 81 64 inlet~;
#X obj 134 64 inlet~;
#X obj 221 65 inlet~;
#X obj 273 65 inlet~;
#X text 86 43 x1;
#X text 135 44 x2;
#X text 220 46 y1;
#X text 274 49 y2;
#X obj 82 128 -~;
#X obj 221 98 -~;
#X obj 220 126 *~;
#X obj 82 152 *~;
#X obj 81 186 +~;
#X obj 81 246 sqrt~;
#X text 27 247 |p2-p1|;
#X obj 81 276 outlet~;
#X obj 174 247 outlet~;
#X obj 267 245 outlet~;
#X obj 362 67 inlet~;
#X obj 414 67 inlet~;
#X obj 362 100 -~;
#X obj 361 128 *~;
#X text 361 48 z1;
#X text 415 51 z2;
#X obj 82 213 +~;
#X obj 409 239 outlet~;
#X connect 0 0 8 0;
#X connect 1 0 8 1;
#X connect 2 0 9 0;
#X connect 3 0 9 1;
#X connect 8 0 11 0;
#X connect 8 0 11 1;
#X connect 8 0 16 0;
#X connect 9 0 10 0;
#X connect 9 0 10 1;
#X connect 9 0 17 0;
#X connect 10 0 12 1;
#X connect 11 0 12 0;
#X connect 12 0 24 0;
#X connect 13 0 15 0;
#X connect 18 0 20 0;
#X connect 19 0 20 1;
#X connect 20 0 21 0;
#X connect 20 0 21 1;
#X connect 20 0 25 0;
#X connect 21 0 24 1;
#X connect 24 0 13 0;
#X restore 131 177 pd get-vector-length-and-diff;
#X obj 699 106 tabread~ \$1-pos-z;
#X obj 838 108 tabread~ \$1-pos-z;
#X obj 674 372 /~;
#X obj 676 444 *~;
#X text 674 509 set new forces;
#X obj 675 409 *~;
#N canvas 0 0 543 306 get-link-force-z 0;
#X obj 109 45 inlet~;
#X obj 108 173 outlet~;
#X text 186 43 order forcing;
#X obj 150 105 tabreceive~ \$1-link-force-z;
#X connect 0 0 1 0;
#X connect 3 0 1 0;
#X restore 676 464 pd get-link-force-z;
#X obj 677 488 tabsend~ \$1-link-force-z;
#X connect 1 0 2 1;
#X connect 2 0 7 0;
#X connect 2 0 8 0;
#X connect 2 0 31 0;
#X connect 4 0 7 1;
#X connect 4 0 16 0;
#X connect 5 0 8 1;
#X connect 5 0 15 0;
#X connect 7 0 20 0;
#X connect 8 0 19 0;
#X connect 13 0 16 1;
#X connect 13 1 15 1;
#X connect 13 2 33 1;
#X connect 14 0 13 2;
#X connect 15 0 8 0;
#X connect 16 0 7 0;
#X connect 17 0 2 0;
#X connect 18 0 17 1;
#X connect 19 0 11 0;
#X connect 20 0 10 0;
#X connect 21 0 27 3;
#X connect 22 0 27 2;
#X connect 23 0 27 1;
#X connect 24 0 27 0;
#X connect 25 0 24 0;
#X connect 25 0 22 0;
#X connect 25 0 28 0;
#X connect 25 0 13 0;
#X connect 26 0 23 0;
#X connect 26 0 21 0;
#X connect 26 0 29 0;
#X connect 26 0 13 1;
#X connect 27 0 17 0;
#X connect 27 0 4 1;
#X connect 27 0 5 1;
#X connect 27 0 30 1;
#X connect 27 1 4 0;
#X connect 27 2 5 0;
#X connect 27 3 30 0;
#X connect 28 0 27 4;
#X connect 29 0 27 5;
#X connect 30 0 31 1;
#X connect 30 0 33 0;
#X connect 31 0 34 0;
#X connect 33 0 31 0;
#X connect 34 0 35 0;
#X restore 68 255 pd calc-link-forces;
#X connect 0 0 8 0;
#X connect 3 0 1 0;
#X connect 5 0 2 0;
#X connect 6 0 5 0;
#X connect 7 0 2 0;
#X connect 8 0 7 0;
#X restore 199 72 pd physigs-linkforces;
#N canvas 218 101 627 451 linkforces-to-mass-forces 0;
#X obj 127 237 f 0;
#X obj 156 238 + 1;
#X obj 127 213 until;
#X obj 127 129 t b b;
#X obj 177 64 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X text 207 260 go through all links;
#X obj 127 57 inlet;
#X msg 165 214 0;
#X obj 127 258 t f f f f;
#X obj 127 192 max;
#X obj 127 171 f 64;
#X obj 152 149 r \$0-num-links;
#N canvas 542 83 802 496 actio-m1 0;
#X obj 32 348 +;
#X obj 101 349 tabread \$1-link-force-x;
#X obj 32 322 tabread \$1-force-x;
#X obj 32 371 tabwrite \$1-force-x;
#X text 426 185 get mass id;
#X text 330 135 link id;
#X text 407 211 mass id;
#X obj 270 348 +;
#X obj 270 322 tabread \$1-force-y;
#X obj 270 371 tabwrite \$1-force-y;
#X obj 339 349 tabread \$1-link-force-y;
#X obj 531 350 +;
#X obj 531 324 tabread \$1-force-z;
#X obj 600 351 tabread \$1-link-force-z;
#X obj 531 373 tabwrite \$1-force-z;
#X obj 292 157 t f f f f;
#X obj 292 211 t f f f f f f;
#X obj 292 93 inlet;
#X obj 562 350 * 1;
#X obj 301 348 * 1;
#X obj 65 349 * 1;
#X obj 292 184 tabread \$1-link-m1;
#X connect 0 0 3 0;
#X connect 1 0 20 0;
#X connect 2 0 0 0;
#X connect 7 0 9 0;
#X connect 8 0 7 0;
#X connect 10 0 19 0;
#X connect 11 0 14 0;
#X connect 12 0 11 0;
#X connect 13 0 18 0;
#X connect 15 0 21 0;
#X connect 15 1 1 0;
#X connect 15 2 10 0;
#X connect 15 3 13 0;
#X connect 16 0 2 0;
#X connect 16 1 3 1;
#X connect 16 2 8 0;
#X connect 16 3 9 1;
#X connect 16 4 12 0;
#X connect 16 5 14 1;
#X connect 17 0 15 0;
#X connect 18 0 11 1;
#X connect 19 0 7 1;
#X connect 20 0 0 1;
#X connect 21 0 16 0;
#X restore 127 342 pd actio-m1;
#N canvas 0 0 1036 592 reactio-m2 0;
#X obj 32 348 +;
#X obj 101 349 tabread \$1-link-force-x;
#X obj 32 322 tabread \$1-force-x;
#X obj 32 371 tabwrite \$1-force-x;
#X text 426 185 get mass id;
#X text 330 135 link id;
#X text 407 211 mass id;
#X obj 270 348 +;
#X obj 270 322 tabread \$1-force-y;
#X obj 270 371 tabwrite \$1-force-y;
#X obj 339 349 tabread \$1-link-force-y;
#X obj 292 184 tabread \$1-link-m2;
#X obj 301 348 * -1;
#X obj 65 349 * -1;
#X obj 531 350 +;
#X obj 562 350 * -1;
#X obj 531 324 tabread \$1-force-z;
#X obj 600 351 tabread \$1-link-force-z;
#X obj 531 373 tabwrite \$1-force-z;
#X obj 292 157 t f f f f;
#X obj 292 211 t f f f f f f;
#X obj 292 93 inlet;
#X connect 0 0 3 0;
#X connect 1 0 13 0;
#X connect 2 0 0 0;
#X connect 7 0 9 0;
#X connect 8 0 7 0;
#X connect 10 0 12 0;
#X connect 11 0 20 0;
#X connect 12 0 7 1;
#X connect 13 0 0 1;
#X connect 14 0 18 0;
#X connect 15 0 14 1;
#X connect 16 0 14 0;
#X connect 17 0 15 0;
#X connect 19 0 11 0;
#X connect 19 1 1 0;
#X connect 19 2 10 0;
#X connect 19 3 17 0;
#X connect 20 0 2 0;
#X connect 20 1 3 1;
#X connect 20 2 8 0;
#X connect 20 3 9 1;
#X connect 20 4 16 0;
#X connect 20 5 18 1;
#X connect 21 0 19 0;
#X restore 147 312 pd reactio-m2;
#X connect 0 0 1 0;
#X connect 0 0 8 0;
#X connect 1 0 0 1;
#X connect 2 0 0 0;
#X connect 3 0 10 0;
#X connect 3 1 7 0;
#X connect 4 0 3 0;
#X connect 6 0 3 0;
#X connect 7 0 0 1;
#X connect 8 0 12 0;
#X connect 8 1 13 0;
#X connect 9 0 2 0;
#X connect 10 0 9 0;
#X connect 11 0 10 1;
#X restore 199 104 pd linkforces-to-mass-forces;
#N canvas 0 0 648 516 make-link 0;
#X obj 227 56 inlet;
#X msg 227 274 \$1 \$2;
#X obj 227 298 s \$1-link-m1;
#X msg 227 334 \$1 \$3;
#X obj 227 358 s \$1-link-m2;
#X obj 228 409 s \$1-link-k;
#X msg 228 385 \$1 \$4;
#X obj 116 261 list split 1;
#X floatatom 116 284 5 0 0 0 last_link-id - -;
#X obj 439 150 inlet;
#X obj 439 178 b;
#X text 239 36 m1 \, m2 \, k \, D;
#X text 234 239 lid \, m1 \, m2 \, k \, D;
#X msg 228 432 \$1 \$5;
#X obj 228 456 s \$1-link-D;
#N canvas 0 0 386 287 enumerate 0;
#N canvas 473 338 450 300 count 0;
#X obj 131 154 f 0;
#X obj 156 153 + 1;
#X obj 131 183 outlet;
#X obj 131 59 inlet;
#X obj 131 96 b;
#X obj 178 61 inlet;
#X obj 178 98 b;
#X msg 147 133 0;
#X connect 0 0 1 0;
#X connect 0 0 2 0;
#X connect 1 0 0 1;
#X connect 3 0 4 0;
#X connect 4 0 0 0;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 0 1;
#X restore 137 130 pd count;
#X obj 56 155 list prepend;
#X obj 56 100 t a b;
#X obj 56 71 inlet;
#X obj 190 76 inlet;
#X obj 56 191 outlet;
#X connect 0 0 1 1;
#X connect 1 0 5 0;
#X connect 2 0 1 0;
#X connect 2 1 0 0;
#X connect 3 0 2 0;
#X connect 4 0 0 1;
#X restore 227 218 pd enumerate;
#X obj 308 177 r \$0-reset-links;
#X connect 0 0 15 0;
#X connect 1 0 2 0;
#X connect 3 0 4 0;
#X connect 6 0 5 0;
#X connect 7 0 8 0;
#X connect 9 0 10 0;
#X connect 10 0 15 1;
#X connect 13 0 14 0;
#X connect 15 0 1 0;
#X connect 15 0 3 0;
#X connect 15 0 6 0;
#X connect 15 0 7 0;
#X connect 15 0 13 0;
#X connect 16 0 15 1;
#X restore 42 228 pd make-link;
#X msg 142 206 reset;
#N canvas 380 81 780 444 particle-system-state 0;
#X obj 62 117 table \$1-mass 64;
#X obj 62 41 table \$1-pos-x 64;
#X obj 62 63 table \$1-vel-x 64;
#X obj 62 85 table \$1-force-x 64;
#X obj 217 41 table \$1-pos-y 64;
#X obj 217 63 table \$1-vel-y 64;
#X obj 217 85 table \$1-force-y 64;
#X text 67 17 Mass tables;
#X text 60 168 Link tables;
#X obj 60 187 table \$1-link-m1 64;
#X obj 60 209 table \$1-link-m2 64;
#X obj 60 231 table \$1-link-k 64;
#X obj 60 253 table \$1-link-D 64;
#X obj 59 276 table \$1-link-force-x 64;
#X obj 59 295 table \$1-link-force-y 64;
#X text 209 185 index of connected mass 1;
#X text 210 208 index of connected mass 2;
#X obj 62 138 table \$1-mobile 64;
#X text 541 41 position;
#X text 539 62 velocity;
#X text 183 117 mass;
#X text 220 139 mobile = 1 \, immobile = 0;
#X text 210 233 k of link;
#X text 209 252 D of link (velocity dependent damping in link direction)
;
#X text 245 276 link forces;
#X text 554 85 force accumulators;
#X obj 59 339 table \$1-link-length 64;
#X text 242 339 link lengths;
#X obj 373 41 table \$1-pos-z 64;
#X obj 373 63 table \$1-vel-z 64;
#X obj 373 85 table \$1-force-z 64;
#X obj 59 315 table \$1-link-force-z 64;
#X restore 265 185 pd particle-system-state;
#X obj 24 49 inlet;
#X obj 199 50 inlet;
#X obj 483 49 inlet;
#X text 24 29 bang masses;
#X text 187 24 bang links;
#X text 483 29 ctl;
#N canvas 185 0 783 512 physigs-masses 0;
#X obj 71 21 inlet;
#X obj 383 106 outlet;
#X obj 310 52 bang~;
#X obj 310 128 s \$1-force-x;
#X obj 310 150 s \$1-force-y;
#X msg 310 106 const 0;
#X obj 310 194 s \$1-link-force-x;
#X obj 310 216 s \$1-link-force-y;
#X obj 71 176 switch~;
#X msg 85 150 set \$1 1 1;
#N canvas 0 0 456 205 dsp-guard 0;
#X obj 105 49 r pd;
#X obj 105 70 route dsp;
#X obj 66 91 spigot;
#X obj 66 26 inlet;
#X obj 66 119 outlet;
#X text 123 26 blocks messages while dsp is off;
#X msg 121 91 1;
#X connect 0 0 1 0;
#X connect 1 0 2 1;
#X connect 2 0 4 0;
#X connect 3 0 2 0;
#X connect 6 0 2 1;
#X restore 71 100 pd dsp-guard;
#X obj 71 78 b;
#X obj 85 128 r \$0-num-masses;
#X text 310 32 clean up after dsp block;
#X text 418 149 reset forces;
#X obj 310 172 s \$1-force-z;
#X obj 310 238 s \$1-link-force-z;
#N canvas 0 0 720 476 y 0;
#X text 277 137 friction;
#X obj 402 138 tabreceive~ \$1-mass;
#X text 418 156 vdot = f/m;
#X obj 386 157 /~;
#X text 241 32 xdot = v;
#X text 72 28 get state;
#X obj 70 241 +~;
#X text 98 240 x + xdot;
#X obj 226 237 +~;
#X text 254 240 v + vdot;
#X text 77 390 set new position;
#X text 166 340 set new velocity;
#N canvas 181 14 631 450 checkbounds 0;
#X obj 46 61 inlet~;
#X obj 480 86 inlet~;
#X text 483 62 velocity;
#X text 39 37 position;
#X obj 110 360 outlet~;
#X obj 110 348 *~;
#X obj 111 260 -~ 1;
#X obj 110 234 *~ 2;
#X obj 222 72 r \$0-ymax;
#X obj 158 72 r \$0-ymin;
#X obj 135 138 r \$0-bounce;
#X msg 168 202 2;
#X msg 192 232 1;
#X obj 135 178 select 0 1;
#X msg 135 201 1;
#X msg 157 231 0;
#X obj 46 360 outlet~;
#X obj 109 101 between~ -500 500;
#X connect 0 0 16 0;
#X connect 0 0 17 0;
#X connect 1 0 5 1;
#X connect 5 0 4 0;
#X connect 6 0 5 0;
#X connect 7 0 6 0;
#X connect 8 0 17 2;
#X connect 9 0 17 1;
#X connect 10 0 13 0;
#X connect 11 0 7 1;
#X connect 12 0 6 1;
#X connect 13 0 14 0;
#X connect 13 0 15 0;
#X connect 13 1 11 0;
#X connect 13 1 12 0;
#X connect 14 0 7 1;
#X connect 15 0 6 1;
#X connect 17 0 7 0;
#X restore 71 296 pd checkbounds;
#X obj 227 138 *~ 0.99;
#X obj 72 48 tabreceive~ \$1-pos-y;
#X obj 226 56 tabreceive~ \$1-vel-y;
#X obj 386 56 tabreceive~ \$1-force-y;
#X obj 71 366 tabsend~ \$1-pos-y;
#X obj 166 319 tabsend~ \$1-vel-y;
#X obj 386 111 *~;
#X obj 404 80 tabreceive~ \$1-mobile;
#X obj 266 111 r \$0-drag;
#N canvas 0 0 589 427 clip-y 0;
#X obj 151 165 clip~ -500 500;
#X obj 152 89 inlet~;
#X obj 152 210 outlet~;
#X obj 198 122 r \$0-ymin;
#X obj 246 141 r \$0-ymax;
#X connect 0 0 2 0;
#X connect 1 0 0 0;
#X connect 3 0 0 1;
#X connect 4 0 0 2;
#X restore 71 344 pd clip-y;
#X obj 227 97 *~;
#X connect 1 0 3 1;
#X connect 3 0 8 1;
#X connect 6 0 12 0;
#X connect 8 0 12 1;
#X connect 12 0 22 0;
#X connect 12 1 18 0;
#X connect 13 0 6 1;
#X connect 13 0 8 0;
#X connect 14 0 6 0;
#X connect 15 0 23 0;
#X connect 16 0 19 0;
#X connect 19 0 3 0;
#X connect 20 0 19 1;
#X connect 20 0 23 1;
#X connect 21 0 13 1;
#X connect 22 0 17 0;
#X connect 23 0 13 0;
#X restore 75 286 pd y;
#N canvas 471 65 627 475 x 0;
#X text 278 129 friction;
#X obj 403 130 tabreceive~ \$1-mass;
#X text 419 148 vdot = f/m;
#X obj 387 149 /~;
#X text 242 24 xdot = v;
#X text 71 20 get state;
#X obj 71 233 +~;
#X text 99 236 x + xdot;
#X obj 227 233 +~;
#X text 255 232 v + vdot;
#X text 70 382 set new position;
#X text 165 346 set new velocity;
#N canvas 181 14 631 450 checkbounds 0;
#X obj 32 57 inlet~;
#X obj 462 95 inlet~;
#X text 465 71 velocity;
#X text 25 33 position;
#X obj 110 320 outlet~;
#X obj 110 298 *~;
#X obj 158 72 r \$0-xmin;
#X obj 222 72 r \$0-xmax;
#X obj 110 251 -~ 1;
#X obj 109 225 *~ 2;
#X obj 134 129 r \$0-bounce;
#X msg 167 193 2;
#X msg 191 223 1;
#X obj 134 169 select 0 1;
#X msg 134 192 1;
#X msg 156 222 0;
#X obj 33 321 outlet~;
#X obj 109 101 between~ -500 500;
#X connect 0 0 16 0;
#X connect 0 0 17 0;
#X connect 1 0 5 1;
#X connect 5 0 4 0;
#X connect 6 0 17 1;
#X connect 7 0 17 2;
#X connect 8 0 5 0;
#X connect 9 0 8 0;
#X connect 10 0 13 0;
#X connect 11 0 9 1;
#X connect 12 0 8 1;
#X connect 13 0 14 0;
#X connect 13 0 15 0;
#X connect 13 1 11 0;
#X connect 13 1 12 0;
#X connect 14 0 9 1;
#X connect 15 0 8 1;
#X connect 17 0 9 0;
#X restore 70 299 pd checkbounds;
#X obj 228 130 *~ 0.99;
#X obj 71 40 tabreceive~ \$1-pos-x;
#X obj 227 48 tabreceive~ \$1-vel-x;
#X obj 387 48 tabreceive~ \$1-force-x;
#X obj 165 325 tabsend~ \$1-vel-x;
#X obj 70 361 tabsend~ \$1-pos-x;
#X obj 388 103 *~;
#X obj 404 72 tabreceive~ \$1-mobile;
#X obj 267 103 r \$0-drag;
#N canvas 0 0 744 646 clip-x 0;
#X obj 151 165 clip~ -500 500;
#X obj 191 139 r \$0-xmin;
#X obj 256 139 r \$0-xmax;
#X obj 152 89 inlet~;
#X obj 152 210 outlet~;
#X connect 0 0 4 0;
#X connect 1 0 0 1;
#X connect 2 0 0 2;
#X connect 3 0 0 0;
#X restore 70 321 pd clip-x;
#X obj 227 89 *~;
#X connect 1 0 3 1;
#X connect 3 0 8 1;
#X connect 6 0 12 0;
#X connect 8 0 12 1;
#X connect 12 0 22 0;
#X connect 12 1 17 0;
#X connect 13 0 6 1;
#X connect 13 0 8 0;
#X connect 14 0 6 0;
#X connect 15 0 23 0;
#X connect 16 0 19 0;
#X connect 19 0 3 0;
#X connect 20 0 19 1;
#X connect 20 0 23 1;
#X connect 21 0 13 1;
#X connect 22 0 18 0;
#X connect 23 0 13 0;
#X restore 75 264 pd x;
#N canvas 0 0 720 476 z 0;
#X text 284 137 friction;
#X obj 402 138 tabreceive~ \$1-mass;
#X text 418 156 vdot = f/m;
#X obj 386 157 /~;
#X text 241 32 xdot = v;
#X text 72 28 get state;
#X obj 70 241 +~;
#X text 98 240 x + xdot;
#X obj 226 237 +~;
#X text 254 240 v + vdot;
#X text 77 390 set new position;
#X text 166 340 set new velocity;
#N canvas 181 14 631 450 checkbounds 0;
#X obj 46 61 inlet~;
#X obj 480 86 inlet~;
#X text 483 62 velocity;
#X text 39 37 position;
#X obj 110 370 outlet~;
#X obj 110 348 *~;
#X obj 111 260 -~ 1;
#X obj 110 234 *~ 2;
#X obj 135 138 r \$0-bounce;
#X msg 168 202 2;
#X msg 192 232 1;
#X obj 135 178 select 0 1;
#X msg 135 201 1;
#X msg 157 231 0;
#X obj 46 360 outlet~;
#X obj 109 101 between~ -500 500;
#X obj 222 72 r \$0-zmax;
#X obj 158 72 r \$0-zmin;
#X connect 0 0 14 0;
#X connect 0 0 15 0;
#X connect 1 0 5 1;
#X connect 5 0 4 0;
#X connect 6 0 5 0;
#X connect 7 0 6 0;
#X connect 8 0 11 0;
#X connect 9 0 7 1;
#X connect 10 0 6 1;
#X connect 11 0 12 0;
#X connect 11 0 13 0;
#X connect 11 1 9 0;
#X connect 11 1 10 0;
#X connect 12 0 7 1;
#X connect 13 0 6 1;
#X connect 15 0 7 0;
#X connect 16 0 15 2;
#X connect 17 0 15 1;
#X restore 71 296 pd checkbounds;
#X obj 227 138 *~ 0.99;
#X obj 386 111 *~;
#X obj 404 80 tabreceive~ \$1-mobile;
#X obj 273 111 r \$0-drag;
#X obj 227 97 *~;
#X obj 72 48 tabreceive~ \$1-pos-z;
#X obj 226 56 tabreceive~ \$1-vel-z;
#X obj 386 56 tabreceive~ \$1-force-z;
#X obj 166 319 tabsend~ \$1-vel-z;
#X obj 71 366 tabsend~ \$1-pos-z;
#N canvas 0 0 589 427 clip-z 0;
#X obj 151 165 clip~ -500 500;
#X obj 152 89 inlet~;
#X obj 152 210 outlet~;
#X obj 246 141 r \$0-zmax;
#X obj 198 122 r \$0-zmin;
#X connect 0 0 2 0;
#X connect 1 0 0 0;
#X connect 3 0 0 2;
#X connect 4 0 0 1;
#X restore 71 344 pd clip-z;
#X connect 1 0 3 1;
#X connect 3 0 8 1;
#X connect 6 0 12 0;
#X connect 8 0 12 1;
#X connect 12 0 23 0;
#X connect 12 1 21 0;
#X connect 13 0 6 1;
#X connect 13 0 8 0;
#X connect 14 0 3 0;
#X connect 15 0 14 1;
#X connect 15 0 17 1;
#X connect 16 0 13 1;
#X connect 17 0 13 0;
#X connect 18 0 6 0;
#X connect 19 0 17 0;
#X connect 20 0 14 0;
#X connect 23 0 22 0;
#X restore 75 308 pd z;
#X text 73 233 Eulers;
#X connect 0 0 11 0;
#X connect 2 0 5 0;
#X connect 2 0 1 0;
#X connect 5 0 4 0;
#X connect 5 0 3 0;
#X connect 5 0 6 0;
#X connect 5 0 7 0;
#X connect 5 0 15 0;
#X connect 5 0 16 0;
#X connect 9 0 8 0;
#X connect 10 0 8 0;
#X connect 11 0 10 0;
#X connect 12 0 9 0;
#X restore 24 90 pd physigs-masses;
#X obj 483 71 physigs_dispatch \$0 reset;
#X text 33 184 m1 \, m2 \, k \, D;
#X obj 483 159 physigs_dispatch \$0 drag;
#X obj 483 181 physigs_dispatch \$0 bounce;
#X obj 483 93 physigs_dispatch \$0 reset-links;
#X obj 483 115 physigs_dispatch \$0 reset-masses;
#X obj 483 203 physigs_dispatch \$0 xbounds;
#X obj 483 225 physigs_dispatch \$0 ybounds;
#N canvas 126 0 1028 544 init-and-reset 0;
#X obj 530 145 s \$0-num-masses;
#X obj 636 81 f \$3;
#X obj 530 79 f \$2;
#X obj 530 101 select 0;
#X msg 530 120 64;
#X obj 636 103 select 0;
#X msg 636 122 64;
#X obj 636 147 s \$0-num-links;
#N canvas 287 93 748 439 resize-tables 0;
#X obj 329 71 s \$1-link-m1;
#X obj 329 115 s \$1-link-k;
#X obj 329 92 s \$1-link-m2;
#X obj 329 137 s \$1-link-D;
#X obj 328 160 s \$1-link-force-x;
#X obj 328 179 s \$1-link-force-y;
#X obj 328 243 s \$1-link-length;
#X msg 292 43 resize \$1;
#X obj 292 16 r \$0-num-links;
#X obj 187 91 s \$1-pos-y;
#X obj 187 113 s \$1-vel-y;
#X obj 187 135 s \$1-force-y;
#X obj 47 141 s \$1-pos-x;
#X obj 47 163 s \$1-vel-x;
#X obj 47 185 s \$1-force-x;
#X obj 47 217 s \$1-mass;
#X obj 47 238 s \$1-mobile;
#X msg 35 43 resize \$1;
#X obj 35 16 r \$0-num-masses;
#X obj 328 199 s \$1-link-force-z;
#X obj 186 161 s \$1-pos-z;
#X obj 186 183 s \$1-vel-z;
#X obj 186 205 s \$1-force-z;
#X connect 7 0 0 0;
#X connect 7 0 2 0;
#X connect 7 0 1 0;
#X connect 7 0 3 0;
#X connect 7 0 4 0;
#X connect 7 0 5 0;
#X connect 7 0 6 0;
#X connect 7 0 19 0;
#X connect 8 0 7 0;
#X connect 17 0 12 0;
#X connect 17 0 13 0;
#X connect 17 0 14 0;
#X connect 17 0 9 0;
#X connect 17 0 10 0;
#X connect 17 0 11 0;
#X connect 17 0 15 0;
#X connect 17 0 16 0;
#X connect 17 0 20 0;
#X connect 17 0 21 0;
#X connect 17 0 22 0;
#X connect 18 0 17 0;
#X restore 530 170 pd resize-tables;
#X obj 530 37 r \$0-lb0;
#X obj 800 25 loadbang;
#X obj 800 52 t b b b b b;
#X obj 888 74 s \$0-lb0;
#X obj 877 95 s \$0-lb1;
#X obj 848 117 s \$0-lb2;
#X obj 822 136 s \$0-lb3;
#X obj 800 166 s \$0-lb4;
#N canvas 287 93 748 439 reset-link-tables 0;
#X obj 303 147 s \$1-link-m1;
#X obj 436 152 s \$1-link-k;
#X obj 303 168 s \$1-link-m2;
#X obj 436 174 s \$1-link-D;
#X obj 435 197 s \$1-link-force-x;
#X obj 435 216 s \$1-link-force-y;
#X obj 434 262 s \$1-link-length;
#X obj 285 9 inlet;
#X msg 285 116 const -1;
#X msg 395 117 const 0;
#X obj 285 30 b;
#X obj 436 238 s \$1-link-force-z;
#X connect 7 0 10 0;
#X connect 8 0 0 0;
#X connect 8 0 2 0;
#X connect 9 0 1 0;
#X connect 9 0 4 0;
#X connect 9 0 5 0;
#X connect 9 0 3 0;
#X connect 9 0 6 0;
#X connect 9 0 11 0;
#X connect 10 0 8 0;
#X connect 10 0 9 0;
#X restore 59 125 pd reset-link-tables;
#N canvas 287 93 770 383 reset-mass-tables 0;
#X obj 189 183 s \$1-pos-y;
#X obj 189 205 s \$1-vel-y;
#X obj 189 227 s \$1-force-y;
#X obj 64 183 s \$1-pos-x;
#X obj 64 205 s \$1-vel-x;
#X obj 64 227 s \$1-force-x;
#X obj 379 227 s \$1-mass;
#X obj 464 227 s \$1-mobile;
#X obj 284 34 inlet;
#X msg 226 121 const 0;
#X obj 284 55 b;
#X msg 464 191 const 1 \, 0 0;
#X text 463 248 default masses are mobile \, except the first one.
;
#X msg 379 188 const 100;
#X obj 286 184 s \$1-pos-z;
#X obj 286 206 s \$1-vel-z;
#X obj 286 228 s \$1-force-z;
#X connect 8 0 10 0;
#X connect 9 0 0 0;
#X connect 9 0 1 0;
#X connect 9 0 2 0;
#X connect 9 0 3 0;
#X connect 9 0 4 0;
#X connect 9 0 5 0;
#X connect 9 0 14 0;
#X connect 9 0 15 0;
#X connect 9 0 16 0;
#X connect 10 0 9 0;
#X connect 10 0 13 0;
#X connect 10 0 11 0;
#X connect 11 0 7 0;
#X connect 13 0 6 0;
#X restore 22 77 pd reset-mass-tables;
#X obj 59 103 r \$0-reset-links;
#X obj 22 55 r \$0-reset-masses;
#X obj 301 31 r \$0-reset;
#X obj 301 92 s \$0-reset-masses;
#X obj 328 71 s \$0-reset-links;
#X obj 301 51 t b b;
#X obj 397 27 r \$0-lb1;
#X obj 397 49 s \$0-reset;
#X text 864 25 pool of loadbangs;
#X obj 221 203 r \$0-lb2;
#X obj 221 253 s \$0-drag;
#X msg 221 226 0.99;
#X obj 175 300 r \$0-xbounds;
#X obj 175 327 unpack 0 0;
#X obj 175 374 s \$0-xmin;
#X obj 232 350 s \$0-xmax;
#X obj 302 328 unpack 0 0;
#X obj 302 301 r \$0-ybounds;
#X obj 359 350 s \$0-ymax;
#X obj 302 375 s \$0-ymin;
#X obj 466 328 unpack 0 0;
#X obj 466 301 r \$0-zbounds;
#X obj 523 350 s \$0-zmax;
#X obj 466 375 s \$0-zmin;
#X connect 1 0 5 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 3 1 0 0;
#X connect 4 0 0 0;
#X connect 5 0 6 0;
#X connect 5 1 7 0;
#X connect 6 0 7 0;
#X connect 9 0 2 0;
#X connect 9 0 1 0;
#X connect 10 0 11 0;
#X connect 11 0 16 0;
#X connect 11 1 15 0;
#X connect 11 2 14 0;
#X connect 11 3 13 0;
#X connect 11 4 12 0;
#X connect 19 0 17 0;
#X connect 20 0 18 0;
#X connect 21 0 24 0;
#X connect 24 0 22 0;
#X connect 24 1 23 0;
#X connect 25 0 26 0;
#X connect 28 0 30 0;
#X connect 30 0 29 0;
#X connect 31 0 32 0;
#X connect 32 0 33 0;
#X connect 32 1 34 0;
#X connect 35 0 38 0;
#X connect 35 1 37 0;
#X connect 36 0 35 0;
#X connect 39 0 42 0;
#X connect 39 1 41 0;
#X connect 40 0 39 0;
#X restore 42 250 pd init-and-reset;
#X obj 483 137 physigs_dispatch \$0 add-link;
#N canvas 281 74 666 313 stuff 0;
#X msg 90 159 0;
#X msg 123 159 0.5;
#X msg 156 159 0.85;
#X msg 244 160 1;
#X msg 203 159 0.95;
#X msg 104 142 0.1;
#X msg 137 141 0.3;
#X obj 200 106 s \$1-link-k;
#X msg 200 85 const \$1 \, 0 0 \, 63 0;
#X floatatom 200 65 5 0 0 0 - - -;
#X obj 203 45 hsl 128 15 0 10 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1;
#X obj 55 104 hsl 128 15 1 0 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1;
#X floatatom 52 126 5 0 0 0 - - -;
#X obj 306 160 s \$1-link-length;
#X floatatom 306 121 5 0 0 0 - - -;
#X obj 444 121 s \$1-link-D;
#X msg 444 94 const \$1;
#X floatatom 444 73 5 0 0 0 - - -;
#X obj 444 52 / 100;
#X floatatom 444 35 5 0 0 0 - - -;
#X obj 90 186 s \$0-drag;
#X msg 306 139 const \$1;
#X connect 0 0 20 0;
#X connect 1 0 20 0;
#X connect 2 0 20 0;
#X connect 3 0 20 0;
#X connect 4 0 20 0;
#X connect 5 0 20 0;
#X connect 6 0 20 0;
#X connect 8 0 7 0;
#X connect 9 0 8 0;
#X connect 10 0 9 0;
#X connect 11 0 12 0;
#X connect 12 0 20 0;
#X connect 14 0 21 0;