我想写一个C程序,每隔t
秒找到两颗卫星在太空中的距离。我最初的意见是:
两颗卫星。由于我有初始位置,即两个卫星的x,y坐标(实际上是x,y,z坐标,但为了简单起见,我是x,y),使用毕达哥拉斯定理,我可以找到2颗卫星之间的初始距离。
然后我使用牛顿的万有引力定律计算卫星1对卫星2施加的力。这两颗卫星在两个不同的圆形轨道上连续旋转(例如,一个垂直于地球,另一个水平和相同半径,以便它们可能发生碰撞)。
根据搜索引擎的信息,双重积分加速度可以得出2颗卫星之间的距离。
我正在使用以下方式计算新职位:
x_1 = x_0 + v_x delta_t + (1/2)a (delta_t)^2 and y_1 = y_0 + v_y delta_t + (1/2) a (delta_)t)^2
我正在使用:
linear acceleration = Net force/massOfSat1;
angular acceleration = linear acceleration/radiusOfSat1;
计算a
和
v_x =initial_angular_velocity_x + a(delta t)
v_y =initial_angular_velocity_y + a(delta t)
这个公式不会给出有效的距离,因为它会不断增加,但我希望距离随着圆周运动而增加和减少,并且卫星也可以靠近或远行。我觉得使用合适的加速公式我会出错。
这是应用概念和公式的正确方法吗?
这是一个很好的网址,看起来类似于我打算做的事情:
http://www.science-animations.com/support-files/gravitasieplaneteb.swf
代码如下:
const double g = 9.8;
void main(){ int delta_t = 0,i = 0,timestep = 0; double v_x_old1,v_y_old1,v_x_old2,v_y_old2,a,a_x1,a_y1,v_x_new1,v_y_new1,x_new1,x_old1,y_new1,y_old1,r;
printf("\nEnter the time interval delta t:");
scanf("%lf",×tep);
printf("\nEnter the velocity x component of satellite 1:");
scanf("%lf",&v_x_old1);
printf("\nEnter the velocity y component of satellite 1:");
scanf("%lf",&v_y_old1);
/*printf("\nEnter the velocity x component of satellite 2:");
scanf("%lf",&v_x_old2);
printf("\nEnter the velocity y component of satellite 2:");
scanf("%lf",&v_y_old2);*/
r = 10.00;
x_old1 = 25.00;
y_old1 = 25.00;
a_x1 = 0.0;
a_y1 = 0.0;
while(i<25){
//satellite 1
//x_new1 = x_old1 +( v_x_old * delta_t);
//Now apply a constant acceleration, so that v changes:
x_new1 = x_old1 + (v_x_old1 *delta_t) + ( (1/2)* a_x1* (pow(delta_t,2.0)));
v_x_new1 = v_x_old1 + (a_x1* delta_t);
x_old1 = x_new1;
v_x_old1 = v_x_new1;
y_new1 = y_old1 + (v_y_old1 *delta_t )+ ((1/2)* a_y1* (pow(delta_t,2.0)));
v_y_new1 = v_y_old1 + (a_y1* delta_t);
y_old1 = y_new1;
v_y_old1 = v_y_new1;
a = g/pow(r,2.0);
a_x1 = (-a* x_new1)/r;
a_y1 = (-a* y_new1)/r;
printf("\n a_x1 = %0.3lf",a_x1);
printf("\n X-coordinate = %0.3lf, Y-coordinate = %0.3lf",x_new1,y_new1);
delta_t += timestep;
i++;
}
答案 0 :(得分:0)
如果不了解物理学,你将无法实现这一目标。
首先,忘记力,加速度和角速度;试着让一个物体以恒定速度移动。首先是这样的:
x = x_0 + v_x t
(假设在t = 0时x = x 0 ),那么就像这样:
x_new = x_old + v_x delta_t
现在应用恒定加速度,以便 v 更改:
x_new = x_old + v_x_old delta_t + (1/2) a_x (delta_t)^2
v_new = v_old + a_x delta_t
现在,物体的行为应该像抛出的球一样落到地上。
一旦它起作用,尝试使用重力加速度朝向空间中的固定点,与距离的平方成反比:
a = g/r^2
a_x = -a x/r
a_y = -a y/r
一旦工作,你可以尝试两个对象施加力量。