How do I plot on the same figure from 2 functions?

1 vue (au cours des 30 derniers jours)
Fraser Scanlan
Fraser Scanlan le 27 Mai 2020
Commenté : Tommy le 27 Mai 2020
Sorry if this has already been asked and answered, I couldn't find it.
I want to make a 3D plot the orbit of a SC around the Earth and have written a script to do that. I have also written a function to project the Earth but it doesn't map onto the figure correctly. Is there a way to plot onto the same figure from both the script and the function that is called?
Below is the main script:
positionData = data;
figure(1)
% Plot orbit in ECI reference
% Generation of a sphere
hold off
Earth3D(1)
hold on
plot3(positionData(:, 1), positionData(:, 2), positionData(:, 3),'o-r');
% grid; axis equal;
xlabel('X'); ylabel('Y'); zlabel('Z');
title('Orbit ECI (inertial) (m)')
The Earth3D function is intended to project the Earth:
function Earth3D(figure)
% Defines the Earth object and it's parameters as well as the plot size for the transformation.
[x,y,z] = sphere(1000);
xe=x.*6378.137;
ye=y.*6378.137;
ze=z.*6356.752;
[I,~] = imread('STK_map.jpg');
figure(figure)
hold on
warp(xe,ye,-ze,I);
% ax1 = gca; %Creates object for the axis of the plot to allow it to be defined.
% ax1.YDir='normal'; %Defines y axis of the plot with + at the top.
axis equal;
xlabel('x'); ylabel('y'); zlabel('z');
I have also attached the 'data' function which just contains the spacecraft's position data, and the 'STK_map' for the Earth image.
Thank you for any help you can provide.

Réponse acceptée

Tommy
Tommy le 27 Mai 2020
When you name a variable in your function figure, you can no longer access the function figure(). For example:
>> figure = 1;
>> figure(figure)
ans =
1
% no figure is created
That is likely your main problem.
It seems like warp just plots to the current axes. I would recommend working with handles. I think this could work:
positionData = data;
% Plot orbit in ECI reference
% Generation of a sphere
f = figure;
ax = axes(f, 'NextPlot', 'add');
Earth3D(ax)
plot3(ax, positionData(:, 1), positionData(:, 2), positionData(:, 3),'o-r');
% grid(ax, 'on'); axis(ax, 'equal');
xlabel(ax, 'X'); ylabel(ax, 'Y'); zlabel(ax, 'Z');
title(ax, 'Orbit ECI (inertial) (m)')
with your function defined like this:
function Earth3D(ax)
% Defines the Earth object and it's parameters as well as the plot size for the transformation.
[x,y,z] = sphere(1000);
xe=x.*6378.137;
ye=y.*6378.137;
ze=z.*6356.752;
[I,~] = imread('STK_map.jpg');
axes(ax) % make ax the current axes
warp(xe,ye,-ze,I);
% ax.YDir='normal'; %Defines y axis of the plot with + at the top.
axis(ax, 'equal');
%xlabel(ax, 'x'); ylabel(ax, 'y'); zlabel(ax, 'z');
  4 commentaires
Fraser Scanlan
Fraser Scanlan le 27 Mai 2020
You're right I was using the wrong scale, thank you for helping, it works now!
Tommy
Tommy le 27 Mai 2020
Awesome, happy to help!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Graphics Performance dans Help Center et File Exchange

Produits


Version

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by