QC4DC4D6..'56E ?A@?ffffff?QR?=p =BC?D@jVX\0S ?ə???!`?ə?ABhHZ,MAXON CINEMA 4D 11.514 Ualias2ABʈ'q:MAXON CINEMA 4D Studio 12.016 ]alias2 agoal1galias2  P ;<  agoal1g"alias23 agoal1halias2   ;@ G"Particle Geometryd14???235All678"jk@?l@Zmno xuvwq@Ir@Is@It@I@ !`@$ agoal1ialias2   ; *Cone ?W@ agoal1@7alias2   ; ????!`@ !`???????????????"@$? agoal1@,(By Jan C.-Frischmuthalias2   ; Null?????????"@$? agoal1 ł*smart-page.net - 2010alias2   ;@ Null?????????"@Q<?@@WZXY@@[\@@@Bcbdf@d i@j?????^_ agoal1Palias2   ;  Camera ,F&f F'alias2alias2 agoal1@alias2   ;  @Q????սߘU?Gq-6>[z??????"@$? agoal1 Targetalias2   ; NullŤ"@s-͢y?????????"@$? agoal1P] Pythonalias2   ; Null ;#Boids for Python by smart-page.net import c4d import math import random #environment minx = -2000 maxx = 2000 miny = 1000 maxy = 3000 minz = -2000 maxz = 2000 #boids params boids_number = 100 target_maxspeed = 60 boid_maxspeed = 50 boid_distance = 200 frame = None rand = None target = c4d.Vector() targetvec = c4d.Vector(0) bpos = None bvel = None def main(): global tp global doc global frame global bpos global bvel frame = doc.GetTime().GetFrame(doc.GetFps()) if frame==0: tp.FreeAllParticles() tp.AllocParticles(boids_number) lt = c4d.BaseTime(1000) bpos = [] bvel = [] for i in tp.GetParticles(): tp.SetLife(i, lt) bpos.append(tp.Position(i)) bvel.append(tp.Velocity(i)) moveboids(i) set_target() movetarget() def set_target(): v = c4d.Vector() for x in bpos: v +=x v = v / len(tp.GetParticles()) op[c4d.ID_USERDATA, 1].SetRelPos(v) def moveboids(c): bvel[c] += rule1(c) + rule2(c) + rule3(c) + rule4(c) bvel[c] = limitspeed(bvel[c], boid_maxspeed) tp.SetVelocity(c, bvel[c]) vel=bvel[c].GetNormalized() side = c4d.Vector(c4d.Vector(0,1,0).Cross(vel)).GetNormalized() up = vel.Cross(side) m = c4d.Matrix(c4d.Vector(0), side, up, vel) tp.SetAlignment(c, m) tp.SetPosition(c, bpos[c] + bvel[c]) def rule1(c): v = c4d.Vector() for i, b_pos in enumerate(bpos): boid_pos = bpos[c] if b_pos == boid_pos: continue v += boid_pos - b_pos v /= len(tp.GetParticles()) return (bvel[c] -v) / 100 def rule2(c): d = 0 k = 0 for i, b_pos in enumerate(bpos): if (b_pos - bpos[c]).GetLength() < boid_distance: k += 1 pos = bpos[c] dif = (pos - b_pos) if dif.GetLength() >= 0: dif = math.sqrt(boid_distance) - dif elif dif.GetLength() < 0: dif = -math.sqrt(boid_distance) - dif d += dif if k == 0: return return bvel[c] - d / 4 def rule3(c): v = c4d.Vector() for i in bpos: v += bvel[c] v /= len(tp.GetParticles()) return bvel[c] + v / 30 def rule4(c): return (target - bpos[c]) / 100 def movetarget(): global target global targetvec rand = random.Random(1) rand.seed(frame) if target.x < minx or target.y < miny or target.z < minz: targetvec.x += rand.random() * target_maxspeed targetvec.y += rand.random() * target_maxspeed targetvec.z += rand.random() * target_maxspeed if target.x > maxx or target.y > maxy or target.z > maxz: targetvec.x -= rand.random() * target_maxspeed targetvec.y -= rand.random() * target_maxspeed targetvec.z -= rand.random() * target_maxspeed targetvec = limitspeed(targetvec, target_maxspeed) target += targetvec def limitspeed(v, speed): if v.GetLength() > speed: v = v*(speed / v.GetLength()) return vF'alias2hudc 64bit agoal1DataData g D&alias2   ;  Python; agoal1P%alias2   ; FXPresso agoal1alias2   ; FGvNodeMasterdalias20alias26 ''N N!viwh?fgj@Xk@0l@Xm@@n@Xo@@p@0q@(r@0s@(t@0u@(de agoal1alias2   ; Fde???F XGroupalias23viwh?fgj@Nk@0l@Nm@@n@No@@p@0q@(r@<s@>t@<u@>dO@e. agoal10alias2   ; Fde???d efghGijG P Passdd14???235All678@$alias2iG viwh?fgj@Pk@0l@c m@Hn@Po@@p@0q@(r@<s@>t@<u@>d@[e< agoal16alias2   ; Fde???B@defghGijG PShape@$??????@$???  ~@t@nt@Rv?UU`rx?@t@n????@>?PbM?????L@$@!`?!`!`?'&H??PQ[\RSRUVWXZ?~@`}|ZX@Y@[\]^_`suo[ lcms mntrRGB XYZ  acspAPPL-lcms desc@cprtHNwtptchad,rXYZbXYZgXYZrTRC gTRC4 bTRCT chrmt$mluc enUS$sRGB IEC61966-2.1mluc enUS2No copyright, use freelyXYZ -sf32 J*XYZ o8XYZ $XYZ bparaff Y [paraff Y [paraff Y [chrmT{L&f\TF'(a??}@ agoal1Galias2  P ; +  alias2  P ; , ?陙??陙?6??  ???(?@Yd  "#$%&  )+*?,./0?ٙ??陙?陙?陙??p??ə?ə?ə                           agoal14alias2  U ; @@А}@@B?@@WZXY@@[\@@@Bcbdf@d@@@r????!`W@alias2Palias2?陙??陙?6??  ???(?@Yd  "#$%&  )+*?,./0?ٙ??陙?陙?陙??p??ə?ə?ə                           alias2  U ; @@А}@@B?@@WZXY@@[\@@@Bcbdf@d????!`W@alias2alias2?陙??陙?6??  ???(?@Yd  "#$%&  )+*?,./0?ٙ??陙?陙?陙??p??ə?ə?ə                           alias2  U ; @@А}@@B?@@WZXY@@[\@@@Bcbdf@d????!`W@alias2alias2?陙??陙?6??  ???(?@Yd  "#$%&  )+*?,./0?ٙ??陙?陙?陙??p??ə?ə?ə                           alias2  U ; @@А}@@B?@@WZXY@@[\@@@Bcbdf@d????!`W@alias2alias2   -  alias2  Q ; q] TUHOOK alias2  Q ; "Scene Hook Helper alias2  Q ; \ACMerge Hook alias2 Ԛ Ќ  (ArchiExchangeCADHook alias2  Q ; m&SLA wave scene hook52346 agoal1P4alias2  Q ; G$Thinking Particles 14???235All678 agoal13Allalias2  Q ; GParticle Group''@Y'?'' '%?'&@@'/?'C''?'9':';'<'=+5@'M'N'O'P? agoal1alias2  Q ;  dDynamics alias2  Q ; ug alias2  Q ;  MoGraphSceneHook alias2  Q ;  PLKHUD alias2 Ԛ Ќ c$RenderManager Hook alias2  P ; (Sound Scrubbing Hook alias2  P ; "BaseSettings Hook  agoal1 2alias2  P ; SBSettings'''''%'alias2g''&  @a @q')'+u2u0u1u3 alias2  P ; SBSettings'''''%'alias2g''&')'+u2u0u1u3 alias2  P ; SBSettings'''''%'alias2g''&')'+u2u0u1u3 alias2  P ; SBSettings'''''%'alias2g''&')'+u2u0u1u3  alias2  P ; \+TLSettings'''''%'alias2''&')'+N @N!N"@.N#@G@.N(?@.N0?N&,N1N'ZBN*N)?N2N3TN/N.N, alias2  P ; \+TLSettings'''''%'alias2''&')'+N @N!N"@.N#@G@.N(?@.N0?N&,N1N'ZBN*N)?N2N3TN/N.N, alias2  P ; \+TLSettings'''''%'alias2''&')'+N @N!N"@.N#@G@.N(?@.N0?N&,N1N'ZBN*N)?N2N3TN/N.N, alias2  P ; \+TLSettings'''''%'alias2''&')'+N @N!N"@.N#@G@.N(?@.N0?N&,N1N'ZBN*N)?N2N3TN/N.N,# Objectsalias2# Cameraalias2*# Conealias2# Null Objectalias2G# "Particle Geometryalias2> Tagsalias2> Phongalias2> Python Tagalias2,> Targetalias2F> XPressoalias2 Render Settingsalias2 Layersalias2 (Undef. Layer)alias2 Scene Hookalias2F Xpresso Nodesalias2GF P Passalias2GF PShapealias2FF XGroupalias2 alias2  P ; CAManagerHook alias2  P ; "HairHighlightHook alias2  P ; Doodle Hook alias2 Ԛ Ќ ubAnaglyph alias2  P ; m$ViewportExtHookHUD  Q0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&''Q0P@|@~ ()*+  .A/A,A-A?D& alias2  ?陙?陙?陙 ?ə?ə?ə!??p =q?"#$%'FPS : 14.7'=''%'&''Q0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&''Q0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&''Q0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&''Q0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&''Q0P@@(),*+  .A/A,A-A?D& alias2  ,?陙?陙?陙 ?ə?ə?ə!??p =q?"#$%'Perspective'>''%'&''Q0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&''Q0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&'' Q0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&'' A0PAA()*+  .A/A,A-A?D& alias2   !"#$%''''%'&'' alias2  P ;  N0ViewportExtHookhighlight alias2  P ;  O MeasureSceneHookokay??,C:\Users\Hal\Documents alias2  P ; G Sniper alias2  P ; F GvHook@<@?@Y??@Y??@Y??@Y??cd}kCJOI)zRʜz9p CkbædXK4&-$B Qď@tU=P)kP rOnn)#FG jIa,i˖^( hnJ!_gi?^XTX:xh"jaT՘"`{m MCL[U+ϭSq@ zV~ R@7GG>!^p$ l] q)dS9Sij'IîEoQt?ř6@nlhx)Yu& Wh3N k~m Bų@!{\sxrȋ0Pd^|F<(/z*SA[!ω)Q"U|L?pw2l \^B=~ݾ"Z4s K5-J!tHm:C|vn᪌aX }2݊Gp ^#xbÓNwDO8$c !~#l=?M><ݹ6+ֶ/-sE`HM:qQ*Q֮eUk,[GoŬ\4tyú+zG{e%=F֨Fa5~^#].U~M]\ ؘ%`ǀUxt;c~Ue %YJ, ,pBJF\Csw_"; q,ϦI~>ڳ}[?d+_T؍Dgwɜ{UǪS$M/1WxD*L#6~2!^׀.QqS>}<th AZg'(ba=2σn:U_ TCֆG"4|m%#FE-^&/ /d4.nܡW/EU2]tnT!j7'誢lY0|^QHySm]leyФ݁2˚ym++:} c=,囂O;U&@s V _ 8n" Ht3[/D6A&]&{SBr`7 T_Nm`Ml<zP'2'3'4'5'7?'9I2q?\q3@ !`54????z@ZC?!`@$@ "?!`JH?z@NOP @                        @$ ? ?W@ ?tz@B?Ȣ@Q??? alias2  <%1 ?? X S<= LM?yst@Y??e ??q ?qy`?q ?+?UU`??q ?ܑ@??A?UU`?&?@??q ??  QR?ST?N N!N#N$N%N&N"N/Dqqtool-sel?RRtool-sel@V@?ə?陙D2 X