Home > matGeom > geom3d > createScaling3d.m

createScaling3d

PURPOSE ^

CREATESCALING3D Create the 4x4 matrix of a 3D scaling.

SYNOPSIS ^

function trans = createScaling3d(varargin)

DESCRIPTION ^

CREATESCALING3D Create the 4x4 matrix of a 3D scaling.

   TRANS = createScaling3d(S);
   returns the scaling transform corresponding to a scaling factor S in
   each direction. S can be a scalar, or a 1-by-3 vector containing the
   scaling factor in each direction.

   TRANS = createScaling3d(SX, SY, SZ);
   returns the scaling transform corresponding to a different scaling
   factor in each direction.

   The returned matrix has the form :
   [SX  0  0  0]
   [ 0 SY  0  0]
   [ 0  0 SZ  0]
   [ 0  0  0  0]

   See also:
   transforms3d, transformPoint3d, transformVector3d, createTranslation3d,
   createRotationOx, createRotationOy, createRotationOz

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function trans = createScaling3d(varargin)
0002 %CREATESCALING3D Create the 4x4 matrix of a 3D scaling.
0003 %
0004 %   TRANS = createScaling3d(S);
0005 %   returns the scaling transform corresponding to a scaling factor S in
0006 %   each direction. S can be a scalar, or a 1-by-3 vector containing the
0007 %   scaling factor in each direction.
0008 %
0009 %   TRANS = createScaling3d(SX, SY, SZ);
0010 %   returns the scaling transform corresponding to a different scaling
0011 %   factor in each direction.
0012 %
0013 %   The returned matrix has the form :
0014 %   [SX  0  0  0]
0015 %   [ 0 SY  0  0]
0016 %   [ 0  0 SZ  0]
0017 %   [ 0  0  0  0]
0018 %
0019 %   See also:
0020 %   transforms3d, transformPoint3d, transformVector3d, createTranslation3d,
0021 %   createRotationOx, createRotationOy, createRotationOz
0022 
0023 %
0024 %   ---------
0025 %   author : David Legland
0026 %   INRA - TPV URPOI - BIA IMASTE
0027 %   created the 20/04/2006.
0028 %
0029 
0030 %   HISTORY
0031 %   25/11/2008 rename from scale3d to scaling3d
0032 %   30/04/2009 rename to createScaling3d
0033 
0034 
0035 %% default arguments
0036 sx = 1;
0037 sy = 1;
0038 sz = 1;
0039 center = [0 0 0];
0040 
0041 %% process input parameters
0042 if nargin == 1
0043     % only one argument -> scaling factor
0044     [sx, sy, sz]= parseScalingFactors(varargin{1});
0045     
0046 elseif nargin == 2
0047     % 2 arguments, giving center and uniform scaling
0048     center = varargin{1};
0049     [sx, sy, sz]= parseScalingFactors(varargin{2});
0050 
0051 elseif nargin == 3
0052     % 3 arguments, giving scaling in each direction
0053     sx = varargin{1};
0054     sy = varargin{2};
0055     sz = varargin{3};
0056     
0057 elseif nargin == 4
0058     % 4 arguments, giving center and scaling in each direction
0059     center = varargin{1};
0060     sx = varargin{2};
0061     sy = varargin{3};
0062     sz = varargin{4};
0063 end
0064 
0065 %% create the scaling matrix
0066 trans = [...
0067     sx 0 0 center(1)*(1-sx);...
0068     0 sy 0 center(2)*(1-sy);...
0069     0 0 sz center(3)*(1-sz);...
0070     0 0 0 1];
0071 
0072 %% Helper function
0073 function [sx, sy, sz] = parseScalingFactors(var)
0074 
0075 if length(var)==1
0076     % same scaling factor in each direction
0077     sx = var;
0078     sy = var;
0079     sz = var;
0080 elseif length(var)==3
0081     % scaling is a vector, giving different scaling in each direction
0082     sx = var(1);
0083     sy = var(2);
0084     sz = var(3);
0085 else
0086     error('wrong size for first parameter of "createScaling3d"');
0087 end

Generated on Wed 16-Feb-2022 15:10:47 by m2html © 2003-2019