var G:Number = 100;
function calcAcceleration(dot0:MovieClip, dot1:MovieClip):Point
{
var r:Point = new Point(dot1.x - dot0.x, dot1.y - dot0.y);
/*if (r.length < 14.5)
return new Point(0, 0);*/
var rSqr:Number = Math.pow(r.length, 2);
r.normalize(G * dot1.m / rSqr);
return r;
}
function normalizePositionVelocity(dot:MovieClip):void
{
/*if (dot.x > 550)
dot.v.x = -Math.abs(dot.v.x);
if (dot.x < 0)
dot.v.x = Math.abs(dot.v.x);
if (dot.y > 400)
dot.v.y = -Math.abs(dot.v.y);
if (dot.y < 0)
dot.v.y = Math.abs(dot.v.y);*/
}
function calcKineticEnergy(dot:MovieClip):Number
{
return dot.m * Math.pow(dot.v.length, 2) / 2;
}
function calcPotentialEnergy(dot0:MovieClip, dot1:MovieClip):Number
{
var r:Point = new Point(dot1.x - dot0.x, dot1.y - dot0.y);
return -G * dot0.m * dot1.m / r.length;
}
addEventListener(Event.ENTER_FRAME, enterFrame)
function enterFrame(event:Event):void
{
dot0.v = dot0.v.add(calcAcceleration(dot0, dot1));
dot0.v = dot0.v.add(calcAcceleration(dot0, dot2));
dot0.v = dot0.v.add(calcAcceleration(dot0, dot3));
normalizePositionVelocity(dot0);
dot1.v = dot1.v.add(calcAcceleration(dot1, dot0));
dot1.v = dot1.v.add(calcAcceleration(dot1, dot2));
dot1.v = dot1.v.add(calcAcceleration(dot1, dot3));
normalizePositionVelocity(dot1);
dot2.v = dot2.v.add(calcAcceleration(dot2, dot0));
dot2.v = dot2.v.add(calcAcceleration(dot2, dot1));
dot2.v = dot2.v.add(calcAcceleration(dot2, dot3));
normalizePositionVelocity(dot2);
dot3.v = dot3.v.add(calcAcceleration(dot3, dot0));
dot3.v = dot3.v.add(calcAcceleration(dot3, dot1));
dot3.v = dot3.v.add(calcAcceleration(dot3, dot2));
normalizePositionVelocity(dot3);
dot0.x += dot0.v.x;
dot0.y += dot0.v.y;
dot1.x += dot1.v.x;
dot1.y += dot1.v.y;
dot2.x += dot2.v.x;
dot2.y += dot2.v.y;
dot3.x += dot3.v.x;
dot3.y += dot3.v.y;
empty.graphics.lineStyle(1, 0x333333);
empty.graphics.lineTo(dot0.x, dot0.y);
var kineticEnergy = calcKineticEnergy(dot0)
+ calcKineticEnergy(dot1)
+ calcKineticEnergy(dot2)
+ calcKineticEnergy(dot3);
var potentialEnergy = calcPotentialEnergy(dot0, dot1)
+ calcPotentialEnergy(dot0, dot2)
+ calcPotentialEnergy(dot0, dot3)
+ calcPotentialEnergy(dot1, dot2)
+ calcPotentialEnergy(dot1, dot3)
+ calcPotentialEnergy(dot2, dot3);
kinE.text = new String(kineticEnergy);
potE.text = new String(potentialEnergy);
e.text = new String(kineticEnergy + potentialEnergy);
}