2013-05-27 266 views
1

我想製作從原點開始經過由x向量,y向量,z向量給出的軌跡的球(由圖片here給出)的動畫(每個nX1 )。我知道我需要使用getframe命令,但我不知道如何在軸上移動圖片。我知道,我可以通過定義新的軸,例如把圖片的角落之一(〔實施例從MATLAB官方論壇獲取):在MATLAB的座標軸上放置圖片

numberOfDataPoints = 200; 
sampleData = 100*rand(1,numberOfDataPoints); 
plot(sampleData); 
xlim([1, numberOfDataPoints]); 
hold on; 
plot(sampleData); 
xlim([1, numberOfDataPoints]); 
axes1Position = get(gca, 'Position'); 
logoSizeX = 0.1; 
logoSizeY = 0.1; 
% Position the logo in the upper right. 
x1 = axes1Position(1) + axes1Position(3) - logoSizeX; 
y1 = axes1Position(2) + axes1Position(4) - logoSizeY; 
hAxis2 = axes('Position', [x1 y1 logoSizeX logoSizeY]); 
axis off; 
imshow(ball.jpeg); 

,但因爲我不希望創建獨立的軸,這不幫幫我。我如何定義給定軸上的球的運動?

回答

2

您可以通過存儲圖像繪製功能返回的手柄並設置其'XData''YData''ZData'屬性來移動對象。這是一個小例子;本示例使用warp在球面上繪製圖像(使用sphere生成),然後將其移動到隨機路徑中。

close all; 

% Load image 
[img, imgMap] = imread('peppers.png'); 

sphereImgSize = min(size(img, 1), size(img, 2)); 
sphereImg = img(1:sphereImgSize, 1:sphereImgSize, :); 

% Generate sphere vertices 
[X, Y, Z] = sphere(sphereImgSize); 

lims = [-10 10]; 

figure; 
axes; 

hImg = warp(X, Y, Z, sphereImg); % NOTE: Store handle returned 

xlim(lims); 
ylim(lims); 
zlim(lims); 
axis square; 

% Set up movement path 
nFrames = 100; 
randPathFun = @()rand(nFrames, 1) * diff(lims) + lims(1); 
pathX = randPathFun(); 
pathY = randPathFun(); 
pathZ = randPathFun(); 

% Move the image by setting its 'XData' and 'YData' properties 
for ii = 1:nFrames 
    xData = X + pathX(ii); 
    yData = Y + pathY(ii); 
    zData = Z + pathZ(ii); 
    set(hImg, 'XData', xData, 'YData', yData, 'ZData', zData); 
    pause(0.1); 
end 
+0

感謝您的回答,但我有兩個問題: a。我想讓圖片在3D軸上移動(它似乎設置不起作用) b.since我的x,y,z向量由randn生成,所以圖片可以隨處移動... –

+0

請參閱已編輯的答案。那是你在找什麼? – wakjah

+0

差不多..我想要一個飛機在picturw的dimnestions中做同樣的事情球...雖然,這個解決方案是令人滿意的,謝謝。 –