3D Orbit Math

by bradsedito forked from Grav (diff: 89)
♥0 | Line 58 | Modified 2012-07-15 05:51:52 | MIT License
play

ActionScript3 source code

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

package
{
    import flash.filters.BlurFilter;
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.ui.*;
    import net.hires.debug.Stats;  
  
    public class Grav extends Sprite 
    {
        private var particles:Vector.<MovieClip>
        private var hole:Vector3D
        private var stats:Stats = new Stats();
        public  var isMouseDown:Boolean;


        public function Grav() 
        {
           stage.frameRate = 90;
           addChild( stats );
           //ENTRY POINT:
           
           particles = new <MovieClip>[]
           for(var i:uint = 0; i<9; i++)  // i<9; 
           {
               addOne()
           }
           hole = new Vector3D(0,0,2)
           //hole = new Vector3D(0,0,1)
           addEventListener("enterFrame", frame)
        }
        


        private function frame(e:Event):void 
        {
            for(var i:int = particles.length - 1; i >= 0; i--) 
            {
                var sp:MovieClip = particles[i]
                var d:Vector3D = hole.subtract(sp.pos)
                var k:Number = Math.sqrt(  (d.x*d.x)+(d.y*d.y)+(d.z*d.z)  )        // var k:Number = d.x*d.x + d.y*d.y + d.z*d.z
                k = (k < 0.1) ? 300 : 3000*k  //k = (k < 0.1) ? 10 : 100*k    // k = (k < 0.1) ? 300 : 3000*k
                                                                

                sp.pos  =  sp.pos.add(sp.vec)
                sp.x    =  100*sp.pos.x/sp.pos.z+200 
                sp.y    =  100*sp.pos.y/sp.pos.z+200
                sp.z    =  sp.pos.z  // 100*sp.pos.z/sp.pos.z+200
                //sp.scaleX = 1/sp.pos.z
                //sp.scaleY = 1/sp.pos.z
                //sp.visible = sp.pos.z > 0.001
                
                sp.vec.x  +=  d.x/k // ( d.x/k )/114;
                sp.vec.y  +=  d.y/k // ( d.y/k )/114;  
                sp.vec.z  +=  d.z/k // ( d.z/k )/114;                
            }           
        }
        
        private function addOne():void {
            var sp:MovieClip = new MovieClip()
            var blurr:BlurFilter = new BlurFilter( 20,20,3 )
            sp.graphics.beginFill( 0xFFFFFF*Math.random(),1 )
            sp.blendMode = 'add'
            sp.graphics.drawCircle( 0,0,60 )
            sp.graphics.endFill()
            sp.pos = new Vector3D(Math.random()-0.5, Math.random()-0.5, 0.5+Math.random())
            sp.vec = new Vector3D(Math.random()/30-1/60, Math.random()/30-1/60, Math.random()/30-1/60)
            sp.filters = [ blurr ]
            addChild(sp)
            particles.push(sp)
        }
    }
}






/*
                this.addEventListener( Event.ENTER_FRAME,mouseSwitch          ) 
                public function mouseSwitch( mEvent:Event ):void
                {
                    stage.removeEventListener( Event.ENTER_FRAME,mouseSwitch       ) 
                    stage.addEventListener( MouseEvent.MOUSE_DOWN,mouseDOWNHandler ) 
                    stage.addEventListener( MouseEvent.MOUSE_UP  ,mouseUPHandler   ) 
                    
                    if( isMouseDown=true  )
                    {
                        //    
                    }
                    if( isMouseDown=false )
                    {
                        sp.vec.x  +=  ( d.x/k )/4;
                        sp.vec.y  +=  ( d.y/k )/4;  
                        sp.vec.z  +=  ( d.z/k )/4;
                    }
                    function mouseDOWNHandler( mDown:MouseEvent ):Boolean{
                        isMouseDown = true;
                        return isMouseDown;
                    }                
                    function mouseUPHandler( mDown:MouseEvent ):Boolean{
                        isMouseDown = false;
                        return isMouseDown;
                    }                    
                } 

*/