add a moving image over a plotted trajectory

27 visualizzazioni (ultimi 30 giorni)
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 Commenti
Sumit
Sumit il 11 Ott 2023
Please check attachment. according to that i want multiple image (stationary) along trajectory. How it can be done

Accedi per commentare.

Risposta accettata

DGM
DGM il 7 Mag 2022
Modificato: DGM il 8 Mag 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 Commenti
Ashley
Ashley il 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 il 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.

Accedi per commentare.

Più risposte (1)

Voss
Voss il 7 Mag 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 Commenti
Voss
Voss il 5 Lug 2022
Modificato: Voss il 5 Lug 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.
ss
ss il 5 Lug 2022
yes it works! thank you a lot

Accedi per commentare.

Prodotti


Release

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by