You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab 3D绘图技巧:近地视图下显示远处太阳

问题描述

我在Matlab里绘制了地球及近地轨道的3D图,想要在正确位置添加太阳的显示,但绘制太阳表面图会导致整个视图被过度缩小。我需要在聚焦展示近地物体的同时,能在远处看到太阳。已知太阳相对地球(绘图原点)的位置,尝试缩放视图但效果极差,地球变得特别小,还没聚焦到地球就无法继续缩放了。

含太阳的绘图:
含太阳的绘图

不含太阳的绘图:
不含太阳的绘图

绘图代码:

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
解决方案

核心问题是太阳真实尺寸远大于地球和近地轨道范围,直接按真实比例绘制会强制视图缩放至包含太阳的超大范围,导致近地细节无法展示。可以用非真实比例的简化太阳表示,比如用一个高亮的大圆点或小型球体替代真实尺寸的太阳表面图,同时保持其正确的空间位置,这样既不影响近地视图的聚焦,又能显示太阳的位置。

修改后的代码示例

figure('Color','k');
% Celestial bodies
p3Dopts.Units = 'km';
planet3D('Earth', p3Dopts);
hold on

% 方式1:用缩小版球体绘制太阳,手动设置适配近地视图的半径
p3Dopts_Sun = p3Dopts;
p3Dopts_Sun.Position = rSun(1,:)'; % 太阳相对地球的位置
p3Dopts_Sun.Radius = 5000; % 远小于真实尺寸,可根据视图调整
planet3D('Sun', p3Dopts_Sun);

% 方式2:用scatter3画高亮圆点,更轻便高效
% scatter3(rSun(1,1), rSun(1,2), rSun(1,3), 200, 'y', 'filled');

% 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

额外优化:锁定视图范围

如果添加太阳后视图仍自动缩放,可以在绘制完所有元素后添加以下代码锁定近地视图范围:

axis manual;
xlim([-40000,40000]);
ylim([-40000,40000]);
zlim([-40000,40000]);

这样就能在保持近地细节清晰的同时,在远处显示太阳的位置了。

内容的提问来源于stack exchange,提问作者Michael Bay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:10:40