以下我简单地给出解决思路,拒绝伸手党。(以后我有时间了会把整个代码发上来)
主要用到的函数是plot(longitude,latitude),其中long为经度,在±180°之间;lat为纬度,在±90°之间。 我们所需要的星下点是连续的曲线,即使航天器星下点穿过了国际日界线,即±180°经线。如下图
但是可惜的是,如果简单的用下面这句函数,就无法画出上面的曲线
plot(Long*rad2deg, lat*rad2deg,'b-'); axis([-180,180,-90,90]);grid on;可以发现,穿过日界线时,地图左右两端的点被直线连接起来了。解决方法是,判断跳变发生的时刻,分段画连续曲线。代码如下
la=length(Long); diffLong=abs(diff(Long))>(npasses*180/la); diffLong=find(diffLong); if isempty(diffLong) plot(Long*rad2deg, lat*rad2deg,'b-'); else ka=1; totalSections=length(diffLong); for i=1:totalSections kb=diffLong(i); sec=ka:kb; ka=kb+1; plot(Long(sec)*rad2deg, lat(sec)*rad2deg,'b-'); end sec=kb+1:la; plot(Long(sec)*rad2deg, lat(sec)*rad2deg,'b-'); end hold off; axis([-180,180,-90,90]);grid on;其中diffLong 对经度数据取了差分;npasses是轨道圈数,这个变量可以大概估计一下;每次截取绘制的是向量Long的一部分sec=ka:kb;
如果用MATLAB的Mapping Toolbox,可以加载地球图形,就更好看了。也就是在星下点的原图底部,先有这样两句
hold on; geoshow('landareas.shp','FaceColor','green'); % Plot map