flash on 2016-3-2

by mutantleg
♥0 | Line 94 | Modified 2016-03-02 05:32:51 | 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/0oyK
 */

package {
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

            var b:xLine;            
            var ax:Number; var ay:Number;
            var nx:Number; var ny:Number;
            var t:Number;
            var i:int; var num:int; var a:xLine;
            var ta:Number; var tb:Number; var d:Number;

            
            graphics.clear();
            graphics.lineStyle(2,0);
            
            vecLine = new Vector.<xLine>(0,false);
            num = 32;
            
            for (i=0;i<num;i+=1)
            {
              ta = Math.random()*6.28;

              a = new xLine();
               a.x0 = Math.random()*465;
               a.y0 = Math.random()*465;
                 a.y0 = Math.random()*250 + 130;
               a.x1 = a.x0 + Math.cos(ta)*128;  
               a.y1 = a.y0 + Math.sin(ta)*128;
               a.nx = Math.sin(ta);
               a.ny = -Math.cos(ta);  
              vecLine.push(a);    
                drawLine(a);
            }//nexti

            ax=230; ay=230;
            nx =0;ny=1;
            graphics.drawCircle(ax,ay, 8);
            graphics.moveTo(ax+ny*500,ay+nx*-500);
            graphics.lineTo(ax+ny*-500,ay+nx*500);
            graphics.moveTo(ax+nx*16,ay+ny*64);
            graphics.lineTo(ax,ay);            
            
            for (i=0;i<num;i+=1)
            {
              a = vecLine[i];
              t = cutLine(a,ax,ay,nx,ny);
              if (t <= 0) { graphics.lineStyle(4,0xFF); drawLine(a); continue; }
              if (t >= 1) { graphics.lineStyle(4,0xFF0000); drawLine(a); continue; }
              ta = (a.x0-ax)*nx + (a.y0-ay) * ny;

              b = new xLine();
              b.copyLine(a);
            
              if (ta < 0)
              {
               a.x0 += (a.x1-a.x0)*t;
               a.y0 += (a.y1-a.y0)*t;
               t=1-t;
                b.x1 += (b.x0-b.x1)*t;
                b.y1 += (b.y0-b.y1)*t;                  
           
              }
              else
              {
               b.x0 += (b.x1-b.x0)*t;
               b.y0 += (b.y1-b.y0)*t;
               t=1-t;
                a.x1 += (a.x0-a.x1)*t;
                a.y1 += (a.y0-a.y1)*t;                  
              } 
              
              graphics.lineStyle(4,0x00FF00); drawLine(b);
              graphics.lineStyle(4,0x00FFFF); drawLine(a);
              
            }//nexti
            
            
            
        }//ctor
        
        public var vecLine:Vector.<xLine>;

       public function cutLine(a:xLine, ax:Number, ay:Number, nx:Number, ny:Number):Number
        {   var ta:Number; var tb:Number; 
            ta = (a.x0-ax)*nx + (a.y0-ay) * ny;    tb = (a.x1-ax)*nx + (a.y1-ay) * ny;
            if (ta < 0 && tb < 0) { return 0; }  if (ta > 0 && tb > 0) { return 1; }
            return  ta / ( (a.x0-a.x1)*nx + (a.y0-a.y1)* ny);
        }//cutline
        
        public function drawLine(a:xLine):void
        {
            var ax:Number; var ay:Number;
            graphics.moveTo(a.x0,a.y0);
            graphics.lineTo(a.x1,a.y1);
            ax = a.x0 + (a.x1-a.x0)*0.5;
            ay = a.y0 + (a.y1-a.y0)*0.5;
            graphics.moveTo(ax,ay);
            graphics.lineTo(ax+a.nx*8,ay+a.ny*8);
            
        }//drawline
        
        
    }//classend
}

internal class xLine
{
    public var x0:Number = 0;
    public var y0:Number = 0;
    public var x1:Number = 0;
    public var y1:Number = 0;
    
    public var nx:Number = 0;
    public var ny:Number = 0;
    
    public function copyLine(a:xLine):void
    {x0=a.x0;y0=a.y0;x1=a.x1;y1=a.y1;nx=a.nx;ny=a.ny; }
    
}//xline