【发布时间】:2015-03-12 08:50:42
【问题描述】:
我目前正在开展一个模拟两个航天器和一个卫星(火卫一)绕火星运动的项目。一个名为 SPICE 的 MATLAB 工具给了我一个包含 x、y 和 z 距离的数组,我用它们来绘制运行良好的轨道。现在我想为每个航天器和火卫一获取标记,以查看它们何时相互飞行。我让标记工作但不是同时工作,它们相互追逐。我在 youtube 上找到了一个例子,所以它一定是可能的,但他还没有发布代码如何做到这一点(https://www.youtube.com/watch?v=nArR2P0o4r4)。
这是我的代码:
a = position_MEX_Mars(1,:);
b = position_MEX_Mars(2,:);
c = position_MEX_Mars(3,:);
k = position_MAVEN_Mars(1,:);
l = position_MAVEN_Mars(2,:);
m = position_MAVEN_Mars(3,:);
x = position_Phobos_Mars(1,:);
y = position_Phobos_Mars(2,:);
z = position_Phobos_Mars(3,:);
ah = axes;
set(ah,'XLim',[min(x) max(x)],'YLim',[min(y) max(y)],...
'ZLim',[min(z) max(z)]);
plot3(0,0,0,'ro-',x,y,z,a,b,c,k,l,m);
grid on;
hold on;
hpoint = line('XData', 0,'YData', 0,'ZData', 0,'Color','black','Marker',...
'o','MarkerSize',10);
ht = hgtransform('parent',ah);
set(hpoint,'Parent',ht);
for i =2:length(x)
trans = makehgtform('translate',[x(i) y(i) z(i)]);
set(ht,'Matrix',trans);
pause(0.001);
end
这将在时间上运行一个很好的火卫一轨迹动画图,但只有火卫一,而不是与 MEX 和 MAVEN(来自 ESA 和 NASA 的航天器)同时运行。
我试过了,但没有用:
a = position_MEX_Mars(1,:);
b = position_MEX_Mars(2,:);
c = position_MEX_Mars(3,:);
k = position_MAVEN_Mars(1,:);
l = position_MAVEN_Mars(2,:);
m = position_MAVEN_Mars(3,:);
x = position_Phobos_Mars(1,:);
y = position_Phobos_Mars(2,:);
z = position_Phobos_Mars(3,:);
ah = axes;
set(ah,'XLim',[min(x) max(x)],'YLim',[min(y) max(y)],...
'ZLim',[min(z) max(z)]);
plot3(0,0,0,'ro-',x,y,z,a,b,c,k,l,m);
grid on;
hold on;
hpoint = line('XData', 0,'YData', 0,'ZData', 0,'Color','black','Marker',...
'o','MarkerSize',10);
ht = hgtransform('parent',ah);
set(hpoint,'Parent',ht);
for i =2:length(x)
trans1 = makehgtform('translate',[x(i) y(i) z(i)]);
set(ht,'Matrix',trans1);
trans2 = makehgtform('translate',[a(i) b(i) c(i)]);
set(ht,'Matrix',trans2);
pause(0.001);
end
我还尝试合并数组,以便将它们逐个绘制,但这会使动画不流畅并且对项目不满意。
a = position_MEX_Mars(1,:);
b = position_MEX_Mars(2,:);
c = position_MEX_Mars(3,:);
k = position_MAVEN_Mars(1,:);
l = position_MAVEN_Mars(2,:);
m = position_MAVEN_Mars(3,:);
x = position_Phobos_Mars(1,:);
y = position_Phobos_Mars(2,:);
z = position_Phobos_Mars(3,:);
tempx = [position_MEX_Mars(1,:); position_Phobos_Mars(1,:); position_MAVEN_Mars(1,:)];
xt = tempx(:);
tempy = [position_MEX_Mars(2,:); position_Phobos_Mars(2,:); position_MAVEN_Mars(2,:)];
yt = tempy(:);
tempz = [position_MEX_Mars(3,:); position_Phobos_Mars(3,:); position_MAVEN_Mars(3,:)];
zt = tempz(:);
ah = axes;
set(ah,'XLim',[min(x) max(x)],'YLim',[min(y) max(y)],...
'ZLim',[min(z) max(z)]);
plot3(0,0,0,'ro-',x,y,z,a,b,c,k,l,m);
grid on;
hold on;
hpoint = line('XData', 0,'YData', 0,'ZData', 0,'Color','black','Marker',...
'o','MarkerSize',10);
ht = hgtransform('parent',ah);
set(hpoint,'Parent',ht);
for i =2:length(x)
trans = makehgtform('translate',[xt(i) yt(i) zt(i)]);
set(ht,'Matrix',trans);
pause(0.001);
end
我想我已经很接近了,但我似乎遗漏了一些东西,而且我对 MATLAB 的了解还不是很好。希望你能帮帮我。
干杯杰伦
【问题讨论】:
-
将问题简化为您要解决的具体问题会有所帮助。您在这里进行了相当多的轨道漫游,而我正在努力弄清楚您究竟遇到了什么问题。
-
@Aiken,问题是我无法让两个同时标记顺利移动,如 youtube 视频中所见。到目前为止,我发现的解决方案显示了彼此之后的轨迹,因此首先是航天器1,然后是航天器2,或者合并阵列的 MATLAB 将在航天器之间快速切换,这非常华丽且不流畅。我希望这能解决问题。
-
我的评论与其说是要求在 cmets 中进行澄清,不如说是在推动重新检查您的问题并编辑到您要解决的具体问题。我对 MATLAB 一无所知,只是在审核队列中遇到了您的问题,所以我无法回答您的问题,但如果您可以向 实际 MATLAB 专家非常清楚您的问题是什么那么您(以及任何未来遇到同样问题的访问者)更有可能得到满意的解决方案。
标签: matlab animation markers simultaneous