首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一个matlab函数可以用来创建一个逼真的I.S.S图?

有没有一个matlab函数可以用来创建一个逼真的I.S.S图?
EN

Stack Overflow用户
提问于 2019-04-15 22:22:23
回答 1查看 102关注 0票数 0

作为我目前正在进行的一个项目的一部分,我必须解决国际空间站绕地球运行的两体问题。到目前为止,我已经设法通过使用sphere/surf函数来近似这一点,然而,我想知道是否有任何方法可以创建一个更逼真的代表国际空间站的图形?不幸的是,这个项目必须完全通过MATLAB来完成,所以我不能使用任何其他工具来提供更好的可视化效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 23:22:31

美国宇航局有许多物体的3D模型,包括国际空间站,which can be found here。这个文件可以转换成你想要的STL格式,我找到了适合我的this random website

在Matlab中,您可以通过以下方式读取此文件

代码语言:javascript
复制
stl = stlread('isscombined.stl');
V = stl.Points;
F = stl.ConnectivityList

然后,可以使用以下命令对其进行绘图

代码语言:javascript
复制
p = patch('vertices',V,'faces',F,'FaceColor',[.8 .8 .8]);

然后,当空间站绕地球运行时,您可以使用新的顶点位置更新对象。显然,您还可以通过将顶点乘以一定数量来缩放对象。如果不想绘制镶嵌面的边缘,也可以在patch选项中添加'EdgeAlpha', 0

这是一个简单的例子,展示了国际空间站围绕一个球体运行

代码语言:javascript
复制
% Note: not to scale
ISS_radius = 2; % distance from center of Earth
RE = 1; % radius of earth
theta = 0:.05:2*pi;
x = ISS_radius*cos(theta);
y = ISS_radius*sin(theta);

stl = stlread('isscombined.stl');
r = .01; % scaling factor
V = stl.Points * r;
V = V - mean(V); % center at origin
F = stl.ConnectivityList;

figure; hold on;
plot3(x,y,zeros(numel(theta)),'--');
[X,Y,Z] = sphere(50);
surf(RE*X,RE*Y,RE*Z,'FaceColor',[0 0 .8],'EdgeAlpha',0);
p = patch('Vertices', V*r, 'Faces', F, 'FaceColor', [0 0 0], 'EdgeAlpha', 0);
axis equal;
set(gca,'View',[200 13])
grid on;
counter = 1;
while true
    p.Vertices = V + [x(counter), y(counter), 0];
    pause(0.01);
    drawnow
    counter = mod(counter + 1, numel(theta)) + 1;
    axis([-1 1 -1 1 -1 1]*ISS_radius*1.2)
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55691298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档