LoginSignup
0
0

More than 1 year has passed since last update.

【Matlab】基本的な3次元可視化関数のメモ

Posted at

matlab可視化関数の備忘録

行列データ (2次元配列)

surf() / mesh()

matlabで行列データ(2次元配列)を3次元的に可視化する際によく用いられるのは,surf()やmesh()だと思います.例としてpeaksで生成した行列を入力として実行すると次のような図が得られます.

.mat
%% peaksデータ
data = peaks(50);    % 50×50の行列データ(Z値)

% surf描画
figure("Color","w");
surf(data);          % ハイトマップとして立体的に可視化する

% mesh描画
figure("Color","w"); 
mesh(data);      % エッジのみを描画する
% ※内部的にはどちらもsurface()のパラメータを変えているだけ

image.png

上のように単一の行列を引数に与えた場合はZDataとして扱われますが,X/YDataも指定することが出来ます.
image.png

↓ xyz全てを指定した描画の例

.mat
[x,y,z] = sphere(50);          % create a sphere 
surf(x,y,z);            % plot spherical surface

image.png

quiver3()

また,面の法線などの空間ベクトルを描画したいときにはquiver3を用います.

.mat
% ダミーデータ
[X,Y] = meshgrid(-pi/2:pi/8:pi/2,-pi/2:pi/8:pi/2);  % 単調増加の格子点xy座標
Z = sin(X) + cos(Y);                                
[U,V,W] = surfnorm(Z);                              % 面の法線ベクトル

% 可視化
quiver3(X,Y,Z,U,V,W,'r')
axis equal

image.png

ベクトルデータ (1次元配列)

plot3()

3次元のラインプロットができます.LineSpecを指定することで実線,破線,点などの描画を切り替えられます.

.mat
% ダミーデータ(行ベクトル)
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);
% 可視化
plot3(st,ct,t);

image.png

その他

matlabでは行列やベクトルデータの要素にアクセスする際,単一の要素だけではなく,"変数(〇:〇)"のような形で部分要素を取得することが出来ます.自前で実装数必要がないため,可視化関数にデータを渡すときにも便利です.

.mat
    % ダミー配列の生成
    matrix = zeros(5,10);          % 5行10列の配列 (0で初期化)

    % 配列要素へのアクセス (※"[]"ではなく"()"を使う)
    newValue  = data(3,8);         % スカラー
    newVector = data(1:3:, 1);     % 3行1列の行ベクトル
    newMatrix = data(1:3,8:end);   % 3行3列の行列

    % 可視化関数の呼び出しに利用
    surf(data(1:3,8:end));
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0