www.pudn.com > GPSGJ.rar > Gfunction1.h


#include 
#include 
#define pi 3.1415926 
double *Gdcs(double xy[],int n)                     //¼ÆËã¹ìµÀ²ÎÊý 
{ 
	double A,B,C,h,r,v,i,domiga,a,e,E,xomiga,f,miu,i1,E1; 
    double *px=xy; 
	double x=*px,y=*(px+n-5),z=*(px+n-4),vx=*(px+n-3),vy=*(px+n-2),vz=*(px+n-1); 
    double canshu[6]; 
	miu=3.986005e14; 
    x=-3613946.664; 
    y=-8938344.367; 
    z=-773304.431; 
 
    vx=5230.262219; 
    vy=-1886.855649; 
    vz=-3159.828074; 
 //printf("please input x,y,z:\n"); 
 //scanf("%lf%lf%lf",&x,&y,&z); 
 //printf("please input vx,vy,vz:\n"); 
 //scanf("%lf%lf%lf",&vx,&vy,&vz); 
    r=sqrt(x*x+y*y+z*z); 
    v=sqrt(vx*vx+vy*vy+vz*vz); 
    A=y*vz-z*vy; 
    B=z*vx-x*vz; 
    C=x*vy-y*vx; 
    h=sqrt(A*A+B*B+C*C); 
    i1=atan(sqrt(A*A+B*B)/C); 
    i=atan(sqrt(A*A+B*B)/C)*180/pi; 
    domiga=atan(-A/B)*180/pi;  
    a=miu*r/(2*miu-v*v*r); 
    e=sqrt(1-h*h/miu/a); 
    E1=acos((a-r)/a/e); 
    E=E1*180/pi; 
    f=2*atan(sqrt((1+e)/(1-e))*tan(E1/2))*180/pi; 
    xomiga=atan(z/sin(i1)/(x*cos(domiga*pi/180)+y*sin(domiga*pi/180)))*180/pi-f; 
    xomiga=180+xomiga; 
	canshu[0]=i; 
	canshu[1]=a; 
	canshu[2]=e; 
	canshu[3]=domiga; 
	canshu[4]=xomiga; 
	canshu[5]=E; 
    return canshu; 
 //printf("i=%lf\ndomiga=%lf\na=%lf\ne=%lf\nE=%lf\nxomiga=%lf\n",i,domiga,a,e,E,xomiga); 
} 
double *Wzsd(double xy[],int n) 
{ 
	double miu,p1,p2,p3,q1,q2,q3,x,y,z,vx,vy,vz,i,O,o,E; 
    double *px=xy; 
    double ii=*px,a=*(px+n-5),e=*(px+n-4),domiga=*(px+n-3),xomiga=*(px+n-2),EE=*(px+n-1); 
	double weizhi[6]; 
	miu=3.986005e14; 
	printf("please input a,e,i,domiga,xomiga,E:\n"); 
	scanf("%lf%lf%lf%lf%lf%lf",&a,&e,&ii,&domiga,&xomiga,&EE); 
	i=ii/180.0*pi; 
	O=domiga/180.0*pi; 
	o=xomiga/180.0*pi; 
	E=EE/180.0*pi; 
   	p1=cos(o)*cos(O)-sin(o)*sin(O)*cos(i); 
	p2=cos(o)*sin(O)+sin(o)*cos(O)*cos(i); 
	p3=sin(o)*sin(i); 
	q1=-sin(o)*cos(O)-cos(o)*sin(O)*cos(i); 
	q2=-sin(o)*sin(O)+cos(o)*cos(O)*cos(i); 
	q3=cos(o)*sin(i); 
    x=a*(cos(E)-e)*p1+a*sqrt(1-e*e)*sin(E)*q1; 
	y=a*(cos(E)-e)*p2+a*sqrt(1-e*e)*sin(E)*q2; 
    z=a*(cos(E)-e)*p3+a*sqrt(1-e*e)*sin(E)*q3; 
	vx=-sin(E)*sqrt(miu/a)/(1-e*cos(E))*p1+sqrt(1-e*e)*cos(E)*sqrt(miu/a)/(1-e*cos(E))*q1; 
	vy=-sin(E)*sqrt(miu/a)/(1-e*cos(E))*p2+sqrt(1-e*e)*cos(E)*sqrt(miu/a)/(1-e*cos(E))*q2; 
	vz=-sin(E)*sqrt(miu/a)/(1-e*cos(E))*p3+sqrt(1-e*e)*cos(E)*sqrt(miu/a)/(1-e*cos(E))*q3; 
	weizhi[0]=x; 
	weizhi[1]=y; 
	weizhi[2]=z; 
	weizhi[3]=vx; 
	weizhi[4]=vy; 
	weizhi[5]=vz; 
	return weizhi; 
	//printf("r1=%lf\nr2=%lf\nr3=%lf\nv1=%lf\nv2=%lf\nv3=%lf\n",x,y,z,vx,vy,vz); 
}