牛顿关于地球引力存在猜想是这样的,在高山上垂直于地面抛一个球,速度越大时,球被抛的越远,当球速足够大时,球应该绕地球运动或是偏离地球的轨道。
这里比较重要的一步是在不知道其是否为做圆周运动的前提下对其运动状况进行验证。
主要的思路如下:
计算与中心点的距离>>>计算中心球体对小球的引力及引力方向向量>>作引力方向的单位法向量>>>
求vx=v*Vdirectionx;vy=v*Virctiony这样的求速度的方式,只用在第一帧里
>>>以后帧中:求速度是把引力在其单位方向上进行分解,进而再求出x,y方向的ax及ay,然后是vx+=ax;vy+=ay;_x+=vx;_y+=vy;ok!
程序清单: #include "Physics.as"
_root.onLoad = function() {
ball.CreateBasicPhysicsFeature(1,0.75, 0, 0);
ball.CreateExtendMotionFeature(0, 0, 0, 0);
ball.CreateUnitVectorFeature(0, 0, 0, 0);
ball.fx(0);
ball.fy(0);
ball1.m(1);
G=100;
_global.dov = true;
};
// Basic Function//
function Getdistance(mc1, mc2) {
return Math.sqrt((mc1._x-mc2._x)*(mc1._x-mc2._x)+(mc1._y-mc2._y)*(mc1._y-mc2._y));
}
function StardandlizeAngle(mc1, mc2) {
var l = Getdistance(mc1, mc2);
mc1.ForcedirectionX = (mc2._x-mc1._x)/l;
mc1.ForcedirectionY = (mc2._y-mc1._y)/l;
}
function do_fx_fy(mc1, mc2) {
var r = Getdistance(mc1, mc2);
StardandlizeAngle(mc1, mc2);
var tempForce = G*mc1.m*mc2.m/(r*r);
// _global.G;
mc1.fx = mc1.ForcedirectionX*tempForce;
mc1.fy = mc1.ForcedirectionY*tempForce;
}
function normal_vector(mc) {
mc.VdirectionX = mc.ForcedirectionY;
mc.VdirectionY = -mc.ForcedirectionX;
}
function do_ax_ay(mc) {
mc.ax = mc.fx/mc.m;
mc.ay = mc.fy/mc.m;
}
// ////////////////////
// Combine Function//
function domove(mc) {
mc.vx += mc.ax;
mc.vy += mc.ay;
mc._x += mc.vx;
mc._y += mc.vy;
}
function summove() {
if (dov == true) {
Getdistence(ball, ball1);
do_fx_fy(ball, ball1);
normal_vector(ball);
ball.vx = ball.v*ball.VdirectionX;
ball.vy = ball.v*ball.VdirectionY;
dov = false;
// close;
} else {
Getdistence(ball, ball1);
do_fx_fy(ball, ball1);
normal_vector(ball);
do_ax_ay(ball);
domove(ball);
}
}
// /////////////////
_root.onEnterFrame = function() {
summove();
}; 我这里的G=100;中心球(相当于地球) ball1.m(1)
根据第一宇宙速度公式可求出小球由于在受到中心球引力条件下作匀速圆周运动的速度大致在式lashe Functions***///k!
ctiony()0.75左右,这个实验中可以有很好的验证效果。(速度过小时,本来是应该是吸进中心点的,由于最后在中心点附近距离间隔极小,所以,很小的方向上的误差导致了小球的有返回到地面的BUG,如有朋友想出更好的办法,请回复在下面,谢谢)
交互版演示:
牛顿关于地球引力存在猜想是这样的,在高山上垂直于地面抛一个球,速度越大时,球被抛的越远,当球速足够大时,球应该绕地球运动或是偏离地球的轨道。
这里比较重要的一步是在不知道其是否为做圆周运动的前提下对其运动状况进行验证。
主要的思路如下:
计算与中心点的距离>>>计算中心球体对小球的引力及引力方向向量>>作引力方向的单位法向量>>>
求vx=v*Vdirectionx;vy=v*Virctiony这样的求速度的方式,只用在第一帧里
>>>以后帧中:求速度是把引力在其单位方向上进行分解,进而再求出x,y方向的ax及ay,然后是vx+=ax;vy+=ay;_x+=vx;_y+=vy;ok!
程序清单: #include "Physics.as"
_root.onLoad = function() {
ball.CreateBasicPhysicsFeature(1,0.75, 0, 0);
ball.CreateExtendMotionFeature(0, 0, 0, 0);
ball.CreateUnitVectorFeature(0, 0, 0, 0);
ball.fx(0);
ball.fy(0);
ball1.m(1);
G=100;
_global.dov = true;
};
// Basic Function//
function Getdistance(mc1, mc2) {
return Math.sqrt((mc1._x-mc2._x)*(mc1._x-mc2._x)+(mc1._y-mc2._y)*(mc1._y-mc2._y));
}
function StardandlizeAngle(mc1, mc2) {
var l = Getdistance(mc1, mc2);
mc1.ForcedirectionX = (mc2._x-mc1._x)/l;
mc1.ForcedirectionY = (mc2._y-mc1._y)/l;
}
function do_fx_fy(mc1, mc2) {
var r = Getdistance(mc1, mc2);
StardandlizeAngle(mc1, mc2);
var tempForce = G*mc1.m*mc2.m/(r*r);
// _global.G;
mc1.fx = mc1.ForcedirectionX*tempForce;
mc1.fy = mc1.ForcedirectionY*tempForce;
}
function normal_vector(mc) {
mc.VdirectionX = mc.ForcedirectionY;
mc.VdirectionY = -mc.ForcedirectionX;
}
function do_ax_ay(mc) {
mc.ax = mc.fx/mc.m;
mc.ay = mc.fy/mc.m;
}
// ////////////////////
// Combine Function//
function domove(mc) {
mc.vx += mc.ax;
mc.vy += mc.ay;
mc._x += mc.vx;
mc._y += mc.vy;
}
function summove() {
if (dov == true) {
Getdistence(ball, ball1);
do_fx_fy(ball, ball1);
normal_vector(ball);
ball.vx = ball.v*ball.VdirectionX;
ball.vy = ball.v*ball.VdirectionY;
dov = false;
// close;
} else {
Getdistence(ball, ball1);
do_fx_fy(ball, ball1);
normal_vector(ball);
do_ax_ay(ball);
domove(ball);
}
}
// /////////////////
_root.onEnterFrame = function() {
summove();
}; 我这里的G=100;中心球(相当于地球) ball1.m(1)
根据第一宇宙速度公式可求出小球由于在受到中心球引力条件下作匀速圆周运动的速度大致在式lashe Functions***///k!
ctiony()0.75左右,这个实验中可以有很好的验证效果。(速度过小时,本来是应该是吸进中心点的,由于最后在中心点附近距离间隔极小,所以,很小的方向上的误差导致了小球的有返回到地面的BUG,如有朋友想出更好的办法,请回复在下面,谢谢)
交互版演示: