<html> <head> <title>OgreVector2.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 Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a> | <a class="qindex" href="pages.html">Related Pages</a></div> <h1>OgreVector2.h</h1><a href="OgreVector2_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 __Vector2_H__</span> 00026 <span class="preprocessor"></span><span class="preprocessor">#define __Vector2_H__</span> 00027 <span class="preprocessor"></span> 00028 00029 <span class="preprocessor">#include "<a class="code" href="OgrePrerequisites_8h.html">OgrePrerequisites.h</a>"</span> 00030 <span class="preprocessor">#include "<a class="code" href="OgreMath_8h.html">OgreMath.h</a>"</span> 00031 00032 <span class="keyword">namespace </span>Ogre 00033 { 00034 <a name="l00042"></a><a class="code" href="classOgre_1_1Vector2.html">00042</a> <span class="keyword">class </span><a class="code" href="OgrePlatform_8h.html#a13">_OgreExport</a> Vector2 00043 { 00044 <span class="keyword">public</span>: 00045 <span class="keyword">union </span>{ 00046 <span class="keyword">struct </span>{ <a name="l00047"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">00047</a> <a class="code" href="namespaceOgre.html#a420">Real</a> x, y; 00048 }; <a name="l00049"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o2">00049</a> <a class="code" href="namespaceOgre.html#a420">Real</a> val[2]; 00050 }; 00051 00052 <span class="keyword">public</span>: <a name="l00053"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a0">00053</a> <span class="keyword">inline</span> Vector2() 00054 { 00055 } 00056 <a name="l00057"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a1">00057</a> <span class="keyword">inline</span> Vector2( <a class="code" href="namespaceOgre.html#a420">Real</a> fX, <a class="code" href="namespaceOgre.html#a420">Real</a> fY ) 00058 : x( fX ), y( fY ) 00059 { 00060 } 00061 <a name="l00062"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a2">00062</a> <span class="keyword">inline</span> Vector2( <a class="code" href="namespaceOgre.html#a420">Real</a> afCoordinate[2] ) 00063 : x( afCoordinate[0] ), 00064 y( afCoordinate[1] ) 00065 { 00066 } 00067 <a name="l00068"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a3">00068</a> <span class="keyword">inline</span> Vector2( <span class="keywordtype">int</span> afCoordinate[2] ) 00069 { 00070 x = (<a class="code" href="namespaceOgre.html#a420">Real</a>)afCoordinate[0]; 00071 y = (<a class="code" href="namespaceOgre.html#a420">Real</a>)afCoordinate[1]; 00072 } 00073 <a name="l00074"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a4">00074</a> <span class="keyword">inline</span> Vector2( <span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a420">Real</a>* <span class="keyword">const</span> r ) 00075 : x( r[0] ), y( r[1] ) 00076 { 00077 } 00078 <a name="l00079"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a5">00079</a> <span class="keyword">inline</span> Vector2( <span class="keyword">const</span> Vector2& rkVector ) 00080 : x( rkVector.x ), y( rkVector.y ) 00081 { 00082 } 00083 <a name="l00084"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a6">00084</a> <span class="keyword">inline</span> <a class="code" href="namespaceOgre.html#a420">Real</a> operator [] ( size_t i )<span class="keyword"> const</span> 00085 <span class="keyword"> </span>{ 00086 assert( i < 2 ); 00087 00088 <span class="keywordflow">return</span> *(&x+i); 00089 } 00090 <a name="l00091"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a7">00091</a> <span class="keyword">inline</span> <a class="code" href="namespaceOgre.html#a420">Real</a>& operator [] ( size_t i ) 00092 { 00093 assert( i < 2 ); 00094 00095 <span class="keywordflow">return</span> *(&x+i); 00096 } 00097 <a name="l00102"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a8">00102</a> <span class="keyword">inline</span> Vector2& operator = ( <span class="keyword">const</span> Vector2& rkVector ) 00103 { 00104 x = rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>; 00105 y = rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00106 00107 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 00108 } 00109 <a name="l00110"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a9">00110</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceOgre.html#a617">operator == </a>( <span class="keyword">const</span> Vector2& rkVector )<span class="keyword"> const</span> 00111 <span class="keyword"> </span>{ 00112 <span class="keywordflow">return</span> ( x == rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> && y == rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> ); 00113 } 00114 <a name="l00115"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a10">00115</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> Vector2& rkVector )<span class="keyword"> const</span> 00116 <span class="keyword"> </span>{ 00117 <span class="keywordflow">return</span> ( x != rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> || y != rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> ); 00118 } 00119 00120 <span class="comment">// arithmetic operations</span> <a name="l00121"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a11">00121</a> <span class="keyword">inline</span> Vector2 operator + ( <span class="keyword">const</span> Vector2& rkVector )<span class="keyword"> const</span> 00122 <span class="keyword"> </span>{ 00123 Vector2 kSum; 00124 00125 kSum.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> = x + rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>; 00126 kSum.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> = y + rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00127 00128 <span class="keywordflow">return</span> kSum; 00129 } 00130 <a name="l00131"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a12">00131</a> <span class="keyword">inline</span> Vector2 operator - ( <span class="keyword">const</span> Vector2& rkVector )<span class="keyword"> const</span> 00132 <span class="keyword"> </span>{ 00133 Vector2 kDiff; 00134 00135 kDiff.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> = x - rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>; 00136 kDiff.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> = y - rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00137 00138 <span class="keywordflow">return</span> kDiff; 00139 } 00140 <a name="l00141"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a13">00141</a> <span class="keyword">inline</span> Vector2 <a class="code" href="namespaceOgre.html#a611">operator * </a>( <a class="code" href="namespaceOgre.html#a420">Real</a> fScalar )<span class="keyword"> const</span> 00142 <span class="keyword"> </span>{ 00143 Vector2 kProd; 00144 00145 kProd.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> = fScalar*x; 00146 kProd.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> = fScalar*y; 00147 00148 <span class="keywordflow">return</span> kProd; 00149 } 00150 <a name="l00151"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a14">00151</a> <span class="keyword">inline</span> Vector2 <a class="code" href="namespaceOgre.html#a611">operator * </a>( <span class="keyword">const</span> Vector2& rhs)<span class="keyword"> const</span> 00152 <span class="keyword"> </span>{ 00153 Vector2 kProd; 00154 00155 kProd.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> = rhs.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> * x; 00156 kProd.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> = rhs.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> * y; 00157 00158 <span class="keywordflow">return</span> kProd; 00159 } 00160 <a name="l00161"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a15">00161</a> <span class="keyword">inline</span> Vector2 <a class="code" href="namespaceOgre.html#a612">operator / </a>( <a class="code" href="namespaceOgre.html#a420">Real</a> fScalar )<span class="keyword"> const</span> 00162 <span class="keyword"> </span>{ 00163 assert( fScalar != 0.0 ); 00164 00165 Vector2 kDiv; 00166 00167 <a class="code" href="namespaceOgre.html#a420">Real</a> fInv = 1.0 / fScalar; 00168 kDiv.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> = x * fInv; 00169 kDiv.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> = y * fInv; 00170 00171 <span class="keywordflow">return</span> kDiv; 00172 } 00173 <a name="l00174"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a16">00174</a> <span class="keyword">inline</span> Vector2 operator - ()<span class="keyword"> const</span> 00175 <span class="keyword"> </span>{ 00176 Vector2 kNeg; 00177 00178 kNeg.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> = -x; 00179 kNeg.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> = -y; 00180 00181 <span class="keywordflow">return</span> kNeg; 00182 } 00183 <a name="l00184"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2n0">00184</a> <span class="keyword">inline</span> <span class="keyword">friend</span> Vector2 <a class="code" href="namespaceOgre.html#a611">operator * </a>( <a class="code" href="namespaceOgre.html#a420">Real</a> fScalar, <span class="keyword">const</span> Vector2& rkVector ) 00185 { 00186 Vector2 kProd; 00187 00188 kProd.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> = fScalar * rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>; 00189 kProd.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> = fScalar * rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00190 00191 <span class="keywordflow">return</span> kProd; 00192 } 00193 00194 <span class="comment">// arithmetic updates</span> <a name="l00195"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a17">00195</a> <span class="keyword">inline</span> Vector2& operator += ( <span class="keyword">const</span> Vector2& rkVector ) 00196 { 00197 x += rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>; 00198 y += rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00199 00200 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 00201 } 00202 <a name="l00203"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a18">00203</a> <span class="keyword">inline</span> Vector2& operator -= ( <span class="keyword">const</span> Vector2& rkVector ) 00204 { 00205 x -= rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>; 00206 y -= rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00207 00208 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 00209 } 00210 <a name="l00211"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a19">00211</a> <span class="keyword">inline</span> Vector2& operator *= ( <a class="code" href="namespaceOgre.html#a420">Real</a> fScalar ) 00212 { 00213 x *= fScalar; 00214 y *= fScalar; 00215 00216 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 00217 } 00218 <a name="l00219"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a20">00219</a> <span class="keyword">inline</span> Vector2& operator /= ( <a class="code" href="namespaceOgre.html#a420">Real</a> fScalar ) 00220 { 00221 assert( fScalar != 0.0 ); 00222 00223 <a class="code" href="namespaceOgre.html#a420">Real</a> fInv = 1.0 / fScalar; 00224 00225 x *= fInv; 00226 y *= fInv; 00227 00228 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 00229 } 00230 <a name="l00238"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a21">00238</a> <span class="keyword">inline</span> <a class="code" href="namespaceOgre.html#a420">Real</a> length ()<span class="keyword"> const</span> 00239 <span class="keyword"> </span>{ 00240 <span class="keywordflow">return</span> Math::Sqrt( x * x + y * y ); 00241 } 00242 <a name="l00253"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a22">00253</a> <span class="keyword">inline</span> <a class="code" href="namespaceOgre.html#a420">Real</a> squaredLength ()<span class="keyword"> const</span> 00254 <span class="keyword"> </span>{ 00255 <span class="keywordflow">return</span> x * x + y * y; 00256 } 00257 <a name="l00272"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a23">00272</a> <span class="keyword">inline</span> <a class="code" href="namespaceOgre.html#a420">Real</a> dotProduct(<span class="keyword">const</span> Vector2& vec)<span class="keyword"> const</span> 00273 <span class="keyword"> </span>{ 00274 <span class="keywordflow">return</span> x * vec.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> + y * vec.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00275 } 00276 <a name="l00286"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a24">00286</a> <span class="keyword">inline</span> <a class="code" href="namespaceOgre.html#a420">Real</a> normalise() 00287 { 00288 <a class="code" href="namespaceOgre.html#a420">Real</a> fLength = Math::Sqrt( x * x + y * y); 00289 00290 <span class="comment">// Will also work for zero-sized vectors, but will change nothing</span> 00291 <span class="keywordflow">if</span> ( fLength > 1e-08 ) 00292 { 00293 <a class="code" href="namespaceOgre.html#a420">Real</a> fInvLength = 1.0 / fLength; 00294 x *= fInvLength; 00295 y *= fInvLength; 00296 } 00297 00298 <span class="keywordflow">return</span> fLength; 00299 } 00300 00301 00302 <a name="l00306"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a25">00306</a> <span class="keyword">inline</span> Vector2 midPoint( <span class="keyword">const</span> Vector2& vec )<span class="keyword"> const</span> 00307 <span class="keyword"> </span>{ 00308 <span class="keywordflow">return</span> Vector2( 00309 ( x + vec.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> ) * 0.5, 00310 ( y + vec.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> ) * 0.5 ); 00311 } 00312 <a name="l00316"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a26">00316</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator < ( <span class="keyword">const</span> Vector2& rhs )<span class="keyword"> const</span> 00317 <span class="keyword"> </span>{ 00318 <span class="keywordflow">if</span>( x < rhs.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> && y < rhs.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> ) 00319 <span class="keywordflow">return</span> <span class="keyword">true</span>; 00320 <span class="keywordflow">return</span> <span class="keyword">false</span>; 00321 } 00322 <a name="l00326"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a27">00326</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator > ( <span class="keyword">const</span> Vector2& rhs )<span class="keyword"> const</span> 00327 <span class="keyword"> </span>{ 00328 <span class="keywordflow">if</span>( x > rhs.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> && y > rhs.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> ) 00329 <span class="keywordflow">return</span> <span class="keyword">true</span>; 00330 <span class="keywordflow">return</span> <span class="keyword">false</span>; 00331 } 00332 <a name="l00340"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a28">00340</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> makeFloor( <span class="keyword">const</span> Vector2& cmp ) 00341 { 00342 <span class="keywordflow">if</span>( cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> < x ) x = cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>; 00343 <span class="keywordflow">if</span>( cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> < y ) y = cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00344 } 00345 <a name="l00353"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a29">00353</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> makeCeil( <span class="keyword">const</span> Vector2& cmp ) 00354 { 00355 <span class="keywordflow">if</span>( cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> > x ) x = cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>; 00356 <span class="keywordflow">if</span>( cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a> > y ) y = cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>; 00357 } 00358 <a name="l00366"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a30">00366</a> <span class="keyword">inline</span> Vector2 perpendicular(<span class="keywordtype">void</span>)<span class="keyword"> const</span> 00367 <span class="keyword"> </span>{ 00368 <span class="keywordflow">return</span> Vector2 (-y, x); 00369 } <a name="l00397"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a31">00397</a> <span class="keyword">inline</span> Vector2 crossProduct( <span class="keyword">const</span> Vector2& rkVector )<span class="keyword"> const</span> 00398 <span class="keyword"> </span>{ 00399 <span class="keywordflow">return</span> Vector2(-rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o1">y</a>, rkVector.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a>); 00400 } <a name="l00420"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a32">00420</a> <span class="keyword">inline</span> Vector2 randomDeviant( 00421 <a class="code" href="namespaceOgre.html#a420">Real</a> angle)<span class="keyword"> const</span> 00422 <span class="keyword"> </span>{ 00423 00424 angle *= Math::UnitRandom() * Math::TWO_PI; 00425 <a class="code" href="namespaceOgre.html#a420">Real</a> cosa = cos(angle); 00426 <a class="code" href="namespaceOgre.html#a420">Real</a> sina = sin(angle); 00427 <span class="keywordflow">return</span> Vector2(cosa * x - sina * y, 00428 sina * x + cosa * y); 00429 } 00430 <a name="l00432"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a33">00432</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> isZeroLength(<span class="keywordtype">void</span>)<span class="keyword"> const</span> 00433 <span class="keyword"> </span>{ 00434 <a class="code" href="namespaceOgre.html#a420">Real</a> sqlen = (x * x) + (y * y); 00435 <span class="keywordflow">return</span> (sqlen < (1e-06 * 1e-06)); 00436 00437 } 00438 <a name="l00441"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a34">00441</a> <span class="keyword">inline</span> Vector2 normalisedCopy(<span class="keywordtype">void</span>)<span class="keyword"> const</span> 00442 <span class="keyword"> </span>{ 00443 Vector2 ret = *<span class="keyword">this</span>; 00444 ret.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a24">normalise</a>(); 00445 <span class="keywordflow">return</span> ret; 00446 } 00447 <a name="l00451"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2a35">00451</a> <span class="keyword">inline</span> Vector2 reflect(<span class="keyword">const</span> Vector2& normal) 00452 { 00453 <span class="keywordflow">return</span> Vector2( *<span class="keyword">this</span> - ( 2 * this->dotProduct(normal) * normal ) ); 00454 } 00455 00456 <span class="comment">// special points</span> <a name="l00457"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2s0">00457</a> <span class="keyword">static</span> <span class="keyword">const</span> Vector2 ZERO; <a name="l00458"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2s1">00458</a> <span class="keyword">static</span> <span class="keyword">const</span> Vector2 UNIT_X; <a name="l00459"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2s2">00459</a> <span class="keyword">static</span> <span class="keyword">const</span> Vector2 UNIT_Y; <a name="l00460"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2s3">00460</a> <span class="keyword">static</span> <span class="keyword">const</span> Vector2 NEGATIVE_UNIT_X; <a name="l00461"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2s4">00461</a> <span class="keyword">static</span> <span class="keyword">const</span> Vector2 NEGATIVE_UNIT_Y; <a name="l00462"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2s5">00462</a> <span class="keyword">static</span> <span class="keyword">const</span> Vector2 UNIT_SCALE; 00463 00466 <span class="keyword">inline</span> <a class="code" href="class__OgreExport.html">_OgreExport</a> <span class="keyword">friend</span> std::ostream& <span class="keyword">operator</span> << <a name="l00467"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2n1">00467</a> ( std::ostream& o, <span class="keyword">const</span> Vector2& v ) 00468 { 00469 o << <span class="stringliteral">"Vector2("</span> << v.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> << <span class="stringliteral">", "</span> << v.y << <span class="stringliteral">")"</span>; 00470 <span class="keywordflow">return</span> o; 00471 } 00472 }; 00473 00474 } 00475 <span class="preprocessor">#endif</span> </pre></div><p> Copyright © 2000-2005 by The OGRE Team<br /> Last modified Wed Feb 23 00:19:15 2005 </p> </body> </html>