-4

我想编写一个 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",&timestep);

    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++;

    }
4

1 回答 1

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

一旦它起作用了,你可以尝试两个物体相互施加力。

于 2015-09-14T22:38:27.433 回答