flash on 2013-1-29

by mutantleg
♥0 | Line 140 | Modified 2013-01-29 22:17:14 | MIT License
play

ActionScript3 source code

/**
 * Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/x1LE
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        
        public var vecNode:Vector.<wNode>;
        public var vecVert:Vector.<wVert>;
        
        
        public function FlashTest() 
        {
            var a:wNode;
            
            
            vecNode = new Vector.<wNode>(0,false);
            
            
            a = new wNode();
            a.cx+=200;
            a.cy+=200;
            a.mx = a.cx;
            a.my = a.cy;
            vecNode.push(a);
            
            a = new wNode();
            a.cx += 200;
            a.cy = 60 + 200;
            a.ang = 1.57;
            a.mx = a.cx;
            a.my = a.cy;
            a.mang = a.ang;
            vecNode.push(a);
            
            a = new wNode();
            a.cx =  200;
            a.cy = 120 + 200;
            a.ang = 0.71;
            a.mx = a.cx;
            a.my = a.cy;
            a.mang = a.ang;
            vecNode.push(a);
            
            vecVert = new Vector.<wVert>(0,false);
            
            var i:int;
            var w:wVert;
            
            for (i = 0; i < 32; i++)
            {
                w = new wVert();
                w.cx = Math.random()*50 + 200 - 25;
                w.cy = Math.random()*200 + 200 - 25;
                w.par = getClose(w.cx,w.cy);
                w.tx = w.cx;
                w.ty = w.cy;
                vecVert.push(w);
            }//nexti
            
            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public function getDist(dx:Number, dy:Number):Number
        { return Math.sqrt(dx*dx + dy*dy); }
        
        public function getClose(ax:Number, ay:Number):wNode
        {
         var i:int;
         var num:int;   
         var ret:wNode;
         var b:wNode;
         var dist:Number;
         var d:Number;
         
         num = vecNode.length;
            
         ret = vecNode[0];   
         dist = getDist(ax-ret.cx, ay -ret.cy );
            
         for (i = 1; i < num; i++)
         {
             b = vecNode[i];
             d = getDist(ax-b.cx, ay - b.cy);
             if (d > dist) { continue;}
             
             ret = b;
             dist = d;
             
             
         }//nexti
            
         return ret;   
        }//getclose
        
      
        
        
        public function onEnter(e:Event):void
        {
            var i:int;
            var num:int;
            var a:wNode;
            var v:wVert;
           
            graphics.clear();
            graphics.lineStyle(1,0);
            
            num = vecNode.length;
            
            a = vecNode[0];
            a.ang += 0.02;
          
            a = vecNode[1];
            a.ang -= 0.02;
            a = vecNode[2];
            a.ang += 0.04;
          
            
            for (i = 0; i < num; i++)
            {
                a = vecNode[i];
                graphics.drawCircle(a.cx, a.cy, 4);
                graphics.moveTo(a.cx,a.cy);
                graphics.lineTo(a.cx+Math.cos(a.ang)*a.size, a.cy+Math.sin(a.ang)*a.size);
                
            }//nexti
            
            num = vecVert.length;
            for (i = 0; i < num; i++)
            {
                v = vecVert[i];
                
                graphics.drawCircle(v.cx, v.cy, 2);
                
            }//nexti
            
            graphics.lineStyle(1, 0xFF0000);
            
            var kx:Number;
            var ky:Number;
            var ka:Number;
            var jx:Number;
            var jy:Number;
            
            for (i = 0; i < num; i++)
            {
              v = vecVert[i];
              a = v.par;  
              
              kx = a.cx - a.mx;
              ky = a.cy - a.my;
              ka = a.ang - a.mang;
            
                jx = v.cx - a.mx;
                jy = v.cy - a.my;
            
              v.tx = jx * Math.cos(ka) - jy*Math.sin(ka) + kx;
              v.ty = jx * Math.sin(ka) + jy*Math.cos(ka) + ky;
              
              v.tx += a.mx;
              v.ty += a.my;
              
            //  v.tx = v.cx + kx;
           //   v.ty = v.cy + ky;
              
                
              graphics.drawCircle(v.tx, v.ty, 2);  
                
                
            }//nexti
            
            
            
        }//onenter
        
    }//classend
}

internal class wVert
{
    public var cx:Number = 0;
    public var cy:Number = 0;
    
    public var par:wNode = null;
    
    public var tx:Number = 0;
    public var ty:Number = 0;
    
}//vert

internal class wNode
{
    public var cx:Number = 0;
    public var cy:Number = 0;
    public var ang:Number = 0;
    public var size:Number = 16;
    
    public var mx:Number = 0;
    public var my:Number = 0;
    public var mang:Number = 0;
    
    
}//wnode