1

原点から始まり、xベクトル、yベクトル、zベクトル(nX1のそれぞれ)で指定されたトラックを通過するボール(ここの写真で指定)のアニメーションを作成したい.getframeを使用する必要があることはわかっているコマンドですが、軸上で画像を移動する方法がわかりません。新しい軸を定義することで、コーナーの 1 つに写真を配置できることを知っています。たとえば (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);

しかし、別の軸を作成したくないので、これは役に立ちません。特定の軸上でボールの動きを定義するにはどうすればよいですか?

4

1 に答える 1

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
于 2013-05-28T09:32:56.067 に答える