flash on 2016-8-18

by mutantleg
♥0 | Line 91 | Modified 2016-08-18 04:22:04 | 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/SOHt
 */

package {
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            vecVert = new Vector.<xVert>(0, false);
            var a:xVert; var i:int;
            a = new xVert(); vecVert.push(a); a.cx = 100; a.cy =50;
            a = new xVert(); vecVert.push(a); a.cx = 200; a.cy =60;
            a = new xVert(); vecVert.push(a); a.cx = 220; a.cy =160;
            a = new xVert(); vecVert.push(a); a.cx = 320; a.cy =180;
            
            stage.addEventListener(MouseEvent.CLICK, onClick);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
     
         public var vecVert:Vector.<xVert>;
         
         public function onClick(e:MouseEvent):void
         {
             r0 = Math.random()*70 + 10;
             r1 = Math.random()*70 + 10;
             r2 = Math.random()*70 + 10;
             cx = Math.random()*200+100;
             cy = Math.random()*200+100;
         }//onclick
         
         public var r0:Number = 50;
         public var r1:Number = 50;
         public var r2:Number = 50;
         
         public function distCon(a:xVert, b:xVert, r:Number, t:Number=1.0):void
         {
           var mag:Number;      var dx:Number; var dy:Number;
           dx = a.cx-b.cx;           dy = a.cy-b.cy;
           mag = Math.sqrt(dx*dx+dy*dy);
           if (mag ==0) { mag =0.0001; }
           dx/=mag; dy/=mag;
           r = r - mag; r*=0.5*t;
           a.cx += dx*r;      a.cy += dy*r;
           b.cx += dx*-r;     b.cy += dy*-r;
           graphics.moveTo(a.cx,a.cy);
           graphics.lineTo(b.cx,b.cy);
         }//distcon
         
         public function lineCon(a:xVert, b:xVert, c:xVert, r:Number, t:Number):void
         {
             var ta:Number; var nx:Number; var ny:Number;
             ta = Math.atan2(b.cy-a.cy, b.cx-a.cx);
             ta+=1.57;
             nx = Math.cos(ta);
             ny = Math.sin(ta);
             var d:Number;
              d = (c.cx-a.cx)*nx + (c.cy-a.cy)*ny;
              if (d < r) 
              {
                  r -= d;
                   c.cx += nx*r;
                   c.cy += ny*r;
                   
              }
             
             /*
           graphics.moveTo(a.cx,a.cy);
           graphics.lineTo(b.cx,b.cy);
           graphics.moveTo(a.cx,a.cy);
           graphics.lineTo(a.cx+nx*8,a.cy+ny*8);
           
           graphics.drawCircle(c.cx, c.cy,16);
             */
         }//linecon
         
         public var cx:Number = 235;
         public var cy:Number = 235;
       
       public function onEnter(e:Event):void
       {
            graphics.clear();
            graphics.lineStyle(2, 0);
 
             a = vecVert[0]; a.cx = cx; a.cy= cy;
             a = vecVert[3]; a.cx=stage.mouseX; a.cy=stage.mouseY;         

            graphics.lineStyle();
            distCon(vecVert[0], vecVert[3], r0+r1+r2, 1.0);       

            graphics.lineStyle(2, 0);
    
          for (i=0;i<8;i+=1)
          {
             a = vecVert[0]; a.cx = cx; a.cy = cy;
            distCon(vecVert[0], vecVert[1], r0, 1/8);       
            distCon(vecVert[1], vecVert[2], r1, 1/8);       
            distCon(vecVert[2], vecVert[3], r2, 1/8);      
            lineCon(vecVert[0], vecVert[2], vecVert[1], 16, 1/8); 
          } //nexti
           
           var i:int; var num:int; var a:xVert;
           num = vecVert.length;
           for (i=0;i<num;i+=1)
           {
             a = vecVert[i];
             graphics.drawCircle(a.cx, a.cy, 8);  
           }//nexti
 
           
       }//onenter 
        
    }//classend
}

internal class xVert 
{
    public var cx:Number = 0;
    public var cy:Number = 0;
}//xvert