📄 bvtrf.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 + -