function StardandlizeAngle(mc1, mc2) {
var l = Getdistance(mc1, mc2);
mc1.ForcedirectionX=(mc2._x-mc1._x)/l;
mc1.ForcedirectionY=(mc2._y-mc1._y)/l;
}
function normal_vector(mc1){//求MC1沿顺时针绕MC2转的法向单位向量。
mc1.VdirectionX=mc1.ForcedirectionY;
mc1.VdirectionY=-mc1.ForcedirectionX;
}
function doForce(mc1,mc2) {//注意之里采用的累加力的方式
var r = Getdistance(mc1, mc2);
StardandlizeAngle(mc1, mc2);
var tempForce = G*mc1.m*mc2.m/(r*r);
mc1.fx += mc1.ForcedirectionX*tempForce;
mc1.fy += mc1.ForcedirectionY*tempForce;
}
function return_fx_fy(){//每一帧的最后,把力归零。
var i=1;
while(i<4){
eval("ball"+i).fx=0;
eval("ball"+i).fy=0;
i++;
}
}
function doFsum(mc){
mc.fs=Math.sqrt(mc.fx*mc.fx+mc.fy*mc.fy);
}
function doV(mc1,mc2,mc3){
var r=Math.sqrt(mc2.m*mc2.m+mc3.m*mc3.m+mc2.m*mc3.m)/(mc1.m+mc2.m+mc3.m)*a
mc1.v=Math.sqrt(mc1.fs*r/mc1.m);
}
function doMove_Circle(mc){
mc.ForcedirectionX=mc.fx/mc.fs;
mc.ForcedirectionY=mc.fy/mc.fs;
normal_vector(mc);
mc.vx=mc.v*mc.VdirectionX;
mc.vy=mc.v*mc.VdirectionY;
mc._x+=mc.vx;
mc._y+=mc.vy;
}
///Combine Functions and do Motions///
function sumForce(){
for(var i=1;i<4;i++){
var j=1;
while(j<4){
if(i!=j){
doForce(eval("ball"+i),eval("ball"+j));
}
j++;
};
}
}
function CaculateF(){
sumForce();
var j=1;
while(j<4){
doFsum(eval("ball"+j));
j++;
}
}
function CaculateV(){
doV(ball1,ball2,ball3);
doV(ball2,ball1,ball3);
doV(ball3,ball1,ball2);
}
function SumMove(){
var i=1;
while(i<4){
doMove_Circle(eval("ball"+i));
i++;
}
}
_root.onEnterFrame=function(){
CaculateF();
CaculateV();
SumMove();
return_fx_fy();
}