source: OGRE/trunk/ogrenew/Docs/api/html/OgreMatrix3_8h-source.html @ 657

Revision 657, 30.0 KB checked in by mattausch, 18 years ago (diff)

added ogre dependencies and patched ogre sources

Line 
1<html>
2<head>
3<title>OgreMatrix3.h Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4<link type="text/css" rel="stylesheet" href="style.css">
5</head>
6
7<body>
8<!-- Generated by Doxygen 1.3.6 -->
9<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
10<h1>OgreMatrix3.h</h1><a href="OgreMatrix3_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span>
1100002 <span class="comment">-----------------------------------------------------------------------------</span>
1200003 <span class="comment">This source file is part of OGRE</span>
1300004 <span class="comment">    (Object-oriented Graphics Rendering Engine)</span>
1400005 <span class="comment">For the latest info, see http://www.ogre3d.org/</span>
1500006 <span class="comment"></span>
1600007 <span class="comment">Copyright (c) 2000-2005 The OGRE Team</span>
1700008 <span class="comment">Also see acknowledgements in Readme.html</span>
1800009 <span class="comment"></span>
1900010 <span class="comment">This program is free software; you can redistribute it and/or modify it under</span>
2000011 <span class="comment">the terms of the GNU Lesser General Public License as published by the Free Software</span>
2100012 <span class="comment">Foundation; either version 2 of the License, or (at your option) any later</span>
2200013 <span class="comment">version.</span>
2300014 <span class="comment"></span>
2400015 <span class="comment">This program is distributed in the hope that it will be useful, but WITHOUT</span>
2500016 <span class="comment">ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span>
2600017 <span class="comment">FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</span>
2700018 <span class="comment"></span>
2800019 <span class="comment">You should have received a copy of the GNU Lesser General Public License along with</span>
2900020 <span class="comment">this program; if not, write to the Free Software Foundation, Inc., 59 Temple</span>
3000021 <span class="comment">Place - Suite 330, Boston, MA 02111-1307, USA, or go to</span>
3100022 <span class="comment">http://www.gnu.org/copyleft/lesser.txt.</span>
3200023 <span class="comment">-----------------------------------------------------------------------------</span>
3300024 <span class="comment">*/</span>
3400025 <span class="preprocessor">#ifndef __Matrix3_H__</span>
3500026 <span class="preprocessor"></span><span class="preprocessor">#define __Matrix3_H__</span>
3600027 <span class="preprocessor"></span>
3700028 <span class="preprocessor">#include "<a class="code" href="OgrePrerequisites_8h.html">OgrePrerequisites.h</a>"</span>
3800029
3900030 <span class="preprocessor">#include "<a class="code" href="OgreVector3_8h.html">OgreVector3.h</a>"</span>
4000031
4100032 <span class="comment">// NB All code adapted from Wild Magic 0.2 Matrix math (free source code)</span>
4200033 <span class="comment">// http://www.magic-software.com</span>
4300034
4400035 <span class="comment">// NOTE.  The (x,y,z) coordinate system is assumed to be right-handed.</span>
4500036 <span class="comment">// Coordinate axis rotation matrices are of the form</span>
4600037 <span class="comment">//   RX =    1       0       0</span>
4700038 <span class="comment">//           0     cos(t) -sin(t)</span>
4800039 <span class="comment">//           0     sin(t)  cos(t)</span>
4900040 <span class="comment">// where t &gt; 0 indicates a counterclockwise rotation in the yz-plane</span>
5000041 <span class="comment">//   RY =  cos(t)    0     sin(t)</span>
5100042 <span class="comment">//           0       1       0</span>
5200043 <span class="comment">//        -sin(t)    0     cos(t)</span>
5300044 <span class="comment">// where t &gt; 0 indicates a counterclockwise rotation in the zx-plane</span>
5400045 <span class="comment">//   RZ =  cos(t) -sin(t)    0</span>
5500046 <span class="comment">//         sin(t)  cos(t)    0</span>
5600047 <span class="comment">//           0       0       1</span>
5700048 <span class="comment">// where t &gt; 0 indicates a counterclockwise rotation in the xy-plane.</span>
5800049
5900050 <span class="keyword">namespace </span>Ogre
6000051 {
61<a name="l00059"></a><a class="code" href="classOgre_1_1Matrix3.html">00059</a>     <span class="keyword">class </span><a class="code" href="OgrePlatform_8h.html#a16">_OgreExport</a> Matrix3
6200060     {
6300061     <span class="keyword">public</span>:
64<a name="l00066"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a0">00066</a>         <span class="keyword">inline</span> Matrix3 () {};
65<a name="l00067"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a1">00067</a>         <span class="keyword">inline</span> <span class="keyword">explicit</span> Matrix3 (<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a420">Real</a> arr[3][3])
6600068         {
6700069             memcpy(m,arr,9*<span class="keyword">sizeof</span>(<a class="code" href="namespaceOgre.html#a420">Real</a>));
6800070         }
69<a name="l00071"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a2">00071</a>         <span class="keyword">inline</span> Matrix3 (<span class="keyword">const</span> Matrix3&amp; rkMatrix)
7000072         {
7100073             memcpy(m,rkMatrix.<a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3p0">m</a>,9*<span class="keyword">sizeof</span>(<a class="code" href="namespaceOgre.html#a420">Real</a>));
7200074         }
73<a name="l00075"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a3">00075</a>         Matrix3 (<a class="code" href="namespaceOgre.html#a420">Real</a> fEntry00, <a class="code" href="namespaceOgre.html#a420">Real</a> fEntry01, <a class="code" href="namespaceOgre.html#a420">Real</a> fEntry02,
7400076                     <a class="code" href="namespaceOgre.html#a420">Real</a> fEntry10, <a class="code" href="namespaceOgre.html#a420">Real</a> fEntry11, <a class="code" href="namespaceOgre.html#a420">Real</a> fEntry12,
7500077                     <a class="code" href="namespaceOgre.html#a420">Real</a> fEntry20, <a class="code" href="namespaceOgre.html#a420">Real</a> fEntry21, <a class="code" href="namespaceOgre.html#a420">Real</a> fEntry22)
7600078         {
7700079             m[0][0] = fEntry00;
7800080             m[0][1] = fEntry01;
7900081             m[0][2] = fEntry02;
8000082             m[1][0] = fEntry10;
8100083             m[1][1] = fEntry11;
8200084             m[1][2] = fEntry12;
8300085             m[2][0] = fEntry20;
8400086             m[2][1] = fEntry21;
8500087             m[2][2] = fEntry22;
8600088         }
8700089
8800090         <span class="comment">// member access, allows use of construct mat[r][c]</span>
89<a name="l00091"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a4">00091</a>         <span class="keyword">inline</span> <a class="code" href="namespaceOgre.html#a420">Real</a>* operator[] (size_t iRow)<span class="keyword"> const</span>
9000092 <span class="keyword">        </span>{
9100093             <span class="keywordflow">return</span> (<a class="code" href="namespaceOgre.html#a420">Real</a>*)m[iRow];
9200094         }
9300095         <span class="comment">/*inline operator Real* ()</span>
9400096 <span class="comment">        {</span>
9500097 <span class="comment">            return (Real*)m[0];</span>
9600098 <span class="comment">        }*/</span>
9700099         <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> GetColumn (size_t iCol) <span class="keyword">const</span>;
9800100         <span class="keywordtype">void</span> SetColumn(size_t iCol, <span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; vec);
9900101         <span class="keywordtype">void</span> FromAxes(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; xAxis, <span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; yAxis, <span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; zAxis);
10000102
10100103         <span class="comment">// assignment and comparison</span>
102<a name="l00104"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a8">00104</a>         <span class="keyword">inline</span> Matrix3&amp; operator= (<span class="keyword">const</span> Matrix3&amp; rkMatrix)
10300105         {
10400106             memcpy(m,rkMatrix.<a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3p0">m</a>,9*<span class="keyword">sizeof</span>(<a class="code" href="namespaceOgre.html#a420">Real</a>));
10500107             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
10600108         }
10700109         <span class="keywordtype">bool</span> <a class="code" href="namespaceOgre.html#a618">operator== </a>(<span class="keyword">const</span> Matrix3&amp; rkMatrix) <span class="keyword">const</span>;
108<a name="l00110"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a10">00110</a>         <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceOgre.html#a619">operator!= </a>(<span class="keyword">const</span> Matrix3&amp; rkMatrix)<span class="keyword"> const</span>
10900111 <span class="keyword">        </span>{
11000112             <span class="keywordflow">return</span> !<a class="code" href="namespaceOgre.html#a618">operator==</a>(rkMatrix);
11100113         }
11200114
11300115         <span class="comment">// arithmetic operations</span>
11400116         Matrix3 operator+ (<span class="keyword">const</span> Matrix3&amp; rkMatrix) <span class="keyword">const</span>;
11500117         Matrix3 operator- (<span class="keyword">const</span> Matrix3&amp; rkMatrix) <span class="keyword">const</span>;
11600118         Matrix3 <a class="code" href="namespaceOgre.html#a612">operator* </a>(<span class="keyword">const</span> Matrix3&amp; rkMatrix) <span class="keyword">const</span>;
11700119         Matrix3 operator- () <span class="keyword">const</span>;
11800120
11900121         <span class="comment">// matrix * vector [3x3 * 3x1 = 3x1]</span>
12000122         <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> <a class="code" href="namespaceOgre.html#a612">operator* </a>(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkVector) <span class="keyword">const</span>;
12100123
12200124         <span class="comment">// vector * matrix [1x3 * 3x3 = 1x3]</span>
12300125         <a class="code" href="class__OgreExport.html">_OgreExport</a> <span class="keyword">friend</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> <a class="code" href="namespaceOgre.html#a612">operator* </a>(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkVector,
12400126             <span class="keyword">const</span> Matrix3&amp; rkMatrix);
12500127
12600128         <span class="comment">// matrix * scalar</span>
12700129         Matrix3 <a class="code" href="namespaceOgre.html#a612">operator* </a>(<a class="code" href="namespaceOgre.html#a420">Real</a> fScalar) <span class="keyword">const</span>;
12800130
12900131         <span class="comment">// scalar * matrix</span>
13000132         <a class="code" href="class__OgreExport.html">_OgreExport</a> <span class="keyword">friend</span> Matrix3 <a class="code" href="namespaceOgre.html#a612">operator* </a>(<a class="code" href="namespaceOgre.html#a420">Real</a> fScalar, <span class="keyword">const</span> Matrix3&amp; rkMatrix);
13100133
13200134         <span class="comment">// utilities</span>
13300135         Matrix3 Transpose () <span class="keyword">const</span>;
13400136         <span class="keywordtype">bool</span> Inverse (Matrix3&amp; rkInverse, <a class="code" href="namespaceOgre.html#a420">Real</a> fTolerance = 1e-06) <span class="keyword">const</span>;
13500137         Matrix3 Inverse (<a class="code" href="namespaceOgre.html#a420">Real</a> fTolerance = 1e-06) <span class="keyword">const</span>;
13600138         <a class="code" href="namespaceOgre.html#a420">Real</a> Determinant () <span class="keyword">const</span>;
13700139
13800140         <span class="comment">// singular value decomposition</span>
13900141         <span class="keywordtype">void</span> SingularValueDecomposition (Matrix3&amp; rkL, <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkS,
14000142             Matrix3&amp; rkR) <span class="keyword">const</span>;
14100143         <span class="keywordtype">void</span> SingularValueComposition (<span class="keyword">const</span> Matrix3&amp; rkL,
14200144             <span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkS, <span class="keyword">const</span> Matrix3&amp; rkR);
14300145
14400146         <span class="comment">// Gram-Schmidt orthonormalization (applied to columns of rotation matrix)</span>
14500147         <span class="keywordtype">void</span> Orthonormalize ();
14600148
14700149         <span class="comment">// orthogonal Q, diagonal D, upper triangular U stored as (u01,u02,u12)</span>
14800150         <span class="keywordtype">void</span> QDUDecomposition (Matrix3&amp; rkQ, <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkD,
14900151             <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkU) <span class="keyword">const</span>;
15000152
15100153         <a class="code" href="namespaceOgre.html#a420">Real</a> SpectralNorm () <span class="keyword">const</span>;
15200154
15300155         <span class="comment">// matrix must be orthonormal</span>
15400156         <span class="keywordtype">void</span> ToAxisAngle (<a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkAxis, <a class="code" href="classOgre_1_1Radian.html">Radian</a>&amp; rfAngle) <span class="keyword">const</span>;
155<a name="l00157"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a27">00157</a>         <span class="keyword">inline</span> <span class="keywordtype">void</span> ToAxisAngle (<a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkAxis, <a class="code" href="classOgre_1_1Degree.html">Degree</a>&amp; rfAngle)<span class="keyword"> const </span>{
15600158             <a class="code" href="classOgre_1_1Radian.html">Radian</a> r;
15700159             ToAxisAngle ( rkAxis, r );
15800160             rfAngle = r;
15900161         }
16000162         <span class="keywordtype">void</span> FromAxisAngle (<span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkAxis, <span class="keyword">const</span> <a class="code" href="classOgre_1_1Radian.html">Radian</a>&amp; fRadians);
16100163 <span class="preprocessor">#ifndef OGRE_FORCE_ANGLE_TYPES</span>
16200164 <span class="preprocessor"></span>        <span class="keyword">inline</span> <span class="keywordtype">void</span> ToAxisAngle (<a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkAxis, <a class="code" href="namespaceOgre.html#a420">Real</a>&amp; rfRadians)<span class="keyword"> const </span>{
16300165             <a class="code" href="classOgre_1_1Radian.html">Radian</a> r;
16400166             ToAxisAngle ( rkAxis, r );
16500167             rfRadians = r.<a class="code" href="classOgre_1_1Radian.html#Ogre_1_1Radiana6">valueRadians</a>();
16600168         }
16700169         <span class="keyword">inline</span> <span class="keywordtype">void</span> FromAxisAngle (<span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkAxis, <a class="code" href="namespaceOgre.html#a420">Real</a> fRadians) {
16800170             FromAxisAngle ( rkAxis, Radian(fRadians) );
16900171         }
17000172 <span class="preprocessor">#endif//OGRE_FORCE_ANGLE_TYPES</span>
17100173 <span class="preprocessor"></span>
17200174         <span class="comment">// The matrix must be orthonormal.  The decomposition is yaw*pitch*roll</span>
17300175         <span class="comment">// where yaw is rotation about the Up vector, pitch is rotation about the</span>
17400176         <span class="comment">// Right axis, and roll is rotation about the Direction axis.</span>
17500177         <span class="keywordtype">bool</span> ToEulerAnglesXYZ (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
17600178             Radian&amp; rfRAngle) <span class="keyword">const</span>;
17700179         <span class="keywordtype">bool</span> ToEulerAnglesXZY (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
17800180             Radian&amp; rfRAngle) <span class="keyword">const</span>;
17900181         <span class="keywordtype">bool</span> ToEulerAnglesYXZ (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
18000182             Radian&amp; rfRAngle) <span class="keyword">const</span>;
18100183         <span class="keywordtype">bool</span> ToEulerAnglesYZX (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
18200184             Radian&amp; rfRAngle) <span class="keyword">const</span>;
18300185         <span class="keywordtype">bool</span> ToEulerAnglesZXY (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
18400186             Radian&amp; rfRAngle) <span class="keyword">const</span>;
18500187         <span class="keywordtype">bool</span> ToEulerAnglesZYX (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
18600188             Radian&amp; rfRAngle) <span class="keyword">const</span>;
18700189         <span class="keywordtype">void</span> FromEulerAnglesXYZ (<span class="keyword">const</span> Radian&amp; fYAngle, <span class="keyword">const</span> Radian&amp; fPAngle, <span class="keyword">const</span> Radian&amp; fRAngle);
18800190         <span class="keywordtype">void</span> FromEulerAnglesXZY (<span class="keyword">const</span> Radian&amp; fYAngle, <span class="keyword">const</span> Radian&amp; fPAngle, <span class="keyword">const</span> Radian&amp; fRAngle);
18900191         <span class="keywordtype">void</span> FromEulerAnglesYXZ (<span class="keyword">const</span> Radian&amp; fYAngle, <span class="keyword">const</span> Radian&amp; fPAngle, <span class="keyword">const</span> Radian&amp; fRAngle);
19000192         <span class="keywordtype">void</span> FromEulerAnglesYZX (<span class="keyword">const</span> Radian&amp; fYAngle, <span class="keyword">const</span> Radian&amp; fPAngle, <span class="keyword">const</span> Radian&amp; fRAngle);
19100193         <span class="keywordtype">void</span> FromEulerAnglesZXY (<span class="keyword">const</span> Radian&amp; fYAngle, <span class="keyword">const</span> Radian&amp; fPAngle, <span class="keyword">const</span> Radian&amp; fRAngle);
19200194         <span class="keywordtype">void</span> FromEulerAnglesZYX (<span class="keyword">const</span> Radian&amp; fYAngle, <span class="keyword">const</span> Radian&amp; fPAngle, <span class="keyword">const</span> Radian&amp; fRAngle);
19300195 <span class="preprocessor">#ifndef OGRE_FORCE_ANGLE_TYPES</span>
19400196 <span class="preprocessor"></span>        <span class="keyword">inline</span> <span class="keywordtype">bool</span> ToEulerAnglesXYZ (<span class="keywordtype">float</span>&amp; rfYAngle, <span class="keywordtype">float</span>&amp; rfPAngle,
19500197             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
19600198             Radian y, p, r;
19700199             <span class="keywordtype">bool</span> b = ToEulerAnglesXYZ(y,p,r);
19800200             rfYAngle = y.valueRadians();
19900201             rfPAngle = p.valueRadians();
20000202             rfRAngle = r.valueRadians();
20100203             <span class="keywordflow">return</span> b;
20200204         }
20300205         <span class="keyword">inline</span> <span class="keywordtype">bool</span> ToEulerAnglesXZY (<span class="keywordtype">float</span>&amp; rfYAngle, <span class="keywordtype">float</span>&amp; rfPAngle,
20400206             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
20500207             Radian y, p, r;
20600208             <span class="keywordtype">bool</span> b = ToEulerAnglesXZY(y,p,r);
20700209             rfYAngle = y.valueRadians();
20800210             rfPAngle = p.valueRadians();
20900211             rfRAngle = r.valueRadians();
21000212             <span class="keywordflow">return</span> b;
21100213         }
21200214         <span class="keyword">inline</span> <span class="keywordtype">bool</span> ToEulerAnglesYXZ (<span class="keywordtype">float</span>&amp; rfYAngle, <span class="keywordtype">float</span>&amp; rfPAngle,
21300215             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
21400216             Radian y, p, r;
21500217             <span class="keywordtype">bool</span> b = ToEulerAnglesYXZ(y,p,r);
21600218             rfYAngle = y.valueRadians();
21700219             rfPAngle = p.valueRadians();
21800220             rfRAngle = r.valueRadians();
21900221             <span class="keywordflow">return</span> b;
22000222         }
22100223         <span class="keyword">inline</span> <span class="keywordtype">bool</span> ToEulerAnglesYZX (<span class="keywordtype">float</span>&amp; rfYAngle, <span class="keywordtype">float</span>&amp; rfPAngle,
22200224             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
22300225             Radian y, p, r;
22400226             <span class="keywordtype">bool</span> b = ToEulerAnglesYZX(y,p,r);
22500227             rfYAngle = y.valueRadians();
22600228             rfPAngle = p.valueRadians();
22700229             rfRAngle = r.valueRadians();
22800230             <span class="keywordflow">return</span> b;
22900231         }
23000232         <span class="keyword">inline</span> <span class="keywordtype">bool</span> ToEulerAnglesZXY (<span class="keywordtype">float</span>&amp; rfYAngle, <span class="keywordtype">float</span>&amp; rfPAngle,
23100233             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
23200234             Radian y, p, r;
23300235             <span class="keywordtype">bool</span> b = ToEulerAnglesZXY(y,p,r);
23400236             rfYAngle = y.valueRadians();
23500237             rfPAngle = p.valueRadians();
23600238             rfRAngle = r.valueRadians();
23700239             <span class="keywordflow">return</span> b;
23800240         }
23900241         <span class="keyword">inline</span> <span class="keywordtype">bool</span> ToEulerAnglesZYX (<span class="keywordtype">float</span>&amp; rfYAngle, <span class="keywordtype">float</span>&amp; rfPAngle,
24000242             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
24100243             Radian y, p, r;
24200244             <span class="keywordtype">bool</span> b = ToEulerAnglesZYX(y,p,r);
24300245             rfYAngle = y.valueRadians();
24400246             rfPAngle = p.valueRadians();
24500247             rfRAngle = r.valueRadians();
24600248             <span class="keywordflow">return</span> b;
24700249         }
24800250         <span class="keyword">inline</span> <span class="keywordtype">void</span> FromEulerAnglesXYZ (<span class="keywordtype">float</span> fYAngle, <span class="keywordtype">float</span> fPAngle, <span class="keywordtype">float</span> fRAngle) {
24900251             FromEulerAnglesXYZ ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
25000252         }
25100253         <span class="keyword">inline</span> <span class="keywordtype">void</span> FromEulerAnglesXZY (<span class="keywordtype">float</span> fYAngle, <span class="keywordtype">float</span> fPAngle, <span class="keywordtype">float</span> fRAngle) {
25200254             FromEulerAnglesXZY ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
25300255         }
25400256         <span class="keyword">inline</span> <span class="keywordtype">void</span> FromEulerAnglesYXZ (<span class="keywordtype">float</span> fYAngle, <span class="keywordtype">float</span> fPAngle, <span class="keywordtype">float</span> fRAngle) {
25500257             FromEulerAnglesYXZ ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
25600258         }
25700259         <span class="keyword">inline</span> <span class="keywordtype">void</span> FromEulerAnglesYZX (<span class="keywordtype">float</span> fYAngle, <span class="keywordtype">float</span> fPAngle, <span class="keywordtype">float</span> fRAngle) {
25800260             FromEulerAnglesYZX ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
25900261         }
26000262         <span class="keyword">inline</span> <span class="keywordtype">void</span> FromEulerAnglesZXY (<span class="keywordtype">float</span> fYAngle, <span class="keywordtype">float</span> fPAngle, <span class="keywordtype">float</span> fRAngle) {
26100263             FromEulerAnglesZXY ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
26200264         }
26300265         <span class="keyword">inline</span> <span class="keywordtype">void</span> FromEulerAnglesZYX (<span class="keywordtype">float</span> fYAngle, <span class="keywordtype">float</span> fPAngle, <span class="keywordtype">float</span> fRAngle) {
26400266             FromEulerAnglesZYX ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
26500267         }
26600268 <span class="preprocessor">#endif//OGRE_FORCE_ANGLE_TYPES</span>
26700269 <span class="preprocessor"></span>        <span class="comment">// eigensolver, matrix must be symmetric</span>
26800270         <span class="keywordtype">void</span> EigenSolveSymmetric (<a class="code" href="namespaceOgre.html#a420">Real</a> afEigenvalue[3],
26900271             <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> akEigenvector[3]) <span class="keyword">const</span>;
27000272
27100273         <span class="keyword">static</span> <span class="keywordtype">void</span> TensorProduct (<span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkU, <span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkV,
27200274             Matrix3&amp; rkProduct);
27300275
274<a name="l00276"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3s0">00276</a>         <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a420">Real</a> EPSILON;
275<a name="l00277"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3s1">00277</a>         <span class="keyword">static</span> <span class="keyword">const</span> Matrix3 ZERO;
276<a name="l00278"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3s2">00278</a>         <span class="keyword">static</span> <span class="keyword">const</span> Matrix3 IDENTITY;
27700279
27800280     <span class="keyword">protected</span>:
27900281         <span class="comment">// support for eigensolver</span>
28000282         <span class="keywordtype">void</span> Tridiagonal (<a class="code" href="namespaceOgre.html#a420">Real</a> afDiag[3], <a class="code" href="namespaceOgre.html#a420">Real</a> afSubDiag[3]);
28100283         <span class="keywordtype">bool</span> QLAlgorithm (<a class="code" href="namespaceOgre.html#a420">Real</a> afDiag[3], <a class="code" href="namespaceOgre.html#a420">Real</a> afSubDiag[3]);
28200284
28300285         <span class="comment">// support for singular value decomposition</span>
284<a name="l00286"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3t0">00286</a>         <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a420">Real</a> ms_fSvdEpsilon;
285<a name="l00287"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3t1">00287</a>         <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ms_iSvdMaxIterations;
28600288         <span class="keyword">static</span> <span class="keywordtype">void</span> Bidiagonalize (Matrix3&amp; kA, Matrix3&amp; kL,
28700289             Matrix3&amp; kR);
28800290         <span class="keyword">static</span> <span class="keywordtype">void</span> GolubKahanStep (Matrix3&amp; kA, Matrix3&amp; kL,
28900291             Matrix3&amp; kR);
29000292
29100293         <span class="comment">// support for spectral norm</span>
29200294         <span class="keyword">static</span> <a class="code" href="namespaceOgre.html#a420">Real</a> MaxCubicRoot (<a class="code" href="namespaceOgre.html#a420">Real</a> afCoeff[3]);
29300295
294<a name="l00296"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3p0">00296</a>         <a class="code" href="namespaceOgre.html#a420">Real</a> m[3][3];
29500297
29600298         <span class="comment">// for faster access</span>
297<a name="l00299"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3n0">00299</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOgre_1_1Matrix4.html">Matrix4</a>;
29800300     };
29900301 }
30000302 <span class="preprocessor">#endif</span>
301</pre></div><hr>
302<p>
303Copyright &copy; 2000-2005 by The OGRE Team<br />
304<!--Creative Commons License--><a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/"><img alt="Creative Commons License" border="0" src="http://creativecommons.org/images/public/somerights20.png"/></a><br/>
305This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License</a>.<br/>
306                <!--/Creative Commons License--><!-- <rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
307                <Work rdf:about="">
308                        <license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/" />
309        <dc:type rdf:resource="http://purl.org/dc/dcmitype/Text" />
310                </Work>
311                <License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/"><permits rdf:resource="http://web.resource.org/cc/Reproduction"/><permits rdf:resource="http://web.resource.org/cc/Distribution"/><requires rdf:resource="http://web.resource.org/cc/Notice"/><requires rdf:resource="http://web.resource.org/cc/Attribution"/><permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/><requires rdf:resource="http://web.resource.org/cc/ShareAlike"/></License></rdf:RDF> -->
312
313Last modified Sun Feb 12 12:59:47 2006
314</p>
315</body>
316</html>
Note: See TracBrowser for help on using the repository browser.