Как совместить 3D-сюжет для серфинга и комет-сюжет в MATLAB? - PullRequest
0 голосов
/ 27 октября 2019

Я пишу код для построения круговой орбиты спутника (созданной с помощью функции comet3 ()) вокруг трехмерной модели Земли (созданной с помощью функций surf () и set ()). Проблема в том, что я не могу найти способ собрать их в один сюжет. Я пытался использовать удержание и удержание, но, похоже, это тоже не работает. Я вставляю приведенный ниже код MATLAB для справки.

Редактировать: Все остальные функции, такие как sv_from_coe (), odeset и т. Д. Работают отлично, единственное место, с которым я сталкиваюсь, это объединение графиков из comet3() и set ().

G = 6.67E-11;
Me = 5.976E24;

coe = [6776, 0.0005638, 2.0543, 0.9, 5.549, 0];
[r, v] = sv_from_coe(coe);
rv = [r v];

opt = odeset('RelTol', 1e-6, 'AbsTol', 1e-6);
[t,X] = ode45(@rate, [0 2*1.5*3600], rv, opt);

[x,y,z] = sphere;
r_earth = 6378*1000;

figure
hs1 = surf(x*r_earth,y*r_earth,-z*r_earth);
cdata = imread('1024px-Land_ocean_ice_2048.jpg');
alpha = 1;

hold on
axis equal
comet3(X(:,1), X(:,2), X(:,3))
set(hs1, 'FaceColor', 'texturemap', 'CData', cdata, 'FaceAlpha', alpha, 'EdgeColor', 'none')

1 Ответ

1 голос
/ 28 октября 2019

Вам просто нужно изменить порядок, сначала нанесите на карту землю и установите текстуру. Затем используйте comet3 для анимации траектории:

% earth
[x,y,z] = sphere;
r_earth = 6378*1000;

% some simple trajectory
phi = 0:0.01:2*pi;
r_orbit = r_earth + 408*1e3; % ISS orbit height
xv = r_orbit * cos(phi);
yv = r_orbit * sin(phi);
zv = zeros(size(yv));

% draw figure
figure(1); clf;
ax = axes;

% first plot the earth and set texture
hs1 = surf(x*r_earth,y*r_earth,-z*r_earth);
alpha = 1;
cdata = imread("Land_ocean_ice_2048.jpg");
set(hs1, 'FaceColor', 'texturemap', 'CData', cdata, 'FaceAlpha', alpha, 'EdgeColor', 'none')
hold on
axis equal

% finally, animate using comet3
comet3(xv,yv,zv)
...