Sophie

Sophie

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

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

<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&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>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&amp; 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 &lt; 2 );
00087 
00088             <span class="keywordflow">return</span> *(&amp;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>&amp; operator [] ( size_t i )
00092         {
00093             assert( i &lt; 2 );
00094 
00095             <span class="keywordflow">return</span> *(&amp;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&amp; operator = ( <span class="keyword">const</span> Vector2&amp; 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&amp; 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> &amp;&amp; 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&amp; 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&amp; 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&amp; 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&amp; 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&amp; 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&amp; operator += ( <span class="keyword">const</span> Vector2&amp; 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&amp; operator -= ( <span class="keyword">const</span> Vector2&amp; 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&amp; 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&amp; 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&amp; 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 &gt; 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&amp; 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 &lt; ( <span class="keyword">const</span> Vector2&amp; rhs )<span class="keyword"> const</span>
00317 <span class="keyword">        </span>{
00318             <span class="keywordflow">if</span>( x &lt; rhs.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> &amp;&amp; y &lt; 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 &gt; ( <span class="keyword">const</span> Vector2&amp; rhs )<span class="keyword"> const</span>
00327 <span class="keyword">        </span>{
00328             <span class="keywordflow">if</span>( x &gt; rhs.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> &amp;&amp; y &gt; 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&amp; cmp )
00341         {
00342             <span class="keywordflow">if</span>( cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> &lt; 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> &lt; 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&amp; cmp )
00354         {
00355             <span class="keywordflow">if</span>( cmp.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> &gt; 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> &gt; 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&amp; 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 &lt; (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&amp; normal)
00452         {
00453             <span class="keywordflow">return</span> Vector2( *<span class="keyword">this</span> - ( 2 * this-&gt;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&amp; <span class="keyword">operator</span> &lt;&lt;
<a name="l00467"></a><a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2n1">00467</a>             ( std::ostream&amp; o, <span class="keyword">const</span> Vector2&amp; v )
00468         {
00469             o &lt;&lt; <span class="stringliteral">"Vector2("</span> &lt;&lt; v.<a class="code" href="classOgre_1_1Vector2.html#Ogre_1_1Vector2o0">x</a> &lt;&lt; <span class="stringliteral">", "</span> &lt;&lt; v.y &lt;&lt;  <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 &copy; 2000-2005 by The OGRE Team<br />
Last modified Wed Feb 23 00:19:15 2005
</p>
</body>
</html>