Home > リソース > MATLABでアニメーション作成 > 9. 運動する直方体のアニメーション〜準備
MATLABでアニメーション作成

9. 運動する直方体のアニメーション〜準備

剛体のアニメーションも、第2、第3項で説明した点のアニメーションと原理は全く同じです。剛体の場合、描画と消去の対象が3次元形状になるという違いがあるだけです。

例として、運動する直方体のアニメーションを作成してみましょう。これは、第6項で作成した一般配置の直方体を描画するスクリプトを基にして行えます。

まず、スクリプトを簡潔にするために、コード1に示すような、直方体の頂点の座標(vertices)と各面の頂点の結び方を指定する行列(faces)を返す関数を定義します。

calcBlock.m
function [vertices, faces] = calcBlock(r, R, Lx, Ly, Lz)
% Return vertices and faces of a block geometry

vertices_0 = [
    0,   0,  0;  % #1
    Lx,  0,  0;  % #2
    0,  Ly,  0;  % #3
    0,   0, Lz;  % #4
    Lx, Ly,  0;  % #5
    0,  Ly, Lz;  % #6
    Lx,  0, Lz;  % #7
    Lx, Ly, Lz]; % #8

vertices = r' + vertices_0*R';

faces = [
    1, 2, 5, 3;  % #1
    1, 3, 6, 4;  % #2
    1, 4, 7, 2;  % #3
    4, 7, 8, 6;  % #4
    2, 5, 8, 7;  % #5
    3, 6, 8, 5]; % #6

end
コード1: 直方体の頂点の座標と各面の頂点の結び方を指定する行列を返すMATLAB関数

コード1の calcBlock() 関数を用いれば、第6項の一般配置の直方体を描画するスクリプトを、次のコード2のように簡潔に書き直すことができます。

make_block.m
% make_block.m

clear; close all;

% Reference position
r = [1; 1; 1];

% Reference orientation
R = eulerXYZ(-pi/3, 0, pi/6);

% Side lengths
Lx = 0.15;
Ly = 0.05;
Lz = 0.30;

% Vertices and faces
[vertices, faces] = calcBlock(r, R, Lx, Ly, Lz);

% Draw patch
figure(1);
h = patch('Faces', faces, 'Vertices', vertices, 'FaceColor', 'y');

% Axes settings
xlabel('x'); ylabel('y'); zlabel('z');
axis vis3d equal;
view([-37.5,30]);
camlight;
grid on;
xlim([0.8,1.3]);
ylim([0.9,1.4]);
zlim([0.8,1.3]);
コード2: 直方体を作成するMATLABスクリプト