/******************************************************************************
弾 道 軌 道
入力:半射程角
出力:射角に対する、長径、短径、高度、離心率、周期
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;
}