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

조회 수: 3 (최근 30일)
Fraser Scanlan
Fraser Scanlan 2020년 5월 27일
댓글: Tommy 2020년 5월 27일
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.

채택된 답변

Tommy
Tommy 2020년 5월 27일
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
Fraser Scanlan
Fraser Scanlan 2020년 5월 27일
You're right I was using the wrong scale, thank you for helping, it works now!
Tommy
Tommy 2020년 5월 27일
Awesome, happy to help!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Mapping Toolbox에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by