【发布时间】:2017-01-13 08:03:46
【问题描述】:
所以我有这个行星模拟,我想在其中绘制行星的位置(所以当行星四处移动时,一条不间断的线跟随行星)并尝试使用许多不同的 linespec 变体。我相信问题可能是因为我先使用了“set(h..)”函数,然后在循环中绘制,但我不确定。
clc, close all, clear all
%% Constants
m_sun=1.9891*10^(30); % Sun mass KG
m_earth=5.972*10^(24);
G=1.4879*10^(-34); %Gravitational constant %AU^3/(kg*day^2) %Because JPL Data..
n=36500; %1 year is 36.5 because 1 step is 10 days so this is 10 years.
dt=1; %Stepsize is by the DATA from JPL aut. set to 10 days (dt=1 aka 10 days)
%% Start pos. and velocity for Sun, Mercury, Venus, Earth and Moon
psol=[0 0 0];
%% Mercury
x_mercury=-1.433719457930228E-01; %AU
y_mercury=2.837093715285307E-01; %AU
z_mercury=3.633570612044031E-02; %AU
vx_mercury=-3.076848842366683E-02; %AU/Day
vy_mercury=-1.162353364156454E-02; %AU/Day
vz_mercury=1.872970822663991E-03;
v0_mercury=[vx_mercury vy_mercury vz_mercury];
p0_mercury=[x_mercury y_mercury z_mercury];
v_mercury=v0_mercury;
p_mercury=p0_mercury;
%% Venus
x_venus=4.673243997906552E-01; %AU
y_venus=5.508231287051383E-01; %AU
z_venus=-1.941467305848078E-02; %AU
vx_venus=-1.548526759260772E-02; %AU/Day
vy_venus=1.299852601837024E-02; %AU/Day
vz_venus=1.071832461568199E-03; %AU/Day
v0_venus=[vx_venus vy_venus vz_venus];
p0_venus=[x_venus y_venus z_venus];
v_venus=v0_venus;
p_venus=p0_venus;
%% Earth
x_jord=-1.796136519182077E-01; %AU
y_jord=9.667949205028737E-01; %AU
z_jord=-3.668730384613077E-05; %AU
vx_jord=-1.720038360546182E-02; %AU/Day
vy_jord=-3.211186215649903E-03; %AU/Day
vz_jord=7.927770738232715E-07; %AU/Day
v0_jord=[vx_jord vy_jord vz_jord];
p0_jord=[x_jord y_jord z_jord];
v_jord=v0_jord;
p_jord=p0_jord;
%% Moon
x_moon=1.735515971173234E-03; %AU
y_moon=-1.954900859093033E-03; %AU
z_moon=9.023023109649464E-05; %AU
vx_moon=4.195999130374965E-04; %AU/Day
vy_moon=4.002519066694706E-04; %AU/Day
vz_moon=-4.849066257645466E-05; %AU/Day
v0_moon=[vx_moon vy_moon vz_moon];
p0_moon=[x_moon y_moon z_moon];
v_moon=v0_moon;
p_moon=p0_moon;
%% Calculations
hold on
h_sun = plot3(0,0,0,'y.','markersize',80);
h_mercury = plot3(1,1,1,'k.','markersize',35);
h_venus = plot3(2,2,2,'m.','markersize',45);
h_earth = plot3(3,3,3,'b.','markersize',55);
h_moon = plot3(4,4,4,'r.','markersize',25);
for step=1:n
%% Mercury
r_vekt_mercury=-p_mercury;
r_mercury=sqrt(x_mercury^2 + y_mercury^2 + z_mercury^2); %Radius in AU
a_mercury=((G*m_sun)/((r_mercury)^3))*r_vekt_mercury;
v_mercury=a_mercury*dt+v_mercury;
p_mercury=v_mercury*dt+p_mercury;
%% Venus
r_vekt_venus=-p_venus;
r_venus=sqrt(x_venus^2 + y_venus^2 + z_venus^2); %Radius in AU
a_venus=((G*m_sun)/((r_venus)^3))*r_vekt_venus;
v_venus=a_venus*dt+v_venus;
p_venus=v_venus*dt+p_venus;
%% Jord
r_vekt_jord=-p_jord;
r_jord=sqrt(x_jord^2 + y_jord^2 + z_jord); %Radius in AU
a_jord=((G*m_sun)/((r_jord)^3))*r_vekt_jord;
v_jord=a_jord*dt+v_jord;
p_jord=v_jord*dt+p_jord;
% %% Moon
%r_vekt_moon=psol-p_moon;
r_vekt_moon_earth=p_jord-p_moon;
r_moon=sqrt(x_moon^2 + y_moon^2 + z_moon^2); %Radius in AU
a_moon=((G*m_earth)/((r_moon)^3))*r_vekt_moon_earth;
v_moon=a_moon*dt+v_moon;
p_moon=v_moon*dt+p_moon;
set(h_sun,'XData',psol(1),'YData',psol(2),'ZData',psol(3));
set(h_mercury,'XData',p_mercury(1),'YData',p_mercury(2),'ZData',p_mercury(3));
set(h_venus,'XData',p_venus(1),'YData',p_venus(2),'ZData',p_venus(3));
set(h_earth,'XData',p_jord(1),'YData',p_jord(2),'ZData',p_jord(3));
set(h_moon,'XData',p_moon(1),'YData',p_moon(2),'ZData',p_moon(3));
xlabel('AU');
ylabel('AU');
zlabel('AU');
axis([-2 2 -2 2 -2 2]);
drawnow;
hold off
end
因此,如果您查看循环之前的内容,您会看到我提到的“set(...)”函数,循环末尾是绘图。如果我改变即@ h_mercury 从'k'。 'k' 行星完全消失。如果我将其更改为“-。”它也会消失。我尝试了无数种变化,要么行星消失了,要么给了我一个错误。我在 2d plot、3d plot、linespec 等中查看了@matlabs 网站的帮助部分,但仍然没有找到解决方案!
希望有人能尽快帮我解决这个问题!
谢谢
【问题讨论】:
标签: matlab plot simulation