1 /**************************************************************************/
2 /* Copyright 2009 Tim Day */
3 /* */
4 /* This file is part of Fracplanet */
5 /* */
6 /* Fracplanet is free software: you can redistribute it and/or modify */
7 /* it under the terms of the GNU General Public License as published by */
8 /* the Free Software Foundation, either version 3 of the License, or */
9 /* (at your option) any later version. */
10 /* */
11 /* Fracplanet is distributed in the hope that it will be useful, */
12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
14 /* GNU General Public License for more details. */
15 /* */
16 /* You should have received a copy of the GNU General Public License */
17 /* along with Fracplanet. If not, see <http://www.gnu.org/licenses/>. */
18 /**************************************************************************/
19
20 #include "matrix34.h"
21
Matrix34RotateAboutAxisThrough(const XYZ & axis,float angle,const XYZ & pt)22 Matrix34RotateAboutAxisThrough::Matrix34RotateAboutAxisThrough(const XYZ& axis,float angle,const XYZ& pt)
23 {
24 assign
25 (
26 Matrix34Translate(pt)
27 *Matrix34(Matrix33RotateAboutAxis(axis,angle),XYZ(0.0f,0.0f,0.0f))
28 *Matrix34Translate(-pt)
29 );
30 }
31
Matrix34RotateAboutAxisThrough(const XYZ & axis,const XYZ & pt)32 Matrix34RotateAboutAxisThrough::Matrix34RotateAboutAxisThrough(const XYZ& axis,const XYZ& pt)
33 {
34 const float axis_magnitude=axis.magnitude();
35
36 if (axis_magnitude==0.0f)
37 {
38 assign(Matrix34Identity());
39 }
40 else
41 {
42 assign(Matrix34RotateAboutAxisThrough(axis/axis_magnitude,axis_magnitude,pt));
43 }
44 }
45
46