以下我简单地给出解决思路,拒绝伸手党。(以后我有时间了会把整个代码发上来)
主要用到的函数是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