Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yangliu28
GitHub Repository: yangliu28/swarm_formation_sim
Path: blob/master/curve-data/shape_gen_script.py
104 views
1
# script to generate files for the curve shapes
2
# each block of code generates one curve shape
3
4
# neon typeface reference: (Thanks, Emil!)
5
# http://fenotype.1001fonts.com/neon-fonts.html
6
7
import pickle
8
import os
9
import math
10
import pygame
11
import numpy as np
12
13
# general function to reset radian angle to [-pi, pi)
14
def reset_radian(radian):
15
while radian >= math.pi:
16
radian = radian - 2*math.pi
17
while radian < -math.pi:
18
radian = radian + 2*math.pi
19
return radian
20
21
# general function to calculate next position node along a heading direction
22
def cal_next_node(node_poses, index_curr, heading_angle, rep_times):
23
for _ in range(rep_times):
24
index_next = index_curr + 1
25
x = node_poses[index_curr][0] + 1.0*math.cos(heading_angle)
26
y = node_poses[index_curr][1] + 1.0*math.sin(heading_angle)
27
node_poses[index_next] = np.array([x,y])
28
index_curr = index_next
29
return index_next
30
31
# ##### script to generate 30-squarehelix #####
32
# filename = '30-squarehelix'
33
# swarm_size = 30
34
# node_poses = np.zeros((swarm_size, 2))
35
# node_index = 0
36
# heading_angle = 0.0
37
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
38
# heading_angle = math.pi/2
39
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
40
# heading_angle = -math.pi
41
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
42
# heading_angle = -math.pi/2
43
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
44
# heading_angle = 0.0
45
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
46
# heading_angle = math.pi/2
47
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
48
# heading_angle = -math.pi
49
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
50
# heading_angle = -math.pi/2
51
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
52
# heading_angle = 0.0
53
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
54
# heading_angle = math.pi/2
55
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
56
# print(node_index)
57
# print(node_poses)
58
# with open(filename, 'w') as f:
59
# pickle.dump(node_poses, f)
60
61
62
# ##### script to generate 100-squarehelix #####
63
# filename = '100-squarehelix'
64
# swarm_size = 100
65
# node_poses = np.zeros((swarm_size, 2))
66
# node_index = 0
67
# heading_angle = 0.0
68
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
69
# heading_angle = math.pi/2
70
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
71
# heading_angle = -math.pi
72
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
73
# heading_angle = -math.pi/2
74
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
75
# heading_angle = 0.0
76
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
77
# heading_angle = math.pi/2
78
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
79
# heading_angle = -math.pi
80
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
81
# heading_angle = -math.pi/2
82
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
83
# heading_angle = 0.0
84
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
85
# heading_angle = math.pi/2
86
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
87
# heading_angle = -math.pi
88
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
89
# heading_angle = -math.pi/2
90
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
91
# heading_angle = 0.0
92
# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)
93
# heading_angle = math.pi/2
94
# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)
95
# heading_angle = -math.pi
96
# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)
97
# heading_angle = -math.pi/2
98
# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)
99
# heading_angle = 0.0
100
# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)
101
# heading_angle = math.pi/2
102
# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)
103
# heading_angle = -math.pi
104
# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)
105
# print(node_index)
106
# print(node_poses)
107
# with open(filename, 'w') as f:
108
# pickle.dump(node_poses, f)
109
110
111
# ##### script to generate 30-ARM #####
112
# filename = '30-ARM'
113
# swarm_size = 30
114
# node_poses = np.zeros((swarm_size, 2))
115
# node_index = 0
116
# heading_angle = (65*math.pi)/180.0
117
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
118
# heading_angle = (-60*math.pi)/180.0
119
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
120
# heading_angle = ((10-180)*math.pi)/180.0
121
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
122
# heading_angle = (-10*math.pi)/180.0
123
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
124
# heading_angle = (-60*math.pi)/180.0
125
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
126
# heading_angle = 0.0
127
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
128
# heading_angle = math.pi/2.0
129
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
130
# heading_angle = 0.0
131
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
132
# heading_angle = (-45*math.pi)/180.0
133
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
134
# heading_angle = -math.pi/2.0
135
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
136
# heading_angle = -math.pi
137
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
138
# heading_angle = (-40*math.pi)/180.0
139
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
140
# heading_angle = 0.0
141
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
142
# heading_angle = math.pi/2.0
143
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
144
# heading_angle = (-50*math.pi)/180.0
145
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
146
# heading_angle = (50*math.pi)/180.0
147
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
148
# heading_angle = -math.pi/2
149
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
150
# print(node_index)
151
# print(node_poses)
152
# with open(filename, 'w') as f:
153
# pickle.dump(node_poses, f)
154
155
156
# ##### script to generate 100-ARM #####
157
# filename = '100-ARM'
158
# swarm_size = 100
159
# node_poses = np.zeros((swarm_size, 2))
160
# node_index = 0
161
# arc_angle = math.pi/7.0/2.0
162
# heading_angle = (65*math.pi)/180.0
163
# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)
164
# heading_angle = (-65*math.pi)/180.0
165
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
166
# heading_angle = -math.pi
167
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
168
# heading_angle = ((65-180)*math.pi)/180.0
169
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
170
# heading_angle = 0.0
171
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
172
# heading_angle = (-65*math.pi)/180.0
173
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
174
# heading_angle = 0.0
175
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
176
# heading_angle = math.pi/2.0
177
# node_index = cal_next_node(node_poses, node_index, heading_angle, 10)
178
# heading_angle = 0.0
179
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
180
# heading_angle = arc_angle
181
# for _ in range(7):
182
# heading_angle = reset_radian(heading_angle - 2*arc_angle)
183
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
184
# heading_angle = -math.pi
185
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
186
# heading_angle = (-43*math.pi)/180.0
187
# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)
188
# heading_angle = 0.0
189
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
190
# heading_angle = math.pi/2.0
191
# node_index = cal_next_node(node_poses, node_index, heading_angle, 10)
192
# heading_angle = (-50*math.pi)/180.0
193
# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)
194
# heading_angle = (50*math.pi)/180.0
195
# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)
196
# heading_angle = -math.pi/2
197
# node_index = cal_next_node(node_poses, node_index, heading_angle, 10)
198
# print(node_index)
199
# print(node_poses)
200
# with open(filename, 'w') as f:
201
# pickle.dump(node_poses, f)
202
203
204
# ##### script to generate 30-KID #####
205
# filename = '30-KID'
206
# swarm_size = 30
207
# node_poses = np.zeros((swarm_size, 2))
208
# node_index = 0
209
# arc_angle = math.pi/4.0/2.0*0.9
210
# heading_angle = math.pi/2
211
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
212
# heading_angle = 0.0
213
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
214
# heading_angle = -math.pi/2
215
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
216
# heading_angle = 30*math.pi/180.0
217
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
218
# heading_angle = reset_radian(heading_angle - math.pi/2)
219
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
220
# heading_angle = reset_radian(heading_angle - math.pi/2)
221
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
222
# heading_angle = -30*math.pi/180.0
223
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
224
# heading_angle = 0.0
225
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
226
# heading_angle = math.pi/2
227
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
228
# heading_angle = 0.0
229
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
230
# heading_angle = -math.pi/2
231
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
232
# heading_angle = 0.0
233
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
234
# heading_angle = math.pi/2
235
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
236
# heading_angle = 0.0
237
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
238
# heading_angle = arc_angle*0.5
239
# for _ in range(4):
240
# heading_angle = reset_radian(heading_angle - 2*arc_angle)
241
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
242
# print(node_index)
243
# print(node_poses)
244
# with open(filename, 'w') as f:
245
# pickle.dump(node_poses, f)
246
247
248
# ##### script to generate 100-KID #####
249
# filename = '100-KID'
250
# swarm_size = 100
251
# node_poses = np.zeros((swarm_size, 2))
252
# node_index = 0
253
# arc_segments = 17
254
# arc_angle = math.pi/float(arc_segments)/2.0
255
# heading_angle = math.pi/2
256
# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)
257
# heading_angle = 0.0
258
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
259
# heading_angle = -math.pi/2
260
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
261
# heading_angle = 40*math.pi/180.0
262
# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)
263
# heading_angle = reset_radian(heading_angle - math.pi/2)
264
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
265
# heading_angle = reset_radian(heading_angle - math.pi/2)
266
# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)
267
# heading_angle = -40*math.pi/180.0
268
# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)
269
# heading_angle = 0.0
270
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
271
# heading_angle = math.pi/2
272
# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)
273
# heading_angle = (90-30)*math.pi/180.0
274
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
275
# heading_angle = (90+30)*math.pi/180.0
276
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
277
# heading_angle = 15*math.pi/180.0
278
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
279
# heading_angle = -15*math.pi/180.0
280
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
281
# heading_angle = (-90-30)*math.pi/180.0
282
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
283
# heading_angle = (-90+30)*math.pi/180.0
284
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
285
# heading_angle = -math.pi/2
286
# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)
287
# heading_angle = 0.0
288
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
289
# heading_angle = math.pi/2
290
# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)
291
# heading_angle = 0.0
292
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
293
# heading_angle = arc_angle
294
# for _ in range(arc_segments):
295
# heading_angle = reset_radian(heading_angle - 2*arc_angle)
296
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
297
# heading_angle = -math.pi
298
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
299
# print(node_index)
300
# print(node_poses)
301
# with open(filename, 'w') as f:
302
# pickle.dump(node_poses, f)
303
304
305
# ##### script to generate 30-MAD #####
306
# filename = '30-MAD'
307
# swarm_size = 30
308
# node_poses = np.zeros((swarm_size, 2))
309
# node_index = 0
310
# arc_angle = math.pi/4.5/2.0
311
# heading_angle = math.pi/2
312
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
313
# heading_angle = -50*math.pi/180.0
314
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
315
# heading_angle = 50*math.pi/180.0
316
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
317
# heading_angle = -math.pi/2
318
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
319
# heading_angle = 0.0
320
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
321
# heading_angle = (65*math.pi)/180.0
322
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
323
# heading_angle = (-60*math.pi)/180.0
324
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
325
# heading_angle = ((10-180)*math.pi)/180.0
326
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
327
# heading_angle = (-10*math.pi)/180.0
328
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
329
# heading_angle = (-60*math.pi)/180.0
330
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
331
# heading_angle = 0.0
332
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
333
# heading_angle = math.pi/2
334
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
335
# heading_angle = 0.0
336
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
337
# heading_angle = arc_angle*1.4
338
# for _ in range(5):
339
# heading_angle = reset_radian(heading_angle - 2*arc_angle)
340
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
341
# print(node_index)
342
# print(node_poses)
343
# with open(filename, 'w') as f:
344
# pickle.dump(node_poses, f)
345
346
347
# ##### script to generate 100-MAD #####
348
# filename = '100-MAD'
349
# swarm_size = 100
350
# node_poses = np.zeros((swarm_size, 2))
351
# node_index = 0
352
# arc_segments = 17
353
# arc_angle = math.pi/float(arc_segments)/2.0
354
# heading_angle = math.pi/2
355
# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)
356
# heading_angle = -45*math.pi/180.0
357
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
358
# heading_angle = 45*math.pi/180.0
359
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
360
# heading_angle = -math.pi/2
361
# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)
362
# heading_angle = 0.0
363
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
364
# heading_angle = 63*math.pi/180.0
365
# node_index = cal_next_node(node_poses, node_index, heading_angle, 12)
366
# heading_angle = -63*math.pi/180.0
367
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
368
# heading_angle = -math.pi
369
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
370
# heading_angle = (63-180)*math.pi/180.0
371
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
372
# heading_angle = 0.0
373
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
374
# heading_angle = -63*math.pi/180.0
375
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
376
# heading_angle = 0.0
377
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
378
# heading_angle = math.pi/2
379
# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)
380
# heading_angle = 0.0
381
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
382
# heading_angle = arc_angle
383
# for _ in range(arc_segments):
384
# heading_angle = reset_radian(heading_angle - 2*arc_angle)
385
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
386
# print(node_index)
387
# print(node_poses)
388
# with open(filename, 'w') as f:
389
# pickle.dump(node_poses, f)
390
391
392
##### script to generate 30-DIRL #####
393
# filename = '30-DIRL'
394
# swarm_size = 30
395
# node_poses = np.zeros((swarm_size, 2))
396
# node_index = 0
397
# heading_angle = math.pi/2
398
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
399
# heading_angle = 0.0
400
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
401
# heading_angle = -30*math.pi/180.0
402
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
403
# heading_angle = -math.pi/2.
404
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
405
# heading_angle = -(180-30)*math.pi/180.0
406
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
407
# heading_angle = 0.0
408
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
409
# heading_angle = math.pi/2
410
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
411
# heading_angle = 0.0
412
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
413
# heading_angle = -math.pi/2
414
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
415
# heading_angle = 0.0
416
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
417
# heading_angle = math.pi/2
418
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
419
# heading_angle = 0.0
420
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
421
# heading_angle = -15*math.pi/180.0
422
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
423
# heading_angle = -math.pi/2
424
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
425
# heading_angle = -math.pi
426
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
427
# heading_angle = -45*math.pi/180.0
428
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
429
# heading_angle = 0.0
430
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
431
# heading_angle = math.pi/2
432
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
433
# heading_angle = 0.0
434
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
435
# heading_angle = -math.pi/2
436
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
437
# heading_angle = 0.0
438
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
439
# print(node_index)
440
# print(node_poses)
441
# with open(filename, 'w') as f:
442
# pickle.dump(node_poses, f)
443
444
445
# ##### script to generate 100-DIRL #####
446
# filename = '100-DIRL'
447
# swarm_size = 100
448
# node_poses = np.zeros((swarm_size, 2))
449
# node_index = 0
450
# arc1_segments = 13
451
# arc1_angle = math.pi/float(arc1_segments)/2.0
452
# arc2_segments = 7
453
# arc2_angle = math.pi/float(arc2_segments)/2.0
454
# # letter 'D'
455
# heading_angle = math.pi/2
456
# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)
457
# heading_angle = 0.0
458
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
459
# heading_angle = arc1_angle
460
# for _ in range(arc1_segments):
461
# heading_angle = reset_radian(heading_angle - 2*arc1_angle)
462
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
463
# heading_angle = 0.0
464
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
465
# # letter 'I'
466
# heading_angle = math.pi/2
467
# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)
468
# heading_angle = (90-45)*math.pi/180.0
469
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
470
# heading_angle = (90+15)*math.pi/180.0
471
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
472
# heading_angle = 0.0
473
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
474
# heading_angle = (-90-15)*math.pi/180.0
475
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
476
# heading_angle = (-90+45)*math.pi/180.0
477
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
478
# heading_angle = -math.pi/2
479
# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)
480
# heading_angle = 0.0
481
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
482
# # letter 'R'
483
# heading_angle = math.pi/2
484
# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)
485
# heading_angle = 0.0
486
# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)
487
# heading_angle = arc2_angle
488
# for _ in range(arc2_segments):
489
# heading_angle = reset_radian(heading_angle - 2*arc2_angle)
490
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
491
# heading_angle = -math.pi
492
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
493
# heading_angle = -45*math.pi/180.0
494
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
495
# heading_angle = 0.0
496
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
497
# # letter 'L'
498
# heading_angle = math.pi/2
499
# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)
500
# heading_angle = 0.0
501
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
502
# heading_angle = -math.pi/2
503
# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)
504
# heading_angle = 0.0
505
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
506
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
507
# print(node_index)
508
# print(node_poses)
509
# with open(filename, 'w') as f:
510
# pickle.dump(node_poses, f)
511
512
513
# ##### script to generate 30-CWRU #####
514
# filename = '30-CWRU'
515
# swarm_size = 30
516
# node_poses = np.zeros((swarm_size, 2))
517
# node_index = 0
518
# # letter 'C'
519
# heading_angle = 165*math.pi/180
520
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
521
# heading_angle = -150*math.pi/180.0
522
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
523
# heading_angle = -90*math.pi/180
524
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
525
# heading_angle = -30*math.pi/180
526
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
527
# heading_angle = 15*math.pi/180
528
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
529
# heading_angle = -15*math.pi/180
530
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
531
# # letter 'W'
532
# heading_angle = (90+10)*math.pi/180
533
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
534
# heading_angle = -50*math.pi/180
535
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
536
# heading_angle = 50*math.pi/180
537
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
538
# heading_angle = -50*math.pi/180
539
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
540
# heading_angle = 50*math.pi/180
541
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
542
# heading_angle = (-90-10)*math.pi/180
543
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
544
# heading_angle = 0.0
545
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
546
# # letter 'R'
547
# heading_angle = math.pi/2
548
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
549
# heading_angle = 0.0
550
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
551
# heading_angle = -42*math.pi/180.0
552
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
553
# heading_angle = (-90-42)*math.pi/180.0
554
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
555
# heading_angle = -42*math.pi/180.0
556
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
557
# heading_angle = 0.0
558
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
559
# # letter 'U'
560
# heading_angle = math.pi/2
561
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
562
# heading_angle = (-90+20)*math.pi/180.0
563
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
564
# heading_angle = -math.pi/2
565
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
566
# heading_angle = 0.0
567
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
568
# heading_angle = math.pi/2
569
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
570
# print(node_index)
571
# print(node_poses)
572
# with open(filename, 'w') as f:
573
# pickle.dump(node_poses, f)
574
575
576
# ##### script to generate 100-CWRU #####
577
# filename = '100-CWRU'
578
# swarm_size = 100
579
# node_poses = np.zeros((swarm_size, 2))
580
# node_index = 0
581
# # letter 'C'
582
# arc1_segments = 15
583
# arc1_angle = math.pi*1.5/float(arc1_segments)/2.0
584
# heading_angle = 130*math.pi/180.0 - arc1_angle
585
# for _ in range(arc1_segments):
586
# heading_angle = reset_radian(heading_angle + 2*arc1_angle)
587
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
588
# heading_angle = -45*math.pi/180.0
589
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
590
# heading_angle = 0.0
591
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
592
# # letter 'W'
593
# heading_angle = math.pi/2
594
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
595
# heading_angle = 0.0
596
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
597
# heading_angle = -math.pi/2
598
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
599
# heading_angle = -30*math.pi/180.0
600
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
601
# heading_angle = 30*math.pi/180.0
602
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
603
# heading_angle = math.pi/2
604
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
605
# heading_angle = 0.0
606
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
607
# heading_angle = -math.pi/2
608
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
609
# heading_angle = -30*math.pi/180.0
610
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
611
# heading_angle = 30*math.pi/180.0
612
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
613
# heading_angle = math.pi/2
614
# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)
615
# heading_angle = 0.0
616
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
617
# heading_angle = -math.pi/2
618
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
619
# heading_angle = 0.0
620
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
621
# # letter 'R'
622
# heading_angle = math.pi/2
623
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
624
# heading_angle = 0.0
625
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
626
# arc2_segments = 6
627
# arc2_angle = math.pi/float(arc2_segments)/2.0
628
# heading_angle = arc2_angle
629
# for _ in range(arc2_segments):
630
# heading_angle = reset_radian(heading_angle - 2*arc2_angle)
631
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
632
# heading_angle = -math.pi
633
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
634
# heading_angle = -40*math.pi/180.0
635
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
636
# heading_angle = 0.0
637
# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)
638
# # letter 'U'
639
# heading_angle = math.pi/2
640
# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)
641
# heading_angle = 0.0
642
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
643
# heading_angle = -math.pi/2
644
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
645
# arc3_segments = 7
646
# arc3_angle = math.pi/float(arc3_segments)/2.0
647
# heading_angle = -math.pi/2 - arc3_angle
648
# for _ in range(arc3_segments):
649
# heading_angle = reset_radian(heading_angle + 2*arc3_angle)
650
# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)
651
# heading_angle = math.pi/2
652
# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)
653
# print(node_index)
654
# print(node_poses)
655
# with open(filename, 'w') as f:
656
# pickle.dump(node_poses, f)
657
658
659
660
pygame.init()
661
# find the right world and screen sizes
662
x_max, y_max = np.max(node_poses, axis=0)
663
x_min, y_min = np.min(node_poses, axis=0)
664
pixel_per_length = 30
665
world_size = (x_max - x_min + 2.0, y_max - y_min + 2.0)
666
screen_size = (int(world_size[0])*pixel_per_length, int(world_size[1])*pixel_per_length)
667
# convert node poses in the world to disp poses on screen
668
def cal_disp_poses():
669
poses_temp = np.zeros((swarm_size, 2))
670
# shift the loop to the middle of the world
671
middle = np.array([(x_max+x_min)/2.0, (y_max+y_min)/2.0])
672
for i in range(swarm_size):
673
poses_temp[i] = (node_poses[i] - middle +
674
np.array([world_size[0]/2.0, world_size[1]/2.0]))
675
# convert to display coordinates
676
poses_temp[:,0] = poses_temp[:,0] / world_size[0]
677
poses_temp[:,0] = poses_temp[:,0] * screen_size[0]
678
poses_temp[:,1] = poses_temp[:,1] / world_size[1]
679
poses_temp[:,1] = 1.0 - poses_temp[:,1]
680
poses_temp[:,1] = poses_temp[:,1] * screen_size[1]
681
return poses_temp.astype(int)
682
disp_poses = cal_disp_poses()
683
# draw the loop shape on pygame window
684
color_white = (255,255,255)
685
color_black = (0,0,0)
686
screen = pygame.display.set_mode(screen_size)
687
screen.fill(color_white)
688
for i in range(swarm_size):
689
pygame.draw.circle(screen, color_black, disp_poses[i], 5, 0)
690
for i in range(swarm_size-1):
691
pygame.draw.line(screen, color_black, disp_poses[i], disp_poses[i+1], 2)
692
pygame.display.update()
693
694
# # save the screen as image
695
# filepath = os.path.join('images',filename+'.png')
696
# pygame.image.save(screen, filepath)
697
698
raw_input("<Press ENTER to exit>")
699
700
701
702