3D Orbit Math
forked from Grav (diff: 89)
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;
}
}
*/