function [Lon,Lat]=SightPoint(AOC_t0,AOC_fai,AOC_thita,AOC_pusai,AOC_a0,AOC_e0,AOC_i0,AOC_OMG0,AOC_os0,AOC_u0,Rp_b) % AOC_t0:当前时刻(相对于J2000.0的秒计数) % AOC_fai,AOC_thita,AOC_pusai:当前卫星三轴姿态角(3-1-2转序) % AOC_a0,AOC_e0,AOC_i0,AOC_OMG0,AOC_os0,AOC_u0:当前时刻卫星轨道六根数 % Rp_b:本体下的视线指向矢量(单位矢量) % Lon,Lat:视线指向星下点 %% 惯性系下的视线指向矢量计算 Aoi=GetAoi(AOC_i0,AOC_OMG0,AOC_u0); Abo=GetAbo(AOC_fai,AOC_thita,AOC_pusai); Abi=Abo*Aoi; Aib=Abi.'; Rp_i=Aib*Rp_b; %惯性系下的视线指向矢量 %% 惯性系下的卫星矢量计算 Rs_i=Kepler2XYZ(AOC_a0,AOC_e0,AOC_i0,AOC_OMG0,AOC_os0,AOC_u0); %% 地球扁率系数计算 eE=0.00335281066474748; Ke=(1-eE)^2; %% 视线指向与星下点矢量夹角 Thita=acos(dot(Rp_i,-Rs_i)/norm(Rs_i)/norm(Rp_i)); CT=cos(Thita); %% 建立关于视线指向长度的方程 Rp3=Rp_i(3); Rs3=Rs_i(3); RE=6378.14; Norm_Rs=norm(Rs_i); Ka=Ke+(1-Ke)*Rp3^2; Kb=2*(1-Ke)*Rp3*Rs3-2*Ke*Norm_Rs*CT; Kc=Ke*Norm_Rs^2+(1-Ke)*Rs3^2-Ke*RE^2; %% 视线指向矢量长度计算 Norm_Rp=(-Kb-(abs(Kb^2-4*Ka*Kc))^0.5)/2/Ka; Rp_i=Norm_Rp*Rp_i; %% 计算视线指向对应的经纬度信息 Rn_i=Rp_i+Rs_i; %地心到视线指向矢量与地面交点的矢量 Rn_i=Rn_i/norm(Rn_i); [Lon,Lat]=Orbit2LLA(AOC_t0,Rn_i(1),Rn_i(2),Rn_i(3)); %% 轨道六根数转速度位置 function R_sat_i=Kepler2XYZ(AOC_a0,AOC_e0,AOC_i0,AOC_OMG0,AOC_os0,AOC_u0) % 轨道倾角的正余弦值: OBT_Si0=sin(AOC_i0); OBT_Ci0=cos(AOC_i0); % 升交点赤经的正余弦值: OBT_SG0=sin(AOC_OMG0); OBT_CG0=cos(AOC_OMG0); % t0时刻真近点角: OBT_f0=AOC_u0-AOC_os0; % t0时刻偏近点角: OBT_E0=atan2((1-AOC_e0^2)*sin(OBT_f0),AOC_e0+cos(OBT_f0)); % t0时刻平近点角: OBT_M0=OBT_E0-AOC_e0*sin(OBT_E0); % 当前时刻平近点角: OBT_M=OBT_M0; % OBT_M=OBT_M0+(Time-AOC_t0)*w0; % 当前时刻真近点角: AOC_f=OBT_M+(2*AOC_e0-AOC_e0^3/4)*sin(OBT_M)+5/4*AOC_e0^2*sin(2*OBT_M)+13/12*AOC_e0^3*sin(3*OBT_M); % 卫星到地心距离: OBT_rw=AOC_a0*(1-AOC_e0^2)/( 1+AOC_e0*cos(AOC_f));% ע����λkm % 当前时刻轨道幅角: u=AOC_f+AOC_os0; Su=sin(u); Cu=cos(u); % 3)计算当前时刻惯性系下的太阳矢量 % 卫星方向单位矢量: xw1=OBT_CG0*Cu-OBT_SG0*OBT_Ci0*Su; yw1= OBT_SG0*Cu+OBT_CG0*OBT_Ci0*Su; zw1=OBT_Si0*Su; % 惯性坐标系下的卫星实际位置矢量SUN_R1_i(单位:km): R_sat_i=[xw1,yw1,zw1].'*OBT_rw; %% 求解惯性系到轨道系转换矩阵 function Aoi=GetAoi(AOC_i0,AOC_OMG0,AOC_u0) OBT_Si0=sin(AOC_i0); OBT_Ci0=cos(AOC_i0); OBT_SG0=sin(AOC_OMG0); OBT_CG0=cos(AOC_OMG0); OBT_Su0=sin(AOC_u0); OBT_Cu0=cos(AOC_u0); Aoi=[ -OBT_Su0*OBT_CG0-OBT_Cu0*OBT_Ci0*OBT_SG0, -OBT_Su0*OBT_SG0+OBT_Cu0*OBT_Ci0*OBT_CG0, OBT_Cu0*OBT_Si0; -OBT_Si0*OBT_SG0, OBT_Si0*OBT_CG0, -OBT_Ci0; -OBT_Cu0*OBT_CG0+OBT_Su0*OBT_Ci0*OBT_SG0, -OBT_Cu0*OBT_SG0-OBT_Su0*OBT_Ci0*OBT_CG0, -OBT_Su0*OBT_Si0]; %% 求解轨道系到本体系转换矩阵 function Abo=GetAbo(AOC_fai,AOC_thita,AOC_pusai) OBT_Sf=sin(AOC_fai); OBT_Cf=cos(AOC_fai); OBT_St=sin(AOC_thita); OBT_Ct=cos(AOC_thita); OBT_Sp=sin(AOC_pusai); OBT_Cp=cos(AOC_pusai); Abo=[OBT_Ct*OBT_Cp-OBT_St*OBT_Sf*OBT_Sp, OBT_Ct*OBT_Sp+OBT_St*OBT_Sf*OBT_Cp, -OBT_St*OBT_Cf; -OBT_Cf* OBT_Sp, OBT_Cf* OBT_Cp, OBT_Sf; OBT_St*OBT_Cp+OBT_Ct*OBT_Sf*OBT_Sp, OBT_St*OBT_Sp-OBT_Ct*OBT_Sf*OBT_Cp, OBT_Ct* OBT_Cf]; function [Lon,Lat]=Orbit2LLA(AOC_t0,AOC_xw1,AOC_yw1,AOC_zw1) w0=7.29211585530487e-5;%地球自转角速度 % 惯性坐标系下的卫星实际位置矢量SUN_R1_i(单位:km): Tmp_Lat=asin(AOC_zw1)*180/pi; Tmp_Lon=atan2(AOC_yw1,AOC_xw1)*180/pi; % 格林威治恒星时角 Lon0 = rem(4.89496122373137+AOC_t0*w0,2*pi)*180/pi;% 格林威治恒星时角 Lon=Tmp_Lon-Lon0;% 星下点经度 if Lon<-180 Lon=Lon+360; elseif Lon>180 Lon=Lon-360; end Lat=Tmp_Lat;% 星下点纬度