Sophie

Sophie

distrib > Mandriva > 10.2 > i586 > media > contrib > by-pkgid > 04e5d8c10ae76748689b4e7f48e0fa33 > files > 600

libogre5-devel-1.0.0-1mdk.i586.rpm

<html>
<head>
<title>OgreMatrix3.h Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<link type="text/css" rel="stylesheet" href="style.css">
</head>

<body>
<!-- Generated by Doxygen 1.3.6 -->
<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>
<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>
00002 <span class="comment">-----------------------------------------------------------------------------</span>
00003 <span class="comment">This source file is part of OGRE</span>
00004 <span class="comment">    (Object-oriented Graphics Rendering Engine)</span>
00005 <span class="comment">For the latest info, see http://www.ogre3d.org/</span>
00006 <span class="comment"></span>
00007 <span class="comment">Copyright (c) 2000-2005 The OGRE Team</span>
00008 <span class="comment">Also see acknowledgements in Readme.html</span>
00009 <span class="comment"></span>
00010 <span class="comment">This program is free software; you can redistribute it and/or modify it under</span>
00011 <span class="comment">the terms of the GNU Lesser General Public License as published by the Free Software</span>
00012 <span class="comment">Foundation; either version 2 of the License, or (at your option) any later</span>
00013 <span class="comment">version.</span>
00014 <span class="comment"></span>
00015 <span class="comment">This program is distributed in the hope that it will be useful, but WITHOUT</span>
00016 <span class="comment">ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span>
00017 <span class="comment">FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</span>
00018 <span class="comment"></span>
00019 <span class="comment">You should have received a copy of the GNU Lesser General Public License along with</span>
00020 <span class="comment">this program; if not, write to the Free Software Foundation, Inc., 59 Temple</span>
00021 <span class="comment">Place - Suite 330, Boston, MA 02111-1307, USA, or go to</span>
00022 <span class="comment">http://www.gnu.org/copyleft/lesser.txt.</span>
00023 <span class="comment">-----------------------------------------------------------------------------</span>
00024 <span class="comment">*/</span>
00025 <span class="preprocessor">#ifndef __Matrix3_H__</span>
00026 <span class="preprocessor"></span><span class="preprocessor">#define __Matrix3_H__</span>
00027 <span class="preprocessor"></span>
00028 <span class="preprocessor">#include "<a class="code" href="OgrePrerequisites_8h.html">OgrePrerequisites.h</a>"</span>
00029 
00030 <span class="preprocessor">#include "<a class="code" href="OgreVector3_8h.html">OgreVector3.h</a>"</span>
00031 
00032 <span class="comment">// NB All code adapted from Wild Magic 0.2 Matrix math (free source code)</span>
00033 <span class="comment">// http://www.magic-software.com</span>
00034 
00035 <span class="comment">// NOTE.  The (x,y,z) coordinate system is assumed to be right-handed.</span>
00036 <span class="comment">// Coordinate axis rotation matrices are of the form</span>
00037 <span class="comment">//   RX =    1       0       0</span>
00038 <span class="comment">//           0     cos(t) -sin(t)</span>
00039 <span class="comment">//           0     sin(t)  cos(t)</span>
00040 <span class="comment">// where t &gt; 0 indicates a counterclockwise rotation in the yz-plane</span>
00041 <span class="comment">//   RY =  cos(t)    0     sin(t)</span>
00042 <span class="comment">//           0       1       0</span>
00043 <span class="comment">//        -sin(t)    0     cos(t)</span>
00044 <span class="comment">// where t &gt; 0 indicates a counterclockwise rotation in the zx-plane</span>
00045 <span class="comment">//   RZ =  cos(t) -sin(t)    0</span>
00046 <span class="comment">//         sin(t)  cos(t)    0</span>
00047 <span class="comment">//           0       0       1</span>
00048 <span class="comment">// where t &gt; 0 indicates a counterclockwise rotation in the xy-plane.</span>
00049 
00050 <span class="keyword">namespace </span>Ogre
00051 {
<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#a13">_OgreExport</a> Matrix3
00060     {
00061     <span class="keyword">public</span>:
<a name="l00066"></a><a class="code" href="classOgre_1_1Matrix3.html#Ogre_1_1Matrix3a0">00066</a>         <span class="keyword">inline</span> Matrix3 () {};
<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])
00068         {
00069             memcpy(m,arr,9*<span class="keyword">sizeof</span>(<a class="code" href="namespaceOgre.html#a420">Real</a>));
00070         }
<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)
00072         {
00073             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>));
00074         }
<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,
00076                     <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,
00077                     <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)
00078         {
00079             m[0][0] = fEntry00;
00080             m[0][1] = fEntry01;
00081             m[0][2] = fEntry02;
00082             m[1][0] = fEntry10;
00083             m[1][1] = fEntry11;
00084             m[1][2] = fEntry12;
00085             m[2][0] = fEntry20;
00086             m[2][1] = fEntry21;
00087             m[2][2] = fEntry22;
00088         }
00089 
00090         <span class="comment">// member access, allows use of construct mat[r][c]</span>
<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>
00092 <span class="keyword">        </span>{
00093             <span class="keywordflow">return</span> (<a class="code" href="namespaceOgre.html#a420">Real</a>*)m[iRow];
00094         }
00095         <span class="comment">/*inline operator Real* ()</span>
00096 <span class="comment">        {</span>
00097 <span class="comment">            return (Real*)m[0];</span>
00098 <span class="comment">        }*/</span>
00099         <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> GetColumn (size_t iCol) <span class="keyword">const</span>;
00100         <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);
00101         <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);
00102 
00103         <span class="comment">// assignment and comparison</span>
<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)
00105         {
00106             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>));
00107             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00108         }
00109         <span class="keywordtype">bool</span> <a class="code" href="namespaceOgre.html#a617">operator== </a>(<span class="keyword">const</span> Matrix3&amp; rkMatrix) <span class="keyword">const</span>;
<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#a618">operator!= </a>(<span class="keyword">const</span> Matrix3&amp; rkMatrix)<span class="keyword"> const</span>
00111 <span class="keyword">        </span>{
00112             <span class="keywordflow">return</span> !<a class="code" href="namespaceOgre.html#a617">operator==</a>(rkMatrix);
00113         }
00114 
00115         <span class="comment">// arithmetic operations</span>
00116         Matrix3 operator+ (<span class="keyword">const</span> Matrix3&amp; rkMatrix) <span class="keyword">const</span>;
00117         Matrix3 operator- (<span class="keyword">const</span> Matrix3&amp; rkMatrix) <span class="keyword">const</span>;
00118         Matrix3 <a class="code" href="namespaceOgre.html#a611">operator* </a>(<span class="keyword">const</span> Matrix3&amp; rkMatrix) <span class="keyword">const</span>;
00119         Matrix3 operator- () <span class="keyword">const</span>;
00120 
00121         <span class="comment">// matrix * vector [3x3 * 3x1 = 3x1]</span>
00122         <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> <a class="code" href="namespaceOgre.html#a611">operator* </a>(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkVector) <span class="keyword">const</span>;
00123 
00124         <span class="comment">// vector * matrix [1x3 * 3x3 = 1x3]</span>
00125         <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#a611">operator* </a>(<span class="keyword">const</span> <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkVector,
00126             <span class="keyword">const</span> Matrix3&amp; rkMatrix);
00127 
00128         <span class="comment">// matrix * scalar</span>
00129         Matrix3 <a class="code" href="namespaceOgre.html#a611">operator* </a>(<a class="code" href="namespaceOgre.html#a420">Real</a> fScalar) <span class="keyword">const</span>;
00130 
00131         <span class="comment">// scalar * matrix</span>
00132         <a class="code" href="class__OgreExport.html">_OgreExport</a> <span class="keyword">friend</span> Matrix3 <a class="code" href="namespaceOgre.html#a611">operator* </a>(<a class="code" href="namespaceOgre.html#a420">Real</a> fScalar, <span class="keyword">const</span> Matrix3&amp; rkMatrix);
00133 
00134         <span class="comment">// utilities</span>
00135         Matrix3 Transpose () <span class="keyword">const</span>;
00136         <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>;
00137         Matrix3 Inverse (<a class="code" href="namespaceOgre.html#a420">Real</a> fTolerance = 1e-06) <span class="keyword">const</span>;
00138         <a class="code" href="namespaceOgre.html#a420">Real</a> Determinant () <span class="keyword">const</span>;
00139 
00140         <span class="comment">// singular value decomposition</span>
00141         <span class="keywordtype">void</span> SingularValueDecomposition (Matrix3&amp; rkL, <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkS,
00142             Matrix3&amp; rkR) <span class="keyword">const</span>;
00143         <span class="keywordtype">void</span> SingularValueComposition (<span class="keyword">const</span> Matrix3&amp; rkL,
00144             <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);
00145 
00146         <span class="comment">// Gram-Schmidt orthonormalization (applied to columns of rotation matrix)</span>
00147         <span class="keywordtype">void</span> Orthonormalize ();
00148 
00149         <span class="comment">// orthogonal Q, diagonal D, upper triangular U stored as (u01,u02,u12)</span>
00150         <span class="keywordtype">void</span> QDUDecomposition (Matrix3&amp; rkQ, <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkD,
00151             <a class="code" href="classOgre_1_1Vector3.html">Vector3</a>&amp; rkU) <span class="keyword">const</span>;
00152 
00153         <a class="code" href="namespaceOgre.html#a420">Real</a> SpectralNorm () <span class="keyword">const</span>;
00154 
00155         <span class="comment">// matrix must be orthonormal</span>
00156         <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>;
<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>{
00158             <a class="code" href="classOgre_1_1Radian.html">Radian</a> r;
00159             ToAxisAngle ( rkAxis, r );
00160             rfAngle = r;
00161         }
00162         <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);
00163 <span class="preprocessor">#ifndef OGRE_FORCE_ANGLE_TYPES</span>
00164 <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>{
00165             <a class="code" href="classOgre_1_1Radian.html">Radian</a> r;
00166             ToAxisAngle ( rkAxis, r );
00167             rfRadians = r.<a class="code" href="classOgre_1_1Radian.html#Ogre_1_1Radiana6">valueRadians</a>();
00168         }
00169         <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) {
00170             FromAxisAngle ( rkAxis, Radian(fRadians) );
00171         }
00172 <span class="preprocessor">#endif//OGRE_FORCE_ANGLE_TYPES</span>
00173 <span class="preprocessor"></span>
00174         <span class="comment">// The matrix must be orthonormal.  The decomposition is yaw*pitch*roll</span>
00175         <span class="comment">// where yaw is rotation about the Up vector, pitch is rotation about the</span>
00176         <span class="comment">// Right axis, and roll is rotation about the Direction axis.</span>
00177         <span class="keywordtype">bool</span> ToEulerAnglesXYZ (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
00178             Radian&amp; rfRAngle) <span class="keyword">const</span>;
00179         <span class="keywordtype">bool</span> ToEulerAnglesXZY (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
00180             Radian&amp; rfRAngle) <span class="keyword">const</span>;
00181         <span class="keywordtype">bool</span> ToEulerAnglesYXZ (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
00182             Radian&amp; rfRAngle) <span class="keyword">const</span>;
00183         <span class="keywordtype">bool</span> ToEulerAnglesYZX (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
00184             Radian&amp; rfRAngle) <span class="keyword">const</span>;
00185         <span class="keywordtype">bool</span> ToEulerAnglesZXY (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
00186             Radian&amp; rfRAngle) <span class="keyword">const</span>;
00187         <span class="keywordtype">bool</span> ToEulerAnglesZYX (Radian&amp; rfYAngle, Radian&amp; rfPAngle,
00188             Radian&amp; rfRAngle) <span class="keyword">const</span>;
00189         <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);
00190         <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);
00191         <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);
00192         <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);
00193         <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);
00194         <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);
00195 <span class="preprocessor">#ifndef OGRE_FORCE_ANGLE_TYPES</span>
00196 <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,
00197             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
00198             Radian y, p, r;
00199             <span class="keywordtype">bool</span> b = ToEulerAnglesXYZ(y,p,r);
00200             rfYAngle = y.valueRadians();
00201             rfPAngle = p.valueRadians();
00202             rfRAngle = r.valueRadians();
00203             <span class="keywordflow">return</span> b;
00204         }
00205         <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,
00206             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
00207             Radian y, p, r;
00208             <span class="keywordtype">bool</span> b = ToEulerAnglesXZY(y,p,r);
00209             rfYAngle = y.valueRadians();
00210             rfPAngle = p.valueRadians();
00211             rfRAngle = r.valueRadians();
00212             <span class="keywordflow">return</span> b;
00213         }
00214         <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,
00215             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
00216             Radian y, p, r;
00217             <span class="keywordtype">bool</span> b = ToEulerAnglesYXZ(y,p,r);
00218             rfYAngle = y.valueRadians();
00219             rfPAngle = p.valueRadians();
00220             rfRAngle = r.valueRadians();
00221             <span class="keywordflow">return</span> b;
00222         }
00223         <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,
00224             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
00225             Radian y, p, r;
00226             <span class="keywordtype">bool</span> b = ToEulerAnglesYZX(y,p,r);
00227             rfYAngle = y.valueRadians();
00228             rfPAngle = p.valueRadians();
00229             rfRAngle = r.valueRadians();
00230             <span class="keywordflow">return</span> b;
00231         }
00232         <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,
00233             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
00234             Radian y, p, r;
00235             <span class="keywordtype">bool</span> b = ToEulerAnglesZXY(y,p,r);
00236             rfYAngle = y.valueRadians();
00237             rfPAngle = p.valueRadians();
00238             rfRAngle = r.valueRadians();
00239             <span class="keywordflow">return</span> b;
00240         }
00241         <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,
00242             <span class="keywordtype">float</span>&amp; rfRAngle)<span class="keyword"> const </span>{
00243             Radian y, p, r;
00244             <span class="keywordtype">bool</span> b = ToEulerAnglesZYX(y,p,r);
00245             rfYAngle = y.valueRadians();
00246             rfPAngle = p.valueRadians();
00247             rfRAngle = r.valueRadians();
00248             <span class="keywordflow">return</span> b;
00249         }
00250         <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) {
00251             FromEulerAnglesXYZ ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
00252         }
00253         <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) {
00254             FromEulerAnglesXZY ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
00255         }
00256         <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) {
00257             FromEulerAnglesYXZ ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
00258         }
00259         <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) {
00260             FromEulerAnglesYZX ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
00261         }
00262         <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) {
00263             FromEulerAnglesZXY ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
00264         }
00265         <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) {
00266             FromEulerAnglesZYX ( Radian(fYAngle), Radian(fPAngle), Radian(fRAngle) );
00267         }
00268 <span class="preprocessor">#endif//OGRE_FORCE_ANGLE_TYPES</span>
00269 <span class="preprocessor"></span>        <span class="comment">// eigensolver, matrix must be symmetric</span>
00270         <span class="keywordtype">void</span> EigenSolveSymmetric (<a class="code" href="namespaceOgre.html#a420">Real</a> afEigenvalue[3],
00271             <a class="code" href="classOgre_1_1Vector3.html">Vector3</a> akEigenvector[3]) <span class="keyword">const</span>;
00272 
00273         <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,
00274             Matrix3&amp; rkProduct);
00275 
<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;
<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;
<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;
00279 
00280     <span class="keyword">protected</span>:
00281         <span class="comment">// support for eigensolver</span>
00282         <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]);
00283         <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]);
00284 
00285         <span class="comment">// support for singular value decomposition</span>
<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;
<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;
00288         <span class="keyword">static</span> <span class="keywordtype">void</span> Bidiagonalize (Matrix3&amp; kA, Matrix3&amp; kL,
00289             Matrix3&amp; kR);
00290         <span class="keyword">static</span> <span class="keywordtype">void</span> GolubKahanStep (Matrix3&amp; kA, Matrix3&amp; kL,
00291             Matrix3&amp; kR);
00292 
00293         <span class="comment">// support for spectral norm</span>
00294         <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]);
00295 
<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];
00297 
00298         <span class="comment">// for faster access</span>
<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>;
00300     };
00301 }
00302 <span class="preprocessor">#endif</span>
</pre></div><p>
Copyright &copy; 2000-2005 by The OGRE Team<br />
Last modified Wed Feb 23 00:19:08 2005
</p>
</body>
</html>