Path: blob/master/curve-data/shape_gen_script.py
104 views
# script to generate files for the curve shapes1# each block of code generates one curve shape23# neon typeface reference: (Thanks, Emil!)4# http://fenotype.1001fonts.com/neon-fonts.html56import pickle7import os8import math9import pygame10import numpy as np1112# general function to reset radian angle to [-pi, pi)13def reset_radian(radian):14while radian >= math.pi:15radian = radian - 2*math.pi16while radian < -math.pi:17radian = radian + 2*math.pi18return radian1920# general function to calculate next position node along a heading direction21def cal_next_node(node_poses, index_curr, heading_angle, rep_times):22for _ in range(rep_times):23index_next = index_curr + 124x = node_poses[index_curr][0] + 1.0*math.cos(heading_angle)25y = node_poses[index_curr][1] + 1.0*math.sin(heading_angle)26node_poses[index_next] = np.array([x,y])27index_curr = index_next28return index_next2930# ##### script to generate 30-squarehelix #####31# filename = '30-squarehelix'32# swarm_size = 3033# node_poses = np.zeros((swarm_size, 2))34# node_index = 035# heading_angle = 0.036# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)37# heading_angle = math.pi/238# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)39# heading_angle = -math.pi40# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)41# heading_angle = -math.pi/242# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)43# heading_angle = 0.044# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)45# heading_angle = math.pi/246# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)47# heading_angle = -math.pi48# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)49# heading_angle = -math.pi/250# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)51# heading_angle = 0.052# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)53# heading_angle = math.pi/254# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)55# print(node_index)56# print(node_poses)57# with open(filename, 'w') as f:58# pickle.dump(node_poses, f)596061# ##### script to generate 100-squarehelix #####62# filename = '100-squarehelix'63# swarm_size = 10064# node_poses = np.zeros((swarm_size, 2))65# node_index = 066# heading_angle = 0.067# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)68# heading_angle = math.pi/269# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)70# heading_angle = -math.pi71# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)72# heading_angle = -math.pi/273# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)74# heading_angle = 0.075# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)76# heading_angle = math.pi/277# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)78# heading_angle = -math.pi79# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)80# heading_angle = -math.pi/281# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)82# heading_angle = 0.083# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)84# heading_angle = math.pi/285# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)86# heading_angle = -math.pi87# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)88# heading_angle = -math.pi/289# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)90# heading_angle = 0.091# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)92# heading_angle = math.pi/293# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)94# heading_angle = -math.pi95# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)96# heading_angle = -math.pi/297# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)98# heading_angle = 0.099# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)100# heading_angle = math.pi/2101# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)102# heading_angle = -math.pi103# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)104# print(node_index)105# print(node_poses)106# with open(filename, 'w') as f:107# pickle.dump(node_poses, f)108109110# ##### script to generate 30-ARM #####111# filename = '30-ARM'112# swarm_size = 30113# node_poses = np.zeros((swarm_size, 2))114# node_index = 0115# heading_angle = (65*math.pi)/180.0116# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)117# heading_angle = (-60*math.pi)/180.0118# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)119# heading_angle = ((10-180)*math.pi)/180.0120# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)121# heading_angle = (-10*math.pi)/180.0122# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)123# heading_angle = (-60*math.pi)/180.0124# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)125# heading_angle = 0.0126# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)127# heading_angle = math.pi/2.0128# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)129# heading_angle = 0.0130# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)131# heading_angle = (-45*math.pi)/180.0132# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)133# heading_angle = -math.pi/2.0134# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)135# heading_angle = -math.pi136# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)137# heading_angle = (-40*math.pi)/180.0138# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)139# heading_angle = 0.0140# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)141# heading_angle = math.pi/2.0142# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)143# heading_angle = (-50*math.pi)/180.0144# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)145# heading_angle = (50*math.pi)/180.0146# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)147# heading_angle = -math.pi/2148# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)149# print(node_index)150# print(node_poses)151# with open(filename, 'w') as f:152# pickle.dump(node_poses, f)153154155# ##### script to generate 100-ARM #####156# filename = '100-ARM'157# swarm_size = 100158# node_poses = np.zeros((swarm_size, 2))159# node_index = 0160# arc_angle = math.pi/7.0/2.0161# heading_angle = (65*math.pi)/180.0162# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)163# heading_angle = (-65*math.pi)/180.0164# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)165# heading_angle = -math.pi166# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)167# heading_angle = ((65-180)*math.pi)/180.0168# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)169# heading_angle = 0.0170# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)171# heading_angle = (-65*math.pi)/180.0172# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)173# heading_angle = 0.0174# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)175# heading_angle = math.pi/2.0176# node_index = cal_next_node(node_poses, node_index, heading_angle, 10)177# heading_angle = 0.0178# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)179# heading_angle = arc_angle180# for _ in range(7):181# heading_angle = reset_radian(heading_angle - 2*arc_angle)182# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)183# heading_angle = -math.pi184# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)185# heading_angle = (-43*math.pi)/180.0186# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)187# heading_angle = 0.0188# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)189# heading_angle = math.pi/2.0190# node_index = cal_next_node(node_poses, node_index, heading_angle, 10)191# heading_angle = (-50*math.pi)/180.0192# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)193# heading_angle = (50*math.pi)/180.0194# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)195# heading_angle = -math.pi/2196# node_index = cal_next_node(node_poses, node_index, heading_angle, 10)197# print(node_index)198# print(node_poses)199# with open(filename, 'w') as f:200# pickle.dump(node_poses, f)201202203# ##### script to generate 30-KID #####204# filename = '30-KID'205# swarm_size = 30206# node_poses = np.zeros((swarm_size, 2))207# node_index = 0208# arc_angle = math.pi/4.0/2.0*0.9209# heading_angle = math.pi/2210# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)211# heading_angle = 0.0212# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)213# heading_angle = -math.pi/2214# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)215# heading_angle = 30*math.pi/180.0216# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)217# heading_angle = reset_radian(heading_angle - math.pi/2)218# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)219# heading_angle = reset_radian(heading_angle - math.pi/2)220# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)221# heading_angle = -30*math.pi/180.0222# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)223# heading_angle = 0.0224# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)225# heading_angle = math.pi/2226# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)227# heading_angle = 0.0228# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)229# heading_angle = -math.pi/2230# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)231# heading_angle = 0.0232# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)233# heading_angle = math.pi/2234# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)235# heading_angle = 0.0236# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)237# heading_angle = arc_angle*0.5238# for _ in range(4):239# heading_angle = reset_radian(heading_angle - 2*arc_angle)240# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)241# print(node_index)242# print(node_poses)243# with open(filename, 'w') as f:244# pickle.dump(node_poses, f)245246247# ##### script to generate 100-KID #####248# filename = '100-KID'249# swarm_size = 100250# node_poses = np.zeros((swarm_size, 2))251# node_index = 0252# arc_segments = 17253# arc_angle = math.pi/float(arc_segments)/2.0254# heading_angle = math.pi/2255# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)256# heading_angle = 0.0257# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)258# heading_angle = -math.pi/2259# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)260# heading_angle = 40*math.pi/180.0261# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)262# heading_angle = reset_radian(heading_angle - math.pi/2)263# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)264# heading_angle = reset_radian(heading_angle - math.pi/2)265# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)266# heading_angle = -40*math.pi/180.0267# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)268# heading_angle = 0.0269# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)270# heading_angle = math.pi/2271# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)272# heading_angle = (90-30)*math.pi/180.0273# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)274# heading_angle = (90+30)*math.pi/180.0275# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)276# heading_angle = 15*math.pi/180.0277# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)278# heading_angle = -15*math.pi/180.0279# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)280# heading_angle = (-90-30)*math.pi/180.0281# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)282# heading_angle = (-90+30)*math.pi/180.0283# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)284# heading_angle = -math.pi/2285# node_index = cal_next_node(node_poses, node_index, heading_angle, 9)286# heading_angle = 0.0287# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)288# heading_angle = math.pi/2289# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)290# heading_angle = 0.0291# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)292# heading_angle = arc_angle293# for _ in range(arc_segments):294# heading_angle = reset_radian(heading_angle - 2*arc_angle)295# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)296# heading_angle = -math.pi297# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)298# print(node_index)299# print(node_poses)300# with open(filename, 'w') as f:301# pickle.dump(node_poses, f)302303304# ##### script to generate 30-MAD #####305# filename = '30-MAD'306# swarm_size = 30307# node_poses = np.zeros((swarm_size, 2))308# node_index = 0309# arc_angle = math.pi/4.5/2.0310# heading_angle = math.pi/2311# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)312# heading_angle = -50*math.pi/180.0313# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)314# heading_angle = 50*math.pi/180.0315# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)316# heading_angle = -math.pi/2317# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)318# heading_angle = 0.0319# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)320# heading_angle = (65*math.pi)/180.0321# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)322# heading_angle = (-60*math.pi)/180.0323# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)324# heading_angle = ((10-180)*math.pi)/180.0325# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)326# heading_angle = (-10*math.pi)/180.0327# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)328# heading_angle = (-60*math.pi)/180.0329# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)330# heading_angle = 0.0331# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)332# heading_angle = math.pi/2333# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)334# heading_angle = 0.0335# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)336# heading_angle = arc_angle*1.4337# for _ in range(5):338# heading_angle = reset_radian(heading_angle - 2*arc_angle)339# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)340# print(node_index)341# print(node_poses)342# with open(filename, 'w') as f:343# pickle.dump(node_poses, f)344345346# ##### script to generate 100-MAD #####347# filename = '100-MAD'348# swarm_size = 100349# node_poses = np.zeros((swarm_size, 2))350# node_index = 0351# arc_segments = 17352# arc_angle = math.pi/float(arc_segments)/2.0353# heading_angle = math.pi/2354# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)355# heading_angle = -45*math.pi/180.0356# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)357# heading_angle = 45*math.pi/180.0358# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)359# heading_angle = -math.pi/2360# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)361# heading_angle = 0.0362# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)363# heading_angle = 63*math.pi/180.0364# node_index = cal_next_node(node_poses, node_index, heading_angle, 12)365# heading_angle = -63*math.pi/180.0366# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)367# heading_angle = -math.pi368# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)369# heading_angle = (63-180)*math.pi/180.0370# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)371# heading_angle = 0.0372# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)373# heading_angle = -63*math.pi/180.0374# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)375# heading_angle = 0.0376# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)377# heading_angle = math.pi/2378# node_index = cal_next_node(node_poses, node_index, heading_angle, 11)379# heading_angle = 0.0380# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)381# heading_angle = arc_angle382# for _ in range(arc_segments):383# heading_angle = reset_radian(heading_angle - 2*arc_angle)384# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)385# print(node_index)386# print(node_poses)387# with open(filename, 'w') as f:388# pickle.dump(node_poses, f)389390391##### script to generate 30-DIRL #####392# filename = '30-DIRL'393# swarm_size = 30394# node_poses = np.zeros((swarm_size, 2))395# node_index = 0396# heading_angle = math.pi/2397# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)398# heading_angle = 0.0399# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)400# heading_angle = -30*math.pi/180.0401# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)402# heading_angle = -math.pi/2.403# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)404# heading_angle = -(180-30)*math.pi/180.0405# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)406# heading_angle = 0.0407# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)408# heading_angle = math.pi/2409# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)410# heading_angle = 0.0411# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)412# heading_angle = -math.pi/2413# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)414# heading_angle = 0.0415# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)416# heading_angle = math.pi/2417# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)418# heading_angle = 0.0419# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)420# heading_angle = -15*math.pi/180.0421# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)422# heading_angle = -math.pi/2423# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)424# heading_angle = -math.pi425# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)426# heading_angle = -45*math.pi/180.0427# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)428# heading_angle = 0.0429# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)430# heading_angle = math.pi/2431# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)432# heading_angle = 0.0433# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)434# heading_angle = -math.pi/2435# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)436# heading_angle = 0.0437# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)438# print(node_index)439# print(node_poses)440# with open(filename, 'w') as f:441# pickle.dump(node_poses, f)442443444# ##### script to generate 100-DIRL #####445# filename = '100-DIRL'446# swarm_size = 100447# node_poses = np.zeros((swarm_size, 2))448# node_index = 0449# arc1_segments = 13450# arc1_angle = math.pi/float(arc1_segments)/2.0451# arc2_segments = 7452# arc2_angle = math.pi/float(arc2_segments)/2.0453# # letter 'D'454# heading_angle = math.pi/2455# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)456# heading_angle = 0.0457# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)458# heading_angle = arc1_angle459# for _ in range(arc1_segments):460# heading_angle = reset_radian(heading_angle - 2*arc1_angle)461# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)462# heading_angle = 0.0463# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)464# # letter 'I'465# heading_angle = math.pi/2466# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)467# heading_angle = (90-45)*math.pi/180.0468# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)469# heading_angle = (90+15)*math.pi/180.0470# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)471# heading_angle = 0.0472# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)473# heading_angle = (-90-15)*math.pi/180.0474# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)475# heading_angle = (-90+45)*math.pi/180.0476# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)477# heading_angle = -math.pi/2478# node_index = cal_next_node(node_poses, node_index, heading_angle, 7)479# heading_angle = 0.0480# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)481# # letter 'R'482# heading_angle = math.pi/2483# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)484# heading_angle = 0.0485# node_index = cal_next_node(node_poses, node_index, heading_angle, 3)486# heading_angle = arc2_angle487# for _ in range(arc2_segments):488# heading_angle = reset_radian(heading_angle - 2*arc2_angle)489# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)490# heading_angle = -math.pi491# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)492# heading_angle = -45*math.pi/180.0493# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)494# heading_angle = 0.0495# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)496# # letter 'L'497# heading_angle = math.pi/2498# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)499# heading_angle = 0.0500# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)501# heading_angle = -math.pi/2502# node_index = cal_next_node(node_poses, node_index, heading_angle, 8)503# heading_angle = 0.0504# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)505# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)506# print(node_index)507# print(node_poses)508# with open(filename, 'w') as f:509# pickle.dump(node_poses, f)510511512# ##### script to generate 30-CWRU #####513# filename = '30-CWRU'514# swarm_size = 30515# node_poses = np.zeros((swarm_size, 2))516# node_index = 0517# # letter 'C'518# heading_angle = 165*math.pi/180519# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)520# heading_angle = -150*math.pi/180.0521# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)522# heading_angle = -90*math.pi/180523# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)524# heading_angle = -30*math.pi/180525# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)526# heading_angle = 15*math.pi/180527# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)528# heading_angle = -15*math.pi/180529# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)530# # letter 'W'531# heading_angle = (90+10)*math.pi/180532# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)533# heading_angle = -50*math.pi/180534# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)535# heading_angle = 50*math.pi/180536# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)537# heading_angle = -50*math.pi/180538# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)539# heading_angle = 50*math.pi/180540# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)541# heading_angle = (-90-10)*math.pi/180542# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)543# heading_angle = 0.0544# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)545# # letter 'R'546# heading_angle = math.pi/2547# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)548# heading_angle = 0.0549# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)550# heading_angle = -42*math.pi/180.0551# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)552# heading_angle = (-90-42)*math.pi/180.0553# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)554# heading_angle = -42*math.pi/180.0555# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)556# heading_angle = 0.0557# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)558# # letter 'U'559# heading_angle = math.pi/2560# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)561# heading_angle = (-90+20)*math.pi/180.0562# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)563# heading_angle = -math.pi/2564# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)565# heading_angle = 0.0566# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)567# heading_angle = math.pi/2568# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)569# print(node_index)570# print(node_poses)571# with open(filename, 'w') as f:572# pickle.dump(node_poses, f)573574575# ##### script to generate 100-CWRU #####576# filename = '100-CWRU'577# swarm_size = 100578# node_poses = np.zeros((swarm_size, 2))579# node_index = 0580# # letter 'C'581# arc1_segments = 15582# arc1_angle = math.pi*1.5/float(arc1_segments)/2.0583# heading_angle = 130*math.pi/180.0 - arc1_angle584# for _ in range(arc1_segments):585# heading_angle = reset_radian(heading_angle + 2*arc1_angle)586# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)587# heading_angle = -45*math.pi/180.0588# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)589# heading_angle = 0.0590# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)591# # letter 'W'592# heading_angle = math.pi/2593# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)594# heading_angle = 0.0595# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)596# heading_angle = -math.pi/2597# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)598# heading_angle = -30*math.pi/180.0599# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)600# heading_angle = 30*math.pi/180.0601# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)602# heading_angle = math.pi/2603# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)604# heading_angle = 0.0605# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)606# heading_angle = -math.pi/2607# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)608# heading_angle = -30*math.pi/180.0609# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)610# heading_angle = 30*math.pi/180.0611# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)612# heading_angle = math.pi/2613# node_index = cal_next_node(node_poses, node_index, heading_angle, 5)614# heading_angle = 0.0615# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)616# heading_angle = -math.pi/2617# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)618# heading_angle = 0.0619# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)620# # letter 'R'621# heading_angle = math.pi/2622# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)623# heading_angle = 0.0624# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)625# arc2_segments = 6626# arc2_angle = math.pi/float(arc2_segments)/2.0627# heading_angle = arc2_angle628# for _ in range(arc2_segments):629# heading_angle = reset_radian(heading_angle - 2*arc2_angle)630# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)631# heading_angle = -math.pi632# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)633# heading_angle = -40*math.pi/180.0634# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)635# heading_angle = 0.0636# node_index = cal_next_node(node_poses, node_index, heading_angle, 2)637# # letter 'U'638# heading_angle = math.pi/2639# node_index = cal_next_node(node_poses, node_index, heading_angle, 6)640# heading_angle = 0.0641# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)642# heading_angle = -math.pi/2643# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)644# arc3_segments = 7645# arc3_angle = math.pi/float(arc3_segments)/2.0646# heading_angle = -math.pi/2 - arc3_angle647# for _ in range(arc3_segments):648# heading_angle = reset_radian(heading_angle + 2*arc3_angle)649# node_index = cal_next_node(node_poses, node_index, heading_angle, 1)650# heading_angle = math.pi/2651# node_index = cal_next_node(node_poses, node_index, heading_angle, 4)652# print(node_index)653# print(node_poses)654# with open(filename, 'w') as f:655# pickle.dump(node_poses, f)656657658659pygame.init()660# find the right world and screen sizes661x_max, y_max = np.max(node_poses, axis=0)662x_min, y_min = np.min(node_poses, axis=0)663pixel_per_length = 30664world_size = (x_max - x_min + 2.0, y_max - y_min + 2.0)665screen_size = (int(world_size[0])*pixel_per_length, int(world_size[1])*pixel_per_length)666# convert node poses in the world to disp poses on screen667def cal_disp_poses():668poses_temp = np.zeros((swarm_size, 2))669# shift the loop to the middle of the world670middle = np.array([(x_max+x_min)/2.0, (y_max+y_min)/2.0])671for i in range(swarm_size):672poses_temp[i] = (node_poses[i] - middle +673np.array([world_size[0]/2.0, world_size[1]/2.0]))674# convert to display coordinates675poses_temp[:,0] = poses_temp[:,0] / world_size[0]676poses_temp[:,0] = poses_temp[:,0] * screen_size[0]677poses_temp[:,1] = poses_temp[:,1] / world_size[1]678poses_temp[:,1] = 1.0 - poses_temp[:,1]679poses_temp[:,1] = poses_temp[:,1] * screen_size[1]680return poses_temp.astype(int)681disp_poses = cal_disp_poses()682# draw the loop shape on pygame window683color_white = (255,255,255)684color_black = (0,0,0)685screen = pygame.display.set_mode(screen_size)686screen.fill(color_white)687for i in range(swarm_size):688pygame.draw.circle(screen, color_black, disp_poses[i], 5, 0)689for i in range(swarm_size-1):690pygame.draw.line(screen, color_black, disp_poses[i], disp_poses[i+1], 2)691pygame.display.update()692693# # save the screen as image694# filepath = os.path.join('images',filename+'.png')695# pygame.image.save(screen, filepath)696697raw_input("<Press ENTER to exit>")698699700701702