/* MoveSwarm blprnt@blprnt.com October, 2005 This class is the classic movement implementation of the Particle Swarm Algorithm, where the particles move towards a specific point on the screen. */ import flash.filters.*; class pswarm.MoveSwarm extends pswarm.Swarm { var target_array:Array; var swarm_array:Array; var gbest_array:Array; var best_obj:Object; var oldpos_array:Array; var color_num:Number; public function checkFitness(particle_mc:MovieClip) :Array{ var dx:Number = target_array[0] - particle_mc._x; var dy:Number = target_array[1] - particle_mc._y; var f:Number = (dx*dx + dy*dy); return([f, particle_mc._x, particle_mc._y]); }; public function setTarget() :Void { }; public function init(particle_mc) :Void { particle_mc.vx = particle_mc.vy = 0; particle_mc.oldpos_array = [particle_mc._x, particle_mc._y]; }; public function swarmAction(particle_mc) :Void { var pbest = best_obj[particle_mc]; particle_mc.vx += (2 * Math.random() * (pbest[1] - particle_mc._x)); particle_mc.vx += (4 * Math.random() * (gbest_array[1] - particle_mc._x)); particle_mc.vy += (2 * Math.random() * (pbest[2] - particle_mc._y)); particle_mc.vy += (4 * Math.random() * (gbest_array[2] - particle_mc._y)); particle_mc._x += particle_mc.vx/500; particle_mc._y += particle_mc.vy/500; particle_mc.vx *= 0.995; particle_mc.vy *= 0.995; var r = Math.atan2(particle_mc.vy,particle_mc.vx); var blur:BlurFilter = new BlurFilter(particle_mc.vx/400 * Math.cos(r) ,particle_mc.vy/400 * Math.sin(r),1); particle_mc.filters = [blur]; var canvas_mc = _root.canvas_mc; canvas_mc.moveTo(particle_mc.oldpos_array[0], particle_mc.oldpos_array[1]); canvas_mc.lineTo(particle_mc._x, particle_mc._y); particle_mc.oldpos_array = [particle_mc._x, particle_mc._y]; }; };