⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bvtrf.m

📁 toolbox of BVQX, This is the access between BV and matlab. It will help you to analysis data from BV
💻 M
字号:
function m44 = bvtrf(t, r, s, sh, o)
% bvtrf  - compile a transformation matrix as in the 3D volume tools
%
% FORMAT:       trf = bvtrf(trans, rot [, scale [,shear [, orig]]])
%
% Input fields:
%
%       trans       1x3 translation values (X,Y,Z)
%       rot         1x3 rotation values (around X,Y,Z, in GRAD)
%       scale       1x3 scaling values (256: no scaling, in X,Y,Z dir)
%       shear       1x3 shearing vectors (XY, XZ, YZ, not in BVQX)
%       orig        1x3 origin vector (default: 0, 0, 0)
%
% Output fields:
%
%       trf         4x4 transformation matrix to apply on system coords

% Version:  v0.7b
% Build:    7083015
% Date:     Aug-30 2007, 3:20 PM CEST
% Author:   Jochen Weber, Brain Innovation, B.V., Maastricht, NL
% URL/Info: http://wiki.brainvoyager.com/BVQXtools

% argument check
if nargin < 1 || ...
   ~isa(t, 'double') || ...
    numel(t) ~= 3 || ...
    any(isinf(t) | isnan(t) | t < -256 | t > 256)
    error( ...
        'BVQXtools:BadArgument', ...
        'Invalid translation values.' ...
    );
end
t = t(:)';
if nargin < 2 || ...
   ~isa(r, 'double') || ...
    numel(r) ~= 3 || ...
    any(isinf(r) | isnan(r) | r < -360 | r > 360)
    warning( ...
        'BVQXtools:BadArgument', ...
        'Invalid rotation values; assuming no rotation.' ...
    );
    r = [0, 0, 0];
end
r = r(:)';
if nargin < 3 || ...
   ~isa(s, 'double') || ...
    numel(s) ~= 3
    s = [1, 1, 1];
end
s = s(:)';
s(isinf(s) | isnan(s) | abs(s) < 64 | abs(s) > 1024) = 256;
if nargin < 4 || ...
   ~isa(sh, 'double') || ...
    numel(sh) ~= 3
    sh = [0, 0, 0];
end
sh = sh(:)';
sh(isinf(sh) | isnan(sh) | sh < -256 | sh > 256) = 0;
if nargin < 5 || ...
   ~isa(o, 'double') || ...
    numel(o) ~= 3
    o = [0, 0, 0];
end
o = o(:);
o(isinf(o) | isnan(o) | o < -256 | o > 256) = 0;

% origin appliance
o44 = eye(4);
b44 = eye(4);
if any(o ~= 0)
    o44(1:3, 4) = -o;
    b44(1:3, 4) = o;
end

% translation
t44 = eye(4);
t44(1:3, 4) = -t([2, 3, 1]);

% rotation
r44 = tfmatrix(struct( ...
    'type', {'r', 'r', 'r'}, ...
    'xyz' , {[-r(2) * pi / 180, 0, 0], ...
             [0,  r(3) * pi / 180, 0], ...
             [0, 0, -r(1) * pi / 180]}))';

% scaling
s44 = diag([s([2, 3, 1]) ./ 256, 1]);

% shearing
h44 = eye(4);
h44(1, 2) = sh(2);
h44(1, 3) = sh(3);
h44(2, 3) = sh(1);

% complete matrix
m44 = t44 * o44 * r44 * s44 * b44 * h44;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -