Add springies
parent
0f8e62ee3a
commit
e4eb181ab0
|
@ -0,0 +1,123 @@
|
|||
|
||||
USING: kernel namespaces arrays sequences math math.vectors random
|
||||
springies springies.ui ;
|
||||
|
||||
IN: springies.models.2snake
|
||||
|
||||
: model ( -- )
|
||||
|
||||
{ } clone >nodes
|
||||
{ } clone >springs
|
||||
0.001 >time-slice
|
||||
gravity off
|
||||
|
||||
1 19.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
2 36.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
3 54.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
4 72.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
5 90.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
6 108.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
7 126.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
8 144.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
9 162.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
10 180.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
11 198.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
12 216.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
13 234.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
14 252.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
15 270.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
16 288.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
17 306.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
18 324.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
19 342.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
20 360.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
21 378.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
22 396.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
23 414.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
24 432.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
25 450.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
26 468.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
27 504.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
28 486.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
29 522.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
30 540.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
31 558.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
32 576.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
33 594.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
34 612.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
35 630.0 328.0 0.0 0.0 1.0 1.0 mass
|
||||
1 1 2 200.0 1.500000 18.0 spng
|
||||
2 3 2 200.0 1.500000 18.0 spng
|
||||
3 3 4 200.0 1.500000 18.0 spng
|
||||
4 4 5 200.0 1.500000 18.0 spng
|
||||
5 5 6 200.0 1.500000 18.0 spng
|
||||
6 6 7 200.0 1.500000 18.0 spng
|
||||
7 7 8 200.0 1.500000 18.0 spng
|
||||
8 8 9 200.0 1.500000 18.0 spng
|
||||
9 9 10 200.0 1.500000 18.0 spng
|
||||
10 10 11 200.0 1.500000 18.0 spng
|
||||
11 11 12 200.0 1.500000 18.0 spng
|
||||
12 12 13 200.0 1.500000 18.0 spng
|
||||
13 13 14 200.0 1.500000 18.0 spng
|
||||
14 14 15 200.0 1.500000 18.0 spng
|
||||
15 15 16 200.0 1.500000 18.0 spng
|
||||
16 16 17 200.0 1.500000 18.0 spng
|
||||
17 17 18 200.0 1.500000 18.0 spng
|
||||
18 18 19 200.0 1.500000 18.0 spng
|
||||
19 19 20 200.0 1.500000 18.0 spng
|
||||
20 20 21 200.0 1.500000 18.0 spng
|
||||
21 21 22 200.0 1.500000 18.0 spng
|
||||
22 22 23 200.0 1.500000 18.0 spng
|
||||
23 23 24 200.0 1.500000 18.0 spng
|
||||
24 24 25 200.0 1.500000 18.0 spng
|
||||
25 25 26 200.0 1.500000 18.0 spng
|
||||
26 26 28 200.0 1.500000 18.0 spng
|
||||
27 28 27 200.0 1.500000 18.0 spng
|
||||
28 27 29 200.0 1.500000 18.0 spng
|
||||
29 29 30 200.0 1.500000 18.0 spng
|
||||
30 30 31 200.0 1.500000 18.0 spng
|
||||
31 31 32 200.0 1.500000 18.0 spng
|
||||
32 32 33 200.0 1.500000 18.0 spng
|
||||
33 33 34 200.0 1.500000 18.0 spng
|
||||
34 34 35 200.0 1.500000 18.0 spng
|
||||
35 1 3 200.0 1.500000 36.0 spng
|
||||
36 2 4 200.0 1.500000 36.0 spng
|
||||
37 3 5 200.0 1.500000 36.0 spng
|
||||
38 4 6 200.0 1.500000 36.0 spng
|
||||
39 5 7 200.0 1.500000 36.0 spng
|
||||
40 6 8 200.0 1.500000 36.0 spng
|
||||
41 7 9 200.0 1.500000 36.0 spng
|
||||
42 8 10 200.0 1.500000 36.0 spng
|
||||
43 9 11 200.0 1.500000 36.0 spng
|
||||
44 10 12 200.0 1.500000 36.0 spng
|
||||
45 11 13 200.0 1.500000 36.0 spng
|
||||
46 12 14 200.0 1.500000 36.0 spng
|
||||
47 13 15 200.0 1.500000 36.0 spng
|
||||
48 14 16 200.0 1.500000 36.0 spng
|
||||
49 15 17 200.0 1.500000 36.0 spng
|
||||
50 16 18 200.0 1.500000 36.0 spng
|
||||
51 17 19 200.0 1.500000 36.0 spng
|
||||
52 18 20 200.0 1.500000 36.0 spng
|
||||
53 19 21 200.0 1.500000 36.0 spng
|
||||
54 20 22 200.0 1.500000 36.0 spng
|
||||
55 21 23 200.0 1.500000 36.0 spng
|
||||
56 22 24 200.0 1.500000 36.0 spng
|
||||
57 23 25 200.0 1.500000 36.0 spng
|
||||
58 24 26 200.0 1.500000 36.0 spng
|
||||
59 25 28 200.0 1.500000 36.0 spng
|
||||
60 26 27 200.0 1.500000 36.0 spng
|
||||
61 28 29 200.0 1.500000 36.0 spng
|
||||
62 27 30 200.0 1.500000 36.0 spng
|
||||
63 29 31 200.0 1.500000 36.0 spng
|
||||
64 30 32 200.0 1.500000 36.0 spng
|
||||
65 31 33 200.0 1.500000 36.0 spng
|
||||
66 32 34 200.0 1.500000 36.0 spng
|
||||
67 33 35 200.0 1.500000 36.0 spng
|
||||
|
||||
nodes> [ 400 random -200 + 400 random -200 + 2array swap set-node-vel ] each ;
|
||||
|
||||
USING: threads ui ;
|
||||
|
||||
: go ( -- ) [ [ springies-window* 1000 sleep model ] with-scope ] with-ui ;
|
||||
|
||||
MAIN: go
|
|
@ -0,0 +1,255 @@
|
|||
|
||||
USING: kernel namespaces sequences springies springies.ui ;
|
||||
|
||||
IN: springies.models.ball
|
||||
|
||||
: model ( -- )
|
||||
|
||||
{ } clone >nodes
|
||||
{ } clone >springs
|
||||
0.01 >time-slice
|
||||
gravity on
|
||||
|
||||
1 325.191871 140.872641 40.832215 -5.301529 1.0 1.0 mass
|
||||
2 313.933994 149.011616 55.240875 5.026852 1.0 1.0 mass
|
||||
3 309.133386 162.523019 72.798059 5.594199 1.0 1.0 mass
|
||||
4 312.887152 176.436760 83.754277 -1.370025 1.0 1.0 mass
|
||||
5 321.660596 187.895952 91.634021 -8.308630 1.0 1.0 mass
|
||||
6 335.256132 192.503856 94.772924 -18.985044 1.0 1.0 mass
|
||||
7 348.254504 188.731936 92.657963 -29.982110 1.0 1.0 mass
|
||||
8 359.050972 180.780059 86.668616 -39.817638 1.0 1.0 mass
|
||||
9 363.685639 167.752177 76.554871 -47.987107 1.0 1.0 mass
|
||||
10 360.449954 154.092353 57.992242 -48.045772 1.0 1.0 mass
|
||||
11 352.201411 142.382665 41.200547 -39.924209 1.0 1.0 mass
|
||||
12 338.754859 137.460615 32.306364 -22.707784 1.0 1.0 mass
|
||||
13 312.911184 114.835962 8.342965 5.878311 1.0 1.0 mass
|
||||
14 290.521818 132.872407 33.212103 28.391710 1.0 1.0 mass
|
||||
15 281.048450 160.314206 66.319674 32.935324 1.0 1.0 mass
|
||||
16 287.450075 188.730522 93.898071 21.966741 1.0 1.0 mass
|
||||
17 305.987715 211.206959 112.571044 5.089593 1.0 1.0 mass
|
||||
18 333.289699 220.830317 121.166705 -17.204713 1.0 1.0 mass
|
||||
19 361.089678 214.901909 117.183695 -41.776506 1.0 1.0 mass
|
||||
20 382.690515 197.005784 101.789802 -63.980298 1.0 1.0 mass
|
||||
21 392.095364 170.108402 75.453780 -78.414351 1.0 1.0 mass
|
||||
22 386.286391 142.033621 41.812216 -77.402424 1.0 1.0 mass
|
||||
23 368.355658 119.326317 12.658676 -58.885262 1.0 1.0 mass
|
||||
24 341.159901 109.253775 -0.645459 -27.346079 1.0 1.0 mass
|
||||
25 300.792976 88.652764 -23.770230 17.788258 1.0 1.0 mass
|
||||
26 266.917041 116.942125 11.387083 52.603190 1.0 1.0 mass
|
||||
27 252.824303 157.992984 59.144863 62.163730 1.0 1.0 mass
|
||||
28 261.812599 201.245775 103.542171 47.141708 1.0 1.0 mass
|
||||
29 290.323965 234.792944 133.016945 18.136362 1.0 1.0 mass
|
||||
30 330.805232 249.331769 145.899409 -16.478401 1.0 1.0 mass
|
||||
31 373.715232 241.181453 141.068680 -55.103677 1.0 1.0 mass
|
||||
32 406.314817 213.217096 116.087430 -90.844012 1.0 1.0 mass
|
||||
33 420.647493 172.661774 73.304028 -110.880720 1.0 1.0 mass
|
||||
34 412.375908 129.697207 24.072484 -106.129512 1.0 1.0 mass
|
||||
35 384.555754 95.915740 -16.565355 -77.142380 1.0 1.0 mass
|
||||
36 344.134757 80.886540 -34.250916 -30.871105 1.0 1.0 mass
|
||||
37 288.774590 62.672780 -55.431084 28.821437 1.0 1.0 mass
|
||||
38 244.055965 100.457489 -9.756397 76.701354 1.0 1.0 mass
|
||||
39 224.574635 156.693148 53.845562 91.755892 1.0 1.0 mass
|
||||
40 235.856891 213.935639 112.462316 73.437061 1.0 1.0 mass
|
||||
41 273.697931 257.991035 152.320671 33.701056 1.0 1.0 mass
|
||||
42 329.129445 277.782400 170.727571 -15.899371 1.0 1.0 mass
|
||||
43 386.065290 267.474982 165.436658 -68.761273 1.0 1.0 mass
|
||||
44 429.946314 229.605765 132.087682 -116.795195 1.0 1.0 mass
|
||||
45 449.164590 174.189613 73.084826 -143.228528 1.0 1.0 mass
|
||||
46 438.674101 117.351918 9.340834 -136.225613 1.0 1.0 mass
|
||||
47 401.586435 72.955570 -42.523445 -98.317857 1.0 1.0 mass
|
||||
48 346.207804 52.561279 -67.447974 -34.980297 1.0 1.0 mass
|
||||
1 1 2 150.0 2.0 14.0 spng
|
||||
2 2 3 150.0 2.0 14.0 spng
|
||||
3 3 4 150.0 2.0 14.0 spng
|
||||
4 4 5 150.0 2.0 14.0 spng
|
||||
5 5 6 150.0 2.0 14.0 spng
|
||||
6 6 7 150.0 2.0 14.0 spng
|
||||
7 7 8 150.0 2.0 14.0 spng
|
||||
8 8 9 150.0 2.0 14.0 spng
|
||||
9 9 10 150.0 2.0 14.0 spng
|
||||
10 10 11 150.0 2.0 14.0 spng
|
||||
11 11 12 150.0 2.0 14.0 spng
|
||||
12 12 1 150.0 2.0 14.0 spng
|
||||
13 13 14 150.0 2.0 28.0 spng
|
||||
14 14 15 150.0 2.0 28.0 spng
|
||||
15 15 16 150.0 2.0 28.0 spng
|
||||
16 16 17 150.0 2.0 28.0 spng
|
||||
17 17 18 150.0 2.0 28.0 spng
|
||||
18 18 19 150.0 2.0 28.0 spng
|
||||
19 19 20 150.0 2.0 28.0 spng
|
||||
20 20 21 150.0 2.0 28.0 spng
|
||||
21 21 22 150.0 2.0 28.0 spng
|
||||
22 22 23 150.0 2.0 28.0 spng
|
||||
23 23 24 150.0 2.0 28.0 spng
|
||||
24 24 13 150.0 2.0 28.0 spng
|
||||
25 25 26 150.0 2.0 44.0 spng
|
||||
26 26 27 150.0 2.0 43.0 spng
|
||||
27 27 28 150.0 2.0 44.0 spng
|
||||
28 28 29 150.0 2.0 44.0 spng
|
||||
29 29 30 150.0 2.0 43.0 spng
|
||||
30 30 31 150.0 2.0 44.0 spng
|
||||
31 31 32 150.0 2.0 43.0 spng
|
||||
32 32 33 150.0 2.0 43.0 spng
|
||||
33 33 34 150.0 2.0 44.0 spng
|
||||
34 34 35 150.0 2.0 44.0 spng
|
||||
35 35 36 150.0 2.0 43.0 spng
|
||||
36 36 25 150.0 2.0 44.0 spng
|
||||
37 37 38 150.0 2.0 58.0 spng
|
||||
38 38 39 150.0 2.0 59.0 spng
|
||||
39 39 40 150.0 2.0 58.0 spng
|
||||
40 40 41 150.0 2.0 58.0 spng
|
||||
41 41 42 150.0 2.0 59.0 spng
|
||||
42 42 43 150.0 2.0 58.0 spng
|
||||
43 43 44 150.0 2.0 58.0 spng
|
||||
44 44 45 150.0 2.0 59.0 spng
|
||||
45 45 46 150.0 2.0 58.0 spng
|
||||
46 46 47 150.0 2.0 58.0 spng
|
||||
47 47 48 150.0 2.0 59.0 spng
|
||||
48 48 37 150.0 2.0 58.0 spng
|
||||
49 1 13 150.0 2.0 29.0 spng
|
||||
50 2 14 150.0 2.0 28.0 spng
|
||||
51 3 15 150.0 2.0 28.0 spng
|
||||
52 4 16 150.0 2.0 29.0 spng
|
||||
53 5 17 150.0 2.0 28.0 spng
|
||||
54 6 18 150.0 2.0 28.0 spng
|
||||
55 7 19 150.0 2.0 29.0 spng
|
||||
56 8 20 150.0 2.0 28.0 spng
|
||||
57 9 21 150.0 2.0 28.0 spng
|
||||
58 10 22 150.0 2.0 29.0 spng
|
||||
59 11 23 150.0 2.0 28.0 spng
|
||||
60 12 24 150.0 2.0 28.0 spng
|
||||
61 13 25 150.0 2.0 29.0 spng
|
||||
62 14 26 150.0 2.0 28.0 spng
|
||||
63 15 27 150.0 2.0 28.0 spng
|
||||
64 16 28 150.0 2.0 29.0 spng
|
||||
65 17 29 150.0 2.0 28.0 spng
|
||||
66 18 30 150.0 2.0 28.0 spng
|
||||
67 19 31 150.0 2.0 29.0 spng
|
||||
68 20 32 150.0 2.0 28.0 spng
|
||||
69 21 33 150.0 2.0 28.0 spng
|
||||
70 22 34 150.0 2.0 29.0 spng
|
||||
71 23 35 150.0 2.0 28.0 spng
|
||||
72 24 36 150.0 2.0 28.0 spng
|
||||
73 25 37 150.0 2.0 29.0 spng
|
||||
74 26 38 150.0 2.0 28.0 spng
|
||||
75 27 39 150.0 2.0 28.0 spng
|
||||
76 28 40 150.0 2.0 29.0 spng
|
||||
77 29 41 150.0 2.0 28.0 spng
|
||||
78 30 42 150.0 2.0 28.0 spng
|
||||
79 31 43 150.0 2.0 29.0 spng
|
||||
80 32 44 150.0 2.0 28.0 spng
|
||||
81 33 45 150.0 2.0 28.0 spng
|
||||
82 34 46 150.0 2.0 29.0 spng
|
||||
83 35 47 150.0 2.0 28.0 spng
|
||||
84 36 48 150.0 2.0 28.0 spng
|
||||
85 1 14 150.0 2.0 35.0 spng
|
||||
86 2 15 150.0 2.0 35.0 spng
|
||||
87 3 16 150.0 2.0 34.0 spng
|
||||
88 4 17 150.0 2.0 35.0 spng
|
||||
89 5 18 150.0 2.0 35.0 spng
|
||||
90 6 19 150.0 2.0 34.0 spng
|
||||
91 7 20 150.0 2.0 35.0 spng
|
||||
92 8 21 150.0 2.0 35.0 spng
|
||||
93 9 22 150.0 2.0 34.0 spng
|
||||
94 10 23 150.0 2.0 35.0 spng
|
||||
95 11 24 150.0 2.0 35.0 spng
|
||||
96 12 13 150.0 2.0 34.0 spng
|
||||
97 13 26 150.0 2.0 46.0 spng
|
||||
98 14 27 150.0 2.0 45.0 spng
|
||||
99 15 28 150.0 2.0 45.0 spng
|
||||
100 16 29 150.0 2.0 46.0 spng
|
||||
101 17 30 150.0 2.0 45.0 spng
|
||||
102 18 31 150.0 2.0 45.0 spng
|
||||
103 19 32 150.0 2.0 45.0 spng
|
||||
104 20 33 150.0 2.0 45.0 spng
|
||||
105 21 34 150.0 2.0 45.0 spng
|
||||
106 22 35 150.0 2.0 46.0 spng
|
||||
107 23 36 150.0 2.0 45.0 spng
|
||||
108 24 25 150.0 2.0 45.0 spng
|
||||
109 25 38 150.0 2.0 58.0 spng
|
||||
110 26 39 150.0 2.0 58.0 spng
|
||||
111 27 40 150.0 2.0 58.0 spng
|
||||
112 28 41 150.0 2.0 58.0 spng
|
||||
113 29 42 150.0 2.0 58.0 spng
|
||||
114 30 43 150.0 2.0 58.0 spng
|
||||
115 31 44 150.0 2.0 58.0 spng
|
||||
116 32 45 150.0 2.0 58.0 spng
|
||||
117 33 46 150.0 2.0 58.0 spng
|
||||
118 34 47 150.0 2.0 58.0 spng
|
||||
119 35 48 150.0 2.0 58.0 spng
|
||||
120 36 37 150.0 2.0 58.0 spng
|
||||
121 1 24 150.0 2.0 35.0 spng
|
||||
122 2 13 150.0 2.0 34.0 spng
|
||||
123 3 14 150.0 2.0 35.0 spng
|
||||
124 4 15 150.0 2.0 35.0 spng
|
||||
125 5 16 150.0 2.0 34.0 spng
|
||||
126 6 17 150.0 2.0 35.0 spng
|
||||
127 7 18 150.0 2.0 35.0 spng
|
||||
128 8 19 150.0 2.0 34.0 spng
|
||||
129 9 20 150.0 2.0 35.0 spng
|
||||
130 10 21 150.0 2.0 35.0 spng
|
||||
131 11 22 150.0 2.0 34.0 spng
|
||||
132 12 23 150.0 2.0 35.0 spng
|
||||
133 13 36 150.0 2.0 46.0 spng
|
||||
134 14 25 150.0 2.0 45.0 spng
|
||||
135 15 26 150.0 2.0 45.0 spng
|
||||
136 16 27 150.0 2.0 46.0 spng
|
||||
137 17 28 150.0 2.0 45.0 spng
|
||||
138 18 29 150.0 2.0 45.0 spng
|
||||
139 19 30 150.0 2.0 46.0 spng
|
||||
140 20 31 150.0 2.0 45.0 spng
|
||||
141 21 32 150.0 2.0 45.0 spng
|
||||
142 22 33 150.0 2.0 46.0 spng
|
||||
143 23 34 150.0 2.0 45.0 spng
|
||||
144 24 35 150.0 2.0 45.0 spng
|
||||
145 25 48 150.0 2.0 58.0 spng
|
||||
146 26 37 150.0 2.0 58.0 spng
|
||||
147 27 38 150.0 2.0 58.0 spng
|
||||
148 28 39 150.0 2.0 58.0 spng
|
||||
149 29 40 150.0 2.0 58.0 spng
|
||||
150 30 41 150.0 2.0 58.0 spng
|
||||
151 31 42 150.0 2.0 58.0 spng
|
||||
152 32 43 150.0 2.0 58.0 spng
|
||||
153 33 44 150.0 2.0 58.0 spng
|
||||
154 34 45 150.0 2.0 58.0 spng
|
||||
155 35 46 150.0 2.0 58.0 spng
|
||||
156 36 47 150.0 2.0 58.0 spng
|
||||
157 10 4 150.0 2.0 52.331631 spng
|
||||
158 7 1 150.0 2.0 52.436772 spng
|
||||
159 12 6 150.0 2.0 54.680698 spng
|
||||
160 5 11 150.0 2.0 54.589379 spng
|
||||
161 9 3 150.0 2.0 54.451569 spng
|
||||
162 2 8 150.0 2.0 54.482231 spng
|
||||
163 45 11 150.0 2.0 101.408150 spng
|
||||
164 46 12 150.0 2.0 101.542452 spng
|
||||
165 47 1 150.0 2.0 101.963064 spng
|
||||
166 48 2 150.0 2.0 101.517329 spng
|
||||
167 37 3 150.0 2.0 101.603694 spng
|
||||
168 38 4 150.0 2.0 102.014031 spng
|
||||
169 39 5 150.0 2.0 101.547660 spng
|
||||
170 40 6 150.0 2.0 101.573762 spng
|
||||
171 41 7 150.0 2.0 101.897300 spng
|
||||
172 42 8 150.0 2.0 101.497982 spng
|
||||
173 43 9 150.0 2.0 101.870594 spng
|
||||
174 44 10 150.0 2.0 102.043753 spng
|
||||
175 45 11 150.0 2.0 101.408150 spng
|
||||
176 46 8 150.0 2.0 101.548938 spng
|
||||
177 47 10 150.0 2.0 90.645939 spng
|
||||
178 48 10 150.0 2.0 101.952119 spng
|
||||
179 37 11 150.0 2.0 101.552352 spng
|
||||
180 38 12 150.0 2.0 101.491447 spng
|
||||
181 39 1 150.0 2.0 101.971524 spng
|
||||
182 40 2 150.0 2.0 101.587400 spng
|
||||
183 41 3 150.0 2.0 101.519279 spng
|
||||
184 42 4 150.0 2.0 101.976181 spng
|
||||
185 43 5 150.0 2.0 101.714570 spng
|
||||
186 44 6 150.0 2.0 101.388747 spng
|
||||
187 45 7 150.0 2.0 101.773286 spng
|
||||
|
||||
nodes> [ { 0 100 } swap set-node-vel ] each ;
|
||||
|
||||
USING: threads ui ;
|
||||
|
||||
: go ( -- ) [ [ springies-window* 1000 sleep model ] with-scope ] with-ui ;
|
||||
|
||||
MAIN: go
|
|
@ -0,0 +1,246 @@
|
|||
|
||||
USING: kernel combinators sequences arrays math math.vectors
|
||||
combinators.lib shuffle vars ;
|
||||
|
||||
IN: springies
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: scalar-projection ( a b -- n ) [ v. ] [ nip norm ] 2bi / ;
|
||||
|
||||
: vector-projection ( a b -- vec )
|
||||
[ nip normalize ] [ scalar-projection ] 2bi v*n ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
VAR: nodes
|
||||
VAR: springs
|
||||
VAR: time-slice
|
||||
VAR: world-size
|
||||
|
||||
: world-width ( -- width ) world-size> first ;
|
||||
|
||||
: world-height ( -- height ) world-size> second ;
|
||||
|
||||
VAR: gravity
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! node
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
TUPLE: node mass elas pos vel force ;
|
||||
|
||||
C: <node> node
|
||||
|
||||
: >>pos ( node pos -- node ) over set-node-pos ;
|
||||
|
||||
: >>vel ( node vel -- node ) over set-node-vel ;
|
||||
|
||||
: pos-x ( node -- x ) node-pos first ;
|
||||
: pos-y ( node -- y ) node-pos second ;
|
||||
: vel-x ( node -- y ) node-vel first ;
|
||||
: vel-y ( node -- y ) node-vel second ;
|
||||
|
||||
: >>pos-x ( node x -- node ) over node-pos set-first ;
|
||||
: >>pos-y ( node y -- node ) over node-pos set-second ;
|
||||
: >>vel-x ( node x -- node ) over node-vel set-first ;
|
||||
: >>vel-y ( node y -- node ) over node-vel set-second ;
|
||||
|
||||
: apply-force ( node vec -- ) over node-force v+ swap set-node-force ;
|
||||
|
||||
: reset-force ( node -- ) 0 0 2array swap set-node-force ;
|
||||
|
||||
: node-id ( id -- node ) 1- nodes> nth ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! spring
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
TUPLE: spring rest-length k damp node-a node-b ;
|
||||
|
||||
C: <spring> spring
|
||||
|
||||
: end-points ( spring -- b-pos a-pos )
|
||||
[ spring-node-b node-pos ] [ spring-node-a node-pos ] bi ;
|
||||
|
||||
: spring-length ( spring -- length ) end-points v- norm ;
|
||||
|
||||
: stretch-length ( spring -- length )
|
||||
[ spring-length ] [ spring-rest-length ] bi - ;
|
||||
|
||||
: dir ( spring -- vec ) end-points v- normalize ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! Hooke
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!
|
||||
! F = -kx
|
||||
!
|
||||
! k :: spring constant
|
||||
! x :: distance stretched beyond rest length
|
||||
!
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: hooke-force-mag ( spring -- mag ) [ spring-k ] [ stretch-length ] bi * ;
|
||||
|
||||
: hooke-force ( spring -- force ) [ dir ] [ hooke-force-mag ] bi v*n ;
|
||||
|
||||
: hooke-forces ( spring -- a b ) hooke-force dup vneg ;
|
||||
|
||||
: act-on-nodes-hooke ( spring -- )
|
||||
[ spring-node-a ] [ spring-node-b ] [ ] tri hooke-forces swapd
|
||||
apply-force
|
||||
apply-force ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! damping
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!
|
||||
! F = -bv
|
||||
!
|
||||
! b :: Damping constant
|
||||
! v :: Velocity
|
||||
!
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
! : damping-force-a ( spring -- vec )
|
||||
! [ spring-node-a node-vel ] [ spring-damp ] bi v*n vneg ;
|
||||
|
||||
! : damping-force-b ( spring -- vec )
|
||||
! [ spring-node-b node-vel ] [ spring-damp ] bi v*n vneg ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: relative-velocity-a ( spring -- vel )
|
||||
[ spring-node-a node-vel ] [ spring-node-b node-vel ] bi v- ;
|
||||
|
||||
: unit-vec-b->a ( spring -- vec )
|
||||
[ spring-node-a node-pos ] [ spring-node-b node-pos ] bi v- ;
|
||||
|
||||
: relative-velocity-along-spring-a ( spring -- vel )
|
||||
[ relative-velocity-a ] [ unit-vec-b->a ] bi vector-projection ;
|
||||
|
||||
: damping-force-a ( spring -- vec )
|
||||
[ relative-velocity-along-spring-a ] [ spring-damp ] bi v*n vneg ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: relative-velocity-b ( spring -- vel )
|
||||
[ spring-node-b node-vel ] [ spring-node-a node-vel ] bi v- ;
|
||||
|
||||
: unit-vec-a->b ( spring -- vec )
|
||||
[ spring-node-b node-pos ] [ spring-node-a node-pos ] bi v- ;
|
||||
|
||||
: relative-velocity-along-spring-b ( spring -- vel )
|
||||
[ relative-velocity-b ] [ unit-vec-a->b ] bi vector-projection ;
|
||||
|
||||
: damping-force-b ( spring -- vec )
|
||||
[ relative-velocity-along-spring-b ] [ spring-damp ] bi v*n vneg ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: act-on-nodes-damping ( spring -- )
|
||||
dup
|
||||
[ spring-node-a ] [ damping-force-a ] bi apply-force
|
||||
[ spring-node-b ] [ damping-force-b ] bi apply-force ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: below? ( node -- ? ) pos-y 0 < ;
|
||||
|
||||
: above? ( node -- ? ) pos-y world-height >= ;
|
||||
|
||||
: beyond-left? ( node -- ? ) pos-x 0 < ;
|
||||
|
||||
: beyond-right? ( node -- ? ) pos-x world-width >= ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: bounce-top ( node -- )
|
||||
world-height 1- >>pos-y
|
||||
dup [ vel-y ] [ node-elas ] bi * neg >>vel-y
|
||||
drop ;
|
||||
|
||||
: bounce-bottom ( node -- )
|
||||
0 >>pos-y
|
||||
dup [ vel-y ] [ node-elas ] bi * neg >>vel-y
|
||||
drop ;
|
||||
|
||||
: bounce-left ( node -- )
|
||||
0 >>pos-x
|
||||
dup [ vel-x ] [ node-elas ] bi * neg >>vel-x
|
||||
drop ;
|
||||
|
||||
: bounce-right ( node -- )
|
||||
world-width 1- >>pos-x
|
||||
dup [ vel-x ] [ node-elas ] bi * neg >>vel-x
|
||||
drop ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: handle-bounce ( node -- )
|
||||
{ { [ dup above? ] [ bounce-top ] }
|
||||
{ [ dup below? ] [ bounce-bottom ] }
|
||||
{ [ dup beyond-left? ] [ bounce-left ] }
|
||||
{ [ dup beyond-right? ] [ bounce-right ] }
|
||||
{ [ t ] [ drop ] } }
|
||||
cond ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: act-on-nodes ( spring -- )
|
||||
dup
|
||||
act-on-nodes-hooke
|
||||
act-on-nodes-damping ;
|
||||
|
||||
! : act-on-nodes ( spring -- ) act-on-nodes-hooke ;
|
||||
|
||||
: loop-over-springs ( -- ) springs> [ act-on-nodes ] each ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: apply-gravity ( node -- ) { 0 -9.8 } apply-force ;
|
||||
|
||||
: do-gravity ( -- ) gravity> [ nodes> [ apply-gravity ] each ] when ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
! F = ma
|
||||
|
||||
: calc-acceleration ( node -- vec ) [ node-force ] [ node-mass ] bi v/n ;
|
||||
|
||||
: new-vel ( node -- vel )
|
||||
[ node-vel ] [ calc-acceleration time-slice> v*n ] bi v+ ;
|
||||
|
||||
: new-pos ( node -- pos ) [ node-pos ] [ node-vel time-slice> v*n ] bi v+ ;
|
||||
|
||||
: iterate-node ( node -- )
|
||||
dup new-pos >>pos
|
||||
dup new-vel >>vel
|
||||
dup reset-force
|
||||
handle-bounce ;
|
||||
|
||||
: iterate-nodes ( -- ) nodes> [ iterate-node ] each ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: iterate-system ( -- ) do-gravity loop-over-springs iterate-nodes ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
! Reading xspringies data files
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: mass ( id x y x-vel y-vel mass elas -- )
|
||||
7 nrot drop
|
||||
6 nrot 6 nrot 2array
|
||||
5 nrot 5 nrot 2array
|
||||
0 0 2array <node>
|
||||
nodes> swap add >nodes ;
|
||||
|
||||
: spng ( id id-a id-b k damp rest-length -- )
|
||||
6 nrot drop
|
||||
-rot
|
||||
5 nrot node-id
|
||||
5 nrot node-id
|
||||
<spring>
|
||||
springs> swap add >springs ;
|
|
@ -0,0 +1,61 @@
|
|||
|
||||
USING: kernel namespaces threads sequences math math.vectors combinators.lib
|
||||
opengl.gl opengl colors ui ui.gadgets ui.gadgets.slate
|
||||
rewrite-closures vars springies ;
|
||||
|
||||
IN: springies.ui
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: draw-node ( node -- ) node-pos { -5 -5 } v+ dup { 10 10 } v+ gl-rect ;
|
||||
|
||||
: draw-spring ( spring -- )
|
||||
[ spring-node-a node-pos ] [ spring-node-b node-pos ] bi gl-line ;
|
||||
|
||||
: draw-nodes ( -- ) nodes> [ draw-node ] each ;
|
||||
|
||||
: draw-springs ( -- ) springs> [ draw-spring ] each ;
|
||||
|
||||
: set-projection ( -- )
|
||||
GL_PROJECTION glMatrixMode
|
||||
glLoadIdentity
|
||||
0 world-width 1- 0 world-height 1- -1 1 glOrtho
|
||||
GL_MODELVIEW glMatrixMode
|
||||
glLoadIdentity ;
|
||||
|
||||
: display ( -- ) set-projection black gl-color draw-nodes draw-springs ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
VAR: slate
|
||||
|
||||
VAR: loop
|
||||
|
||||
: update-world-size ( -- ) slate> rect-dim >world-size ;
|
||||
|
||||
: refresh-slate ( -- ) slate> relayout-1 ;
|
||||
|
||||
DEFER: maybe-loop
|
||||
|
||||
: run ( -- )
|
||||
update-world-size
|
||||
iterate-system
|
||||
refresh-slate
|
||||
yield
|
||||
maybe-loop ;
|
||||
|
||||
: maybe-loop ( -- ) loop> [ run ] when ;
|
||||
|
||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
: springies-window* ( -- )
|
||||
|
||||
C[ display ] <slate> >slate
|
||||
{ 500 500 } slate> set-slate-dim
|
||||
C[ { 500 500 } >world-size loop on [ run ] in-thread ]
|
||||
slate> set-slate-graft
|
||||
C[ loop off ] slate> set-slate-ungraft
|
||||
|
||||
slate> "Springies" open-window ;
|
||||
|
||||
: springies-window ( -- ) [ [ springies-window* ] with-scope ] with-ui ;
|
Loading…
Reference in New Issue