]> Creatis software - CreaPhase.git/blob - octave_packages/nurbs-1.3.6/vecrot.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / nurbs-1.3.6 / vecrot.m
1 function rx = vecrot(angle, vector)
2
3 % VECROT: Transformation matrix for a rotation around the axis given by a vector. 
4
5 % Calling Sequence:
6
7 %   rx = vecrot (angle, vector);
8
9 % INPUT:
10
11 %   angle               : rotation angle defined in radians
12 %   vector              : vector defining the rotation axis
13 %
14 % OUTPUT:
15
16 %   rx          : (4x4) Transformation matrix.
17
18
19 % Description:
20
21 %   Return the (4x4) Transformation matrix for a rotation about the x axis
22 %   by the defined angle.
23
24 % See also:
25
26 %    nrbtform
27 %
28 %    Copyright (C) 2011 Rafael Vazquez
29 %
30 %    This program is free software: you can redistribute it and/or modify
31 %    it under the terms of the GNU General Public License as published by
32 %    the Free Software Foundation, either version 2 of the License, or
33 %    (at your option) any later version.
34
35 %    This program is distributed in the hope that it will be useful,
36 %    but WITHOUT ANY WARRANTY; without even the implied warranty of
37 %    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
38 %    GNU General Public License for more details.
39 %
40 %    You should have received a copy of the GNU General Public License
41 %    along with this program.  If not, see <http://www.gnu.org/licenses/>.
42
43 % Normalize the vector
44 vec = vector / norm (vector);
45
46 sn = sin (angle);
47 cn = cos (angle);
48 rx = [cn+vec(1)^2*(1-cn), vec(1)*vec(2)*(1-cn)-vec(3)*sn, vec(1)*vec(3)*(1-cn)+vec(2)*sn, 0; 
49     vec(1)*vec(2)*(1-cn)+vec(3)*sn, cn+vec(2)^2*(1-cn), vec(2)*vec(3)*(1-cn)-vec(1)*sn, 0; 
50     vec(1)*vec(3)*(1-cn)-vec(2)*sn, vec(2)*vec(3)*(1-cn)+vec(1)*sn, cn+vec(3)^2*(1-cn), 0; 
51     0 0 0 1];
52
53 end