我想编写一个 C 程序,以每秒计算两颗卫星在太空中的距离t
。我最初的输入是:
- 初始速度
- 大量的
- 半径
- 位置(x,y 坐标)
对于两颗卫星。由于我有两颗卫星的初始位置,即 x,y 坐标(实际上是 x,y,z 坐标,但为简单起见,我取 x,y),使用毕达哥拉斯定理我可以找到两颗卫星之间的初始距离。
然后我使用牛顿万有引力定律计算卫星 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++;
}