我有一个绕地球轨道的3D图和地球本身的表面图。我也想在正确的位置看到太阳,但是如果我绘制太阳的表面图,图会缩小太多。我只想看到地球附近的物体,同时能够看到远处的太阳。你有什么建议吗?我有太阳相对于地球的位置。地球中心是情节的原点。pidoss.:我可以放大图,但结果还不够好。地球太小了,缩放在到达它之前就停止工作了。这是截至目前的图:
这是没有太阳的图:
以下是代码(仅打印):
figure('Color','k');
%rotate3d;
% Black background and planets
%background('Black');
%hold on
% Celestial bodies
p3Dopts.Units = 'km';
%p3Dopts.RotAngle = 180;
planet3D('Earth', p3Dopts);
hold on
%p3Dopts.Position = rSun(1,:)';
%planet3D('Sun', p3Dopts);
% Flight path
scatter3( Y(:,1), Y(:,2), Y(:,3), 6, scaledT)
xlabel('x [km]'); ylabel('y [km]'); zlabel('z [km]');
ylim([-40000,40000]);
title('Earth equatorial frame', 'FontSize', 14);
cbar = colorbar; cbar.Color = 'w'; cbar.Title.Color = 'w';
cbar.Title.String = strcat('Time [',Tname,']');
clim([min(scaledT);max(scaledT)])
axis equal;
grid on;
ax = gca; ax.Color = 'k'; ax.GridColor = 'w';
ax.GridAlpha = 0.45; ax.XColor = 'w'; ax.YColor = 'w';
ax.ZColor = 'w';
hold off
2条答案
按热度按时间3htmauhk1#
643ylb082#
我最终做了一个混合的解决方案。感谢@Marco,来自Stack Overflow的@Cris Luengo和来自Matlab论坛的@Karim。
r
是相对于原点的摄影机位置,与其他位置一样。dist
是显示的立方体一边距离的一半。我决定使用基于人类水平FOV的轨道高度乘以tan(68º)。rSun
是太阳的位置矢量。rMoon
(也画了这个)是月球的位置矢量。首先,我有一个太阳位置的无限光源,为了画一个像月亮这样的遥远的表面物体,我用一个特殊的
rMoon2
把它放在图的边缘,并把它的大小乘以一个比例数:如果物体像太阳一样非常遥远,你可以去掉分母的r。
如果对象本身是光源(太阳),则需要在位于r的观察者和太阳之间的另一个光源(但为局部光源)。因此,除了前面的步骤之外,还需要:
其中
2*tand(34/60)*(dist-norm(r)/dist)
是相对于太阳和观察者之间距离的视太阳半径的两倍。这里是整个代码的情节,如果你想要它。