flash on 2013-1-21

by mutantleg
♥0 | Line 143 | Modified 2013-01-22 00:20:50 | 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/40Ku
 */

package {
    import flash.text.TextField;
    import flash.geom.Vector3D;
    import flash.geom.Matrix3D;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
       
        public var start:wVert;
        public var end:wVert;
       
        public var vecVert:Vector.<wVert>;
       
       public var deb:TextField;
       
        public function FlashTest() {
            
            deb = new TextField();
            addChild(deb);
            
            start = new wVert(0,0,0);
            end = new wVert(50,-120,0);
            
            vecVert = new Vector.<wVert>(0,false);
            vecVert.push( new wVert(0,0,0) );
            vecVert.push( new wVert(0,0,0) );
            vecVert.push( new wVert(0,0,0) );
            vecVert.push( new wVert(0,0,0) );
            
            deb.text = " " + vecVert.length;
            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        
        public var mat:Matrix3D = new Matrix3D();
        
        public var ang:Number = 0;
        public function onEnter(e:Event):void
        {
            
            
            var sx:Number; 
            var sy:Number;
            var vec:Vector.<Number>;
            
            ang += 3;
            
            mat.identity();
            mat.appendRotation(ang, Vector3D.Y_AXIS);
            mat.appendRotation(ang, Vector3D.X_AXIS);
            mat.appendRotation(ang, Vector3D.Z_AXIS);
             
             vec = mat.rawData;
            
            graphics.clear();
            graphics.lineStyle(1,0);
            
            //deb.text= "reach1" ;
            
            sx = start.cx;
            sy = start.cy;
            
           // graphics.drawCircle(200+sx,200+sy,4);
            
            sx = end.cx;
            sy = end.cy;
            
           // graphics.drawCircle(200+sx,200+sy,4);
            
        
             var mag:Number;
             var ax:Number;
             var ay:Number;
             var az:Number;
             var bx:Number;
             var by:Number;
             var bz:Number;    
             var dx:Number;
             var dy:Number;
             var dz:Number;
        
            ax = start.cx - end.cx;
            ay = start.cy - end.cy;
            az = start.cz - end.cz;
            
            mag = Math.sqrt(ax*ax+ay*ay+az*az);
            if (mag == 0) { return; } //nothing to draw
       
            ax /= mag;
            ay /= mag; 
            az /= mag;
            
            /*
            bx = vec[8];
            by = vec[9];
            bz = vec[10];
            */
            
            bx = vec[2];
            by = vec[6];
            bz = vec[10];
            
            /*
            bx = vec[1];
            by = vec[5];
            bz = vec[9];
  */          
            dx = ay * bz - by * az;
            dy = az * bx - bz * ax;
            dz = ax * by - bx * ay;
      
            dx *= 8;
            dy *= 8;
            dz *= 8;
      
           vecVert[0].copyVert(start);
           vecVert[0].addValue(dx,dy,dz);
       
            vecVert[1].copyVert(start);
            vecVert[1].subValue(dx,dy,dz);
            
            vecVert[2].copyVert(end); 
            vecVert[2].addValue(dx,dy,dz);
            
            vecVert[3].copyVert(end); 
            vecVert[3].subValue(dx,dy,dz);
            
            
            
       
            /*
           vecVert[0].copyVert(start);
             vecVert[0].cx += 8;
       
            vecVert[1].copyVert(start);
             vecVert[1].cx -= 8;
            
            vecVert[2].copyVert(end); 
            vecVert[2].cx += 8;
            
            vecVert[3].copyVert(end); 
            vecVert[3].cx -= 8;
            */
            
            
            
            var i:int;
            var num:int;
            var a:wVert;
        
            num = vecVert.length;
            
            for (i = 0; i < num; i++)
            {
                a = vecVert[i];
                
                sx = vec[0]*a.cx + vec[4]*a.cy + vec[8] * a.cz;
                sy = vec[1]*a.cx + vec[5]*a.cy + vec[9] * a.cz;
                
                a.px = sx+200;
                a.py = sy+200;
                
                graphics.drawCircle(a.px,a.py,3);
                
              //  deb.text = " " +i;
            }//nexti
            
            a = vecVert[0];
            graphics.moveTo(a.px,a.py);
            a = vecVert[1];
            graphics.lineTo(a.px,a.py);
            a= vecVert[2];
            graphics.lineTo(a.px,a.py);
            a = vecVert[0];
            graphics.lineTo(a.px,a.py);
            
               
            a = vecVert[1];
            graphics.moveTo(a.px,a.py);
            a = vecVert[3];
            graphics.lineTo(a.px,a.py);
            a= vecVert[2];
            graphics.lineTo(a.px,a.py);
            a = vecVert[1];
            graphics.lineTo(a.px,a.py);
            
            
        }//onenter
        
        
    }//classend
}

internal class wVert
{
    public var cx:Number = 0;
    public var cy:Number = 0;
    public var cz:Number = 0;
    
    public var px:Number = 0;
    public var py:Number = 0;
    public var pz:Number = 0;
    
    public function wVert(x:Number, y:Number, z:Number)
    {
        cx = x;
        cy = y;
        cz = z;
        
     }//ctor
     
     public function subValue(x:Number, y:Number, z:Number):void
     {
      cx -= x; cy -= y; cz -= z;   
     }
     
     public function addValue(x:Number, y:Number, z:Number):void
     {
       cx+=x; cy+=y; cz+=z;  
     }
     
     public function setValue(x:Number, y:Number, z:Number):void
     {
       cx = x; cy = y; cz = z;  
      }
      
      public function copyVert(v:wVert):void
      {
        cx = v.cx;
        cy = v.cy;
        cz = v.cz;   
          
       }
      
      
      
    
}//classend