/******************************************************************************

    suborbit.c

                                                    弾 道 軌 道

                  入力:半射程角

                  出力:射角に対する、長径、短径、高度、離心率、周期

                                                                               1999.08.09

                                                                               By T.Kubota

******************************************************************************/

#include <stdio.h>

#include <math.h>

#define PI 3.14159265358979

#define R 6378136                              /* 地球赤道面平均半径(m) */

#define Vc 7910                                   /* 第1宇宙速度(m/s) */

#define U (3.98602e+14)                     /* 地心引力係数 */

int main(void)

{

    double a,b;                                       /* 楕円軌道長径、短径 */

    double e;                                         /* 離心率 */

    double v0;                                       /* ミサイル相対速度(m/s) */

    double w;                                        /* 半射程角 */

    double q;                                        /* 射角(垂直基準)(°) */

    double h;                                        /* 最大弾道高(m) */

    double t;                                        /* 周期(秒) */

    double rad;                                    /* 度→ラジアン変換係数 */

    double A,B,C;                                /* 2次方程式(Ax*x+2Bx+C=0)の係数 */

    double D;                                      /* 判別式 */

    double v2;                                    /* ミサイル速度の自乗 */

    double tmp1,tmp2;                      /* 作業用変数 */

    int i;

    rad=PI/180.0;

    printf("半射程角(°)を入力して下さい。--->");

    scanf("%lf",&w);

    printf("半射程角 = %lf\n\n",w);

    w=w*rad;

    tmp2=cos(w)*cos(w);

    printf(" 射角 v (m/s) 長径(km) 短径(km) 高度(km) 離心率 周期(s)\n");

    for(i=0;i<18;i++){

        q=PI/36.0*(i+1);

        tmp1=sin(q)*sin(q);

        A=tmp1*(tmp2-tmp1);

        B=tmp1*(1.0-tmp2);

        C=tmp2-1.0;

        D=B*B-A*C;

        v2=(-B+sqrt(D))/A;

        if(D>=0.0 && v2<=1.0){

            v0=sqrt(v2);

            a=R/(2.0-v0*v0);

            e=sqrt(1.0-v0*v0*(2.0-v0*v0)*sin(q)*sin(q));

            b=a*sqrt(1.0-e*e);

            h=a*(1.0+e)-R;

            t=2.0*PI*sqrt(a*a*a/U);

            printf(" %4.1lf %6.1lf %6.1lf "

                 "%6.1lf %6.1lf %6.4lf %6.1lf\n",

                    90.0-q/rad,v0*Vc,a/1000,b/1000,h/1000,e,t);

        }

    }

    getchar();getchar();

    return 0;

}

      2地点間の距離を求めるプログラムへ    ミサイルの運動を求めるプログラムへ

      プログラムの解説のページへ                    このページの先頭へ