2013-05-27 3 views
1

Я хочу сделать анимацию шара (заданную картиной here), которая начинается с начала координат и проходит через дорожку, заданную вектором x, y-вектором, z-вектором (каждый из nX1). Я знаю, что мне нужно использовать команду getframe, но я не знаю, как перемещать изображение по оси. Я знаю, что я могу поместить изображение в одном из угла, определив новую ось, например, (exmaple взяты из MATLAB OFFICAL форума):Размещение изображения на оси 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. Я хочу, чтобы изображение перемещалось по трехмерной оси (что кажется, что набор не работает) b.since Мои векторы x, y, z генерируются randn, поэтому картина теоретически может перемещаться повсюду ... –

+0

См. Отредактированный ответ , Это то, что вы ищете? – wakjah

+0

Почти ... Я хочу, чтобы в размытиях изображалась плоскость, которая делает то же самое, что делает сфера ... Хотя это решение удовлетворяет, спасибо. –

Смежные вопросы