add a moving image over a plotted trajectory

27 ビュー (過去 30 日間)
Isobel Leikis
Isobel Leikis 2022 年 5 月 7 日
コメント済み: DGM 2025 年 4 月 7 日
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 件のコメント
Sumit
Sumit 2023 年 10 月 11 日
Please check attachment. according to that i want multiple image (stationary) along trajectory. How it can be done
DGM
DGM 2023 年 10 月 11 日

サインインしてコメントする。

採用された回答

DGM
DGM 2022 年 5 月 7 日
編集済み: DGM 2022 年 5 月 8 日
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 件のコメント
Ashley
Ashley 2025 年 4 月 7 日
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 2025 年 4 月 7 日
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.

サインインしてコメントする。

その他の回答 (1 件)

Voss
Voss 2022 年 5 月 7 日
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 件のコメント
Voss
Voss 2022 年 7 月 5 日
編集済み: Voss 2022 年 7 月 5 日
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 2022 年 7 月 5 日
yes it works! thank you a lot

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeTiming and presenting 2D and 3D stimuli についてさらに検索

タグ

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by