add a moving image over a plotted trajectory

27 views (last 30 days)
x = 0:pi/100:2*pi;
y = sin(x);
plot(x, y);
%i want my image to move in this way
alpaca = 'alpaca.png';
[I,map,transparency] = imread(alpaca);
%i have this code to remove the background of my image
%i tried using image sc but i couldnt get it to work
%thank you!
  3 Comments
Sumit
Sumit on 11 Oct 2023
Please check attachment. according to that i want multiple image (stationary) along trajectory. How it can be done

Sign in to comment.

Accepted Answer

DGM
DGM on 7 May 2022
Edited: DGM on 8 May 2022
Assuming you actually want it to move in real time, this should be a start
x = 0:pi/100:2*pi;
y = sin(x);
plot(x, y); hold on
%i want my image to move in this way
fname = 'alpaca.png';
[inpict,~,alpha] = imread(fname);
inpict = flipud(inpict); % necessary to keep image upright
alpha = flipud(alpha);
imgsize = [0.7 0.8]; % [x y] in plot coordinates
% get current coordinates for the image
xx = [-0.5 0.5]*imgsize(1) + x(1);
yy = [-0.5 0.5]*imgsize(2) + y(1);
hi = image(xx,yy,inpict);
hi.AlphaData = alpha; % set alpha
% enforce axes extents
axis equal
xlim([0 2*pi] + [-0.5 0.5]*imgsize(1))
ylim([-1 1] + [-0.5 0.5]*imgsize(2))
for k = 1:numel(x)
hi.XData = [-0.5 0.5]*imgsize(1) + x(k);
hi.YData = [-0.5 0.5]*imgsize(2) + y(k);
% wait
pause(0.02)
end
  7 Comments
Ashley
Ashley on 7 Apr 2025
This is probably the best demonstration of a sprite being used in Matlab so far.
Is it possible to make a sprite like this which the user can drag to different areas of the grid?
DGM
DGM on 7 Apr 2025
Probably. I'm not really sure of what the best way to do that would be. It may require setting up some interaction callbacks. I don't think I've ever tried to do this sort of thing specifically. I generally avoid interactive graphics as much as I can.

Sign in to comment.

More Answers (1)

Voss
Voss on 7 May 2022
Something like this?
x = 0:pi/100:2*pi;
y = sin(x);
figure();
plot(x, y);
hold on
xlim([0 2*pi]);
ylim([-1 1]);
I = imread('alpaca.png');
im = image(I,'XData',[0 1],'YData',[0 1]);
for ii = 1:numel(x)
set(im,'XData',x(ii)+[-0.5 0.5],'YData',y(ii)+[-0.5 0.5]);
drawnow();
end
  5 Comments
Voss
Voss on 5 Jul 2022
Edited: Voss on 5 Jul 2022
Try doing
clear image
and then running it again.
That is, you may have a variable called image in your workspace that needs to be cleared before you can use the image function.

Sign in to comment.

Tags

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!