<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Crystal Space 1.2.1: csgeom/vector3.h Source File (Crystal Space 1.2.1 Public API Reference)</title> <link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <table border="0" cellpadding="0" cellspacing="0" width="100%" class="head"> <tr height="59"> <td class="head" width="202" valign="bottom" style="padding-left:0;"><a href="http://www.crystalspace3d.org/"><img src="csblur.png" width="236" height="59" alt="CrystalSpace" border="0"></a></td> <td class="head"><h2>Public API Reference</h2></td> </tr> <tr height="11"> <td colspan="2" class="headshadow" valign="top" style="padding-left:0;"><img src="csblurb.png" width="236" height="11" alt="" border="0"></td> </tr> </table> <div class="content"> <!-- Generated by Doxygen 1.5.3 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="classes.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> </ul> </div> <h1>csgeom/vector3.h</h1><a href="vector3_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span> <a name="l00002"></a>00002 <span class="comment"> Copyright (C) 1998,1999,2000 by Jorrit Tyberghein</span> <a name="l00003"></a>00003 <span class="comment"> Largely rewritten by Ivan Avramovic <ivan@avramovic.com></span> <a name="l00004"></a>00004 <span class="comment"></span> <a name="l00005"></a>00005 <span class="comment"> This library is free software; you can redistribute it and/or</span> <a name="l00006"></a>00006 <span class="comment"> modify it under the terms of the GNU Library General Public</span> <a name="l00007"></a>00007 <span class="comment"> License as published by the Free Software Foundation; either</span> <a name="l00008"></a>00008 <span class="comment"> version 2 of the License, or (at your option) any later version.</span> <a name="l00009"></a>00009 <span class="comment"></span> <a name="l00010"></a>00010 <span class="comment"> This library is distributed in the hope that it will be useful,</span> <a name="l00011"></a>00011 <span class="comment"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00012"></a>00012 <span class="comment"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> <a name="l00013"></a>00013 <span class="comment"> Library General Public License for more details.</span> <a name="l00014"></a>00014 <span class="comment"></span> <a name="l00015"></a>00015 <span class="comment"> You should have received a copy of the GNU Library General Public</span> <a name="l00016"></a>00016 <span class="comment"> License along with this library; if not, write to the Free</span> <a name="l00017"></a>00017 <span class="comment"> Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</span> <a name="l00018"></a>00018 <span class="comment">*/</span> <a name="l00019"></a>00019 <a name="l00020"></a>00020 <span class="preprocessor">#ifndef __CS_VECTOR3_H__</span> <a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define __CS_VECTOR3_H__</span> <a name="l00022"></a>00022 <span class="preprocessor"></span> <a name="l00030"></a>00030 <span class="preprocessor">#include "csextern.h"</span> <a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="math3d__d_8h.html" title="3D mathematic utility functions (double precision variants).">math3d_d.h</a>"</span> <a name="l00032"></a>00032 <a name="l00033"></a>00033 <span class="keyword">class </span><a class="code" href="classcsString.html" title="Thin wrapper around csStringFast&lt;&gt; with its default buffer size.">csString</a>; <a name="l00034"></a>00034 <a name="l00039"></a>00039 <span class="keyword">enum</span> <a name="l00040"></a>00040 { <a name="l00042"></a><a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e40982bccad8e3789fcecb889116579b71ea">00042</a> <a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e40982bccad8e3789fcecb889116579b71ea" title="Invalid axis.">CS_AXIS_NONE</a> = -1, <a name="l00044"></a><a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4098e81da4ab0c7c07c39847d17fb3a95b5">00044</a> <a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4098e81da4ab0c7c07c39847d17fb3a95b5" title="X axis.">CS_AXIS_X</a> = 0, <a name="l00046"></a><a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4099734b1073fe8f5572622f5e39120317d">00046</a> <a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4099734b1073fe8f5572622f5e39120317d" title="Y axis.">CS_AXIS_Y</a> = 1, <a name="l00048"></a><a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4092524f76ec772151941164bee31d5d9f1">00048</a> <a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4092524f76ec772151941164bee31d5d9f1" title="Z axis.">CS_AXIS_Z</a> = 2, <a name="l00050"></a><a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e409b090525794378a5a8ee78c5ad7e220b4">00050</a> <a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e409b090525794378a5a8ee78c5ad7e220b4" title="W axis.">CS_AXIS_W</a> = 3 <a name="l00051"></a>00051 }; <a name="l00052"></a>00052 <a name="l00056"></a><a class="code" href="classcsVector3.html">00056</a> <span class="keyword">class </span>CS_CRYSTALSPACE_EXPORT <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a name="l00057"></a>00057 { <a name="l00058"></a>00058 <span class="keyword">public</span>: <a name="l00059"></a>00059 <a name="l00060"></a>00060 <span class="preprocessor">#if !defined(__STRICT_ANSI__) && !defined(SWIG)</span> <a name="l00061"></a>00061 <span class="preprocessor"></span> <span class="keyword">union</span> <a name="l00062"></a>00062 { <a name="l00063"></a>00063 <span class="keyword">struct </span> <a name="l00064"></a>00064 { <a name="l00065"></a>00065 <span class="preprocessor">#endif</span> <a name="l00067"></a><a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f">00067</a> <span class="preprocessor"> float x;</span> <a name="l00069"></a><a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719">00069</a> <span class="preprocessor"> float y;</span> <a name="l00071"></a><a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05">00071</a> <span class="preprocessor"> float z;</span> <a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#if !defined(__STRICT_ANSI__) && !defined(SWIG)</span> <a name="l00073"></a>00073 <span class="preprocessor"></span> }; <a name="l00075"></a><a class="code" href="classcsVector3.html#fc081d3bf73f1be6f7134c29f6f61c56">00075</a> <span class="keywordtype">float</span> m[3]; <a name="l00076"></a>00076 }; <a name="l00077"></a>00077 <span class="preprocessor">#endif</span> <a name="l00078"></a>00078 <span class="preprocessor"></span> <a name="l00084"></a><a class="code" href="classcsVector3.html#27d80c7e6bcdaee093012aa843492ca6">00084</a> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> () {} <a name="l00085"></a>00085 <a name="l00091"></a><a class="code" href="classcsVector3.html#0267a154da795520aa74c4861ab36d77">00091</a> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (<span class="keywordtype">float</span> m) : x(m), y(m), z(m) {} <a name="l00092"></a>00092 <a name="l00094"></a><a class="code" href="classcsVector3.html#5c187c254a4d44d364670ff9e57b59a5">00094</a> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (<span class="keywordtype">float</span> ix, <span class="keywordtype">float</span> iy, <span class="keywordtype">float</span> iz = 0) : x(ix), y(iy), z(iz) {} <a name="l00095"></a>00095 <a name="l00097"></a><a class="code" href="classcsVector3.html#83e55d80b89992b33983461997aaf3f0">00097</a> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) : x(v.x), y(v.y), z(v.z) {} <a name="l00098"></a>00098 <a name="l00100"></a>00100 <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (<span class="keyword">const</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>&); <a name="l00101"></a>00101 <a name="l00103"></a>00103 <a class="code" href="classcsString.html" title="Thin wrapper around csStringFast&lt;&gt; with its default buffer size.">csString</a> Description() <span class="keyword">const</span>; <a name="l00104"></a>00104 <a name="l00106"></a><a class="code" href="classcsVector3.html#4bfd7dd1c1e68ab46a03552cd5fb872a">00106</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#4152cd06665dffa1b7bded50af1bbe34" title="Add two colors.">operator+</a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00107"></a>00107 { <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>(v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>+v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>, v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>+v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>, v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>+v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>); } <a name="l00108"></a>00108 <a name="l00110"></a><a class="code" href="classcsVector3.html#bfcfd1f73524f02155dca14377deffc1">00110</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a> <a class="code" href="cscolor_8h.html#4152cd06665dffa1b7bded50af1bbe34" title="Add two colors.">operator+</a>(<span class="keyword">const</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00111"></a>00111 { <span class="keywordflow">return</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>(v1.<a class="code" href="classcsDVector3.html#6f67e661779797eab4cf2e638b513c9c" title="The X component of the vector.">x</a>+v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>, v1.<a class="code" href="classcsDVector3.html#4aa6a7a4ee8ba5a031f8123585b269ee" title="The Y component of the vector.">y</a>+v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>, v1.<a class="code" href="classcsDVector3.html#878df30b2dab8c5de8f3f442b5d6890e" title="The Z component of the vector.">z</a>+v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>); } <a name="l00112"></a>00112 <a name="l00114"></a><a class="code" href="classcsVector3.html#d3d5d09f8b3aaa3cecd6dffa5fc57722">00114</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a> <a class="code" href="cscolor_8h.html#4152cd06665dffa1b7bded50af1bbe34" title="Add two colors.">operator+</a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>& v2) <a name="l00115"></a>00115 { <span class="keywordflow">return</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>(v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>+v2.<a class="code" href="classcsDVector3.html#6f67e661779797eab4cf2e638b513c9c" title="The X component of the vector.">x</a>, v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>+v2.<a class="code" href="classcsDVector3.html#4aa6a7a4ee8ba5a031f8123585b269ee" title="The Y component of the vector.">y</a>, v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>+v2.<a class="code" href="classcsDVector3.html#878df30b2dab8c5de8f3f442b5d6890e" title="The Z component of the vector.">z</a>); } <a name="l00116"></a>00116 <a name="l00118"></a><a class="code" href="classcsVector3.html#8044d79b2baa48f677d88d4aea15e475">00118</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#55e738db674cbea902cb06597df8dacf" title="Subtract two colors.">operator-</a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00119"></a>00119 { <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>(v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>-v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>, v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>-v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>, v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>-v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>); } <a name="l00120"></a>00120 <a name="l00122"></a><a class="code" href="classcsVector3.html#707f5ce11cda15e4e0e22777f6f91031">00122</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a> <a class="code" href="cscolor_8h.html#55e738db674cbea902cb06597df8dacf" title="Subtract two colors.">operator-</a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>& v2) <a name="l00123"></a>00123 { <span class="keywordflow">return</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>(v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>-v2.<a class="code" href="classcsDVector3.html#6f67e661779797eab4cf2e638b513c9c" title="The X component of the vector.">x</a>, v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>-v2.<a class="code" href="classcsDVector3.html#4aa6a7a4ee8ba5a031f8123585b269ee" title="The Y component of the vector.">y</a>, v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>-v2.<a class="code" href="classcsDVector3.html#878df30b2dab8c5de8f3f442b5d6890e" title="The Z component of the vector.">z</a>); } <a name="l00124"></a>00124 <a name="l00126"></a><a class="code" href="classcsVector3.html#072ff90ee99b3048ab5020803a0d0ff7">00126</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a> <a class="code" href="cscolor_8h.html#55e738db674cbea902cb06597df8dacf" title="Subtract two colors.">operator-</a>(<span class="keyword">const</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00127"></a>00127 { <span class="keywordflow">return</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>(v1.<a class="code" href="classcsDVector3.html#6f67e661779797eab4cf2e638b513c9c" title="The X component of the vector.">x</a>-v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>, v1.<a class="code" href="classcsDVector3.html#4aa6a7a4ee8ba5a031f8123585b269ee" title="The Y component of the vector.">y</a>-v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>, v1.<a class="code" href="classcsDVector3.html#878df30b2dab8c5de8f3f442b5d6890e" title="The Z component of the vector.">z</a>-v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>); } <a name="l00128"></a>00128 <a name="l00130"></a><a class="code" href="classcsVector3.html#7485c6fc880165de9edc87d8d4f8c6f7">00130</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">float</span> <a class="code" href="cscolor_8h.html#c99c344a2408f1e1928b247db5d64365" title="Multiply two colors.">operator*</a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00131"></a>00131 { <span class="keywordflow">return</span> v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>*v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a> + v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>*v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a> + v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>*v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>; } <a name="l00132"></a>00132 <a name="l00134"></a><a class="code" href="classcsVector3.html#9cf0725e53867457381292b60987f4c0">00134</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> operator%(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00135"></a>00135 { <a name="l00136"></a>00136 <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>*v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>-v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>*v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>, <a name="l00137"></a>00137 v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>*v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>-v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>*v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>, <a name="l00138"></a>00138 v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>*v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>-v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>*v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>); <a name="l00139"></a>00139 } <a name="l00140"></a>00140 <a name="l00142"></a><a class="code" href="classcsVector3.html#6da3afcc16d51f5cbb122786530abfc8">00142</a> <span class="keywordtype">void</span> Cross (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> & px, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> & py) <a name="l00143"></a>00143 { <a name="l00144"></a>00144 x = px.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>*py.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a> - px.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>*py.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>; <a name="l00145"></a>00145 y = px.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>*py.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a> - px.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>*py.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>; <a name="l00146"></a>00146 z = px.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>*py.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a> - px.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>*py.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>; <a name="l00147"></a>00147 } <a name="l00148"></a>00148 <a name="l00150"></a><a class="code" href="classcsVector3.html#1a8272b06eec8e8453ee1b080d34468e">00150</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#c99c344a2408f1e1928b247db5d64365" title="Multiply two colors.">operator* </a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v, <span class="keywordtype">float</span> f) <a name="l00151"></a>00151 { <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>(v.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>*f, v.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>*f, v.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>*f); } <a name="l00152"></a>00152 <a name="l00154"></a><a class="code" href="classcsVector3.html#fdf18d676633debc32fa1aeb97097062">00154</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#c99c344a2408f1e1928b247db5d64365" title="Multiply two colors.">operator* </a>(<span class="keywordtype">float</span> f, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) <a name="l00155"></a>00155 { <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>(v.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>*f, v.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>*f, v.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>*f); } <a name="l00156"></a>00156 <a name="l00158"></a><a class="code" href="classcsVector3.html#268b01115d9117ce0ae4b638f3145361">00158</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a> <a class="code" href="cscolor_8h.html#c99c344a2408f1e1928b247db5d64365" title="Multiply two colors.">operator* </a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v, <span class="keywordtype">double</span> f) <a name="l00159"></a>00159 { <span class="keywordflow">return</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>(v) * f; } <a name="l00160"></a>00160 <a name="l00162"></a><a class="code" href="classcsVector3.html#adddaaa4a319d692e1bbb52b159f7b83">00162</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a> <a class="code" href="cscolor_8h.html#c99c344a2408f1e1928b247db5d64365" title="Multiply two colors.">operator* </a>(<span class="keywordtype">double</span> f, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) <a name="l00163"></a>00163 { <span class="keywordflow">return</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>(v) * f; } <a name="l00164"></a>00164 <a name="l00166"></a><a class="code" href="classcsVector3.html#7c43330932d0d179d72dd8cf5fdfde79">00166</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#c99c344a2408f1e1928b247db5d64365" title="Multiply two colors.">operator* </a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v, <span class="keywordtype">int</span> f) <a name="l00167"></a>00167 { <span class="keywordflow">return</span> v * (float)f; } <a name="l00168"></a>00168 <a name="l00170"></a><a class="code" href="classcsVector3.html#5c1f360feb8a569b066d3c251ea53ffb">00170</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#c99c344a2408f1e1928b247db5d64365" title="Multiply two colors.">operator* </a>(<span class="keywordtype">int</span> f, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) <a name="l00171"></a>00171 { <span class="keywordflow">return</span> v * (float)f; } <a name="l00172"></a>00172 <a name="l00174"></a><a class="code" href="classcsVector3.html#052b2559d5d577132492d1213bac4ce0">00174</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#a9b4d9b2f7603a763b65c580bf00eaad" title="Divide a color by a scalar.">operator/ </a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v, <span class="keywordtype">float</span> f) <a name="l00175"></a>00175 { f = 1.0f/f; <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>(v.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>*f, v.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>*f, v.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>*f); } <a name="l00176"></a>00176 <a name="l00178"></a><a class="code" href="classcsVector3.html#4bd0d559e4e019ccead8a36e6f6b13b1">00178</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a> <a class="code" href="cscolor_8h.html#a9b4d9b2f7603a763b65c580bf00eaad" title="Divide a color by a scalar.">operator/ </a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v, <span class="keywordtype">double</span> f) <a name="l00179"></a>00179 { <span class="keywordflow">return</span> <a class="code" href="classcsDVector3.html" title="A 3D vector.">csDVector3</a>(v) / f; } <a name="l00180"></a>00180 <a name="l00182"></a><a class="code" href="classcsVector3.html#7d8f52709a5520e2b9fa71ae9bdcc7fa">00182</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#a9b4d9b2f7603a763b65c580bf00eaad" title="Divide a color by a scalar.">operator/ </a>(<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v, <span class="keywordtype">int</span> f) <a name="l00183"></a>00183 { <span class="keywordflow">return</span> v / (float)f; } <a name="l00184"></a>00184 <a name="l00186"></a><a class="code" href="classcsVector3.html#66e0e8c5f4adc5dc97d9101ed7d087b8">00186</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator== (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00187"></a>00187 { <span class="keywordflow">return</span> v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>==v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a> && v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>==v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a> && v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>==v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>; } <a name="l00188"></a>00188 <a name="l00190"></a><a class="code" href="classcsVector3.html#14effb8e6e631957c158846343cc362e">00190</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!= (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00191"></a>00191 { <span class="keywordflow">return</span> v1.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>!=v2.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a> || v1.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>!=v2.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a> || v1.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>!=v2.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>; } <a name="l00192"></a>00192 <a name="l00194"></a><a class="code" href="classcsVector3.html#457aa88a73812661db71dac5aa422799">00194</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> operator>> (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00195"></a>00195 { <span class="keywordflow">return</span> v2*(v1*v2)/(v2*v2); } <a name="l00196"></a>00196 <a name="l00198"></a><a class="code" href="classcsVector3.html#5a6e8a9dd6eb45cf808d1f11e85e8a05">00198</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> operator<< (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v1, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v2) <a name="l00199"></a>00199 { <span class="keywordflow">return</span> v1*(v1*v2)/(v1*v1); } <a name="l00200"></a>00200 <a name="l00202"></a><a class="code" href="classcsVector3.html#6e1bbeabb9f0f71d3a0816111006c897">00202</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator< (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v, <span class="keywordtype">float</span> f) <a name="l00203"></a>00203 { <span class="keywordflow">return</span> <a class="code" href="group__geom__utils.html#g996f7be338ccb40d1a2a5abc1ad61759">ABS</a>(v.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>)<f && <a class="code" href="group__geom__utils.html#g996f7be338ccb40d1a2a5abc1ad61759">ABS</a>(v.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>)<f && <a class="code" href="group__geom__utils.html#g996f7be338ccb40d1a2a5abc1ad61759">ABS</a>(v.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>)<f; } <a name="l00204"></a>00204 <a name="l00206"></a><a class="code" href="classcsVector3.html#b810d5c75c97a7119cc48f9efb4cfa19">00206</a> <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator> (<span class="keywordtype">float</span> f, <span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) <a name="l00207"></a>00207 { <span class="keywordflow">return</span> <a class="code" href="group__geom__utils.html#g996f7be338ccb40d1a2a5abc1ad61759">ABS</a>(v.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>)<f && <a class="code" href="group__geom__utils.html#g996f7be338ccb40d1a2a5abc1ad61759">ABS</a>(v.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>)<f && <a class="code" href="group__geom__utils.html#g996f7be338ccb40d1a2a5abc1ad61759">ABS</a>(v.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>)<f; } <a name="l00208"></a>00208 <a name="l00210"></a>00210 <span class="preprocessor">#ifdef __STRICT_ANSI__</span> <a name="l00211"></a>00211 <span class="preprocessor"></span> <span class="keyword">inline</span> <span class="keywordtype">float</span> operator[] (<span class="keywordtype">size_t</span> n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !n?x:n&1?y:z; } <a name="l00212"></a>00212 <span class="preprocessor">#else</span> <a name="l00213"></a><a class="code" href="classcsVector3.html#1926da31cdca5c7a45821b40b2e1d39a">00213</a> <span class="preprocessor"></span> <span class="keyword">inline</span> <span class="keywordtype">float</span> operator[] (<span class="keywordtype">size_t</span> n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m[n]; } <a name="l00214"></a>00214 <span class="preprocessor">#endif</span> <a name="l00215"></a>00215 <span class="preprocessor"></span> <a name="l00217"></a>00217 <span class="preprocessor">#ifdef __STRICT_ANSI__</span> <a name="l00218"></a>00218 <span class="preprocessor"></span> <span class="keyword">inline</span> <span class="keywordtype">float</span> & operator[] (<span class="keywordtype">size_t</span> n) { <span class="keywordflow">return</span> !n?x:n&1?y:z; } <a name="l00219"></a>00219 <span class="preprocessor">#else</span> <a name="l00220"></a><a class="code" href="classcsVector3.html#7ef21de39bdda7a263f3ad38a271b63f">00220</a> <span class="preprocessor"></span> <span class="keyword">inline</span> <span class="keywordtype">float</span> & operator[] (<span class="keywordtype">size_t</span> n) { <span class="keywordflow">return</span> m[n]; } <a name="l00221"></a>00221 <span class="preprocessor">#endif</span> <a name="l00222"></a>00222 <span class="preprocessor"></span> <a name="l00224"></a><a class="code" href="classcsVector3.html#4af056573151e79dcad7b24d459de7eb">00224</a> <span class="keyword">inline</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& operator+= (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) <a name="l00225"></a>00225 { <a name="l00226"></a>00226 x += v.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>; <a name="l00227"></a>00227 y += v.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>; <a name="l00228"></a>00228 z += v.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>; <a name="l00229"></a>00229 <a name="l00230"></a>00230 <span class="keywordflow">return</span> *<span class="keyword">this</span>; <a name="l00231"></a>00231 } <a name="l00232"></a>00232 <a name="l00234"></a><a class="code" href="classcsVector3.html#0677b4ef702018e0186600a1027ef101">00234</a> <span class="keyword">inline</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& operator-= (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) <a name="l00235"></a>00235 { <a name="l00236"></a>00236 x -= v.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>; <a name="l00237"></a>00237 y -= v.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>; <a name="l00238"></a>00238 z -= v.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>; <a name="l00239"></a>00239 <a name="l00240"></a>00240 <span class="keywordflow">return</span> *<span class="keyword">this</span>; <a name="l00241"></a>00241 } <a name="l00242"></a>00242 <a name="l00244"></a><a class="code" href="classcsVector3.html#ef3a7f9526f65d2f7c219649f6809d59">00244</a> <span class="keyword">inline</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& operator*= (<span class="keywordtype">float</span> f) <a name="l00245"></a>00245 { x *= f; y *= f; z *= f; <span class="keywordflow">return</span> *<span class="keyword">this</span>; } <a name="l00246"></a>00246 <a name="l00248"></a><a class="code" href="classcsVector3.html#49f06c8a62f0f119e9d37aed324dc2b0">00248</a> <span class="keyword">inline</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& operator/= (<span class="keywordtype">float</span> f) <a name="l00249"></a>00249 { f = 1.0f / f; x *= f; y *= f; z *= f; <span class="keywordflow">return</span> *<span class="keyword">this</span>; } <a name="l00250"></a>00250 <a name="l00252"></a><a class="code" href="classcsVector3.html#9d7480756a79154054ecc07de0b5ec0a">00252</a> <span class="keyword">inline</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#4152cd06665dffa1b7bded50af1bbe34" title="Add two colors.">operator+ </a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span>; } <a name="l00253"></a>00253 <a name="l00255"></a><a class="code" href="classcsVector3.html#7eff302cef5eab01d17025acc9d94a9d">00255</a> <span class="keyword">inline</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <a class="code" href="cscolor_8h.html#55e738db674cbea902cb06597df8dacf" title="Subtract two colors.">operator- </a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>(-x,-y,-z); } <a name="l00256"></a>00256 <a name="l00258"></a><a class="code" href="classcsVector3.html#2d705cdca75eafea8df1400583509e88">00258</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> Set (<span class="keywordtype">float</span> sx, <span class="keywordtype">float</span> sy, <span class="keywordtype">float</span> sz) { x = sx; y = sy; z = sz; } <a name="l00259"></a>00259 <a name="l00261"></a><a class="code" href="classcsVector3.html#8683cb36d3b238f6b5354d22b474ac2f">00261</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> Set (<a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> <span class="keyword">const</span>& v) { x = v.<a class="code" href="classcsVector3.html#823fdba459ff91e8a5e6834ded7c815f" title="The X component of the vector.">x</a>; y = v.<a class="code" href="classcsVector3.html#e0a74264b61eb5d61da63b3c101af719" title="The Y component of the vector.">y</a>; z = v.<a class="code" href="classcsVector3.html#3f761bd195c7ccec59ea863a87a1ad05" title="The Z component of the vector.">z</a>; } <a name="l00262"></a>00262 <a name="l00264"></a><a class="code" href="classcsVector3.html#ae3487f21c9c18fa644625ff6f4dca8c">00264</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> Set (<span class="keywordtype">float</span> <span class="keyword">const</span>* v) { x = v[0]; y = v[1]; z = v[2]; } <a name="l00265"></a>00265 <a name="l00267"></a><a class="code" href="classcsVector3.html#4c4efd085000b072a427e5d475c199d0">00267</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> Set (<span class="keywordtype">float</span> v) { x = y = z = v; } <a name="l00268"></a>00268 <a name="l00270"></a><a class="code" href="classcsVector3.html#de7ba33200ebce17f6f3d9619ed06ec4">00270</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> Get (<span class="keywordtype">float</span>* v) { v[0] = x; v[1] = y; v[2] = z; } <a name="l00271"></a>00271 <a name="l00273"></a>00273 <span class="keywordtype">float</span> Norm () <span class="keyword">const</span>; <a name="l00274"></a>00274 <a name="l00276"></a><a class="code" href="classcsVector3.html#4f8fb0ed2df4d38898bbcda746c47552">00276</a> <span class="keywordtype">float</span> SquaredNorm ()<span class="keyword"> const</span> <a name="l00277"></a>00277 <span class="keyword"> </span>{ <span class="keywordflow">return</span> x * x + y * y + z * z; } <a name="l00278"></a>00278 <a name="l00284"></a><a class="code" href="classcsVector3.html#dfe6a123b665375450d78bf47eee2b77">00284</a> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> Unit ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (*<span class="keyword">this</span>)/(this->Norm()); } <a name="l00285"></a>00285 <a name="l00287"></a><a class="code" href="classcsVector3.html#710f2bd2de6b6e842774632e1654050e">00287</a> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">float</span> Norm (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) { <span class="keywordflow">return</span> v.<a class="code" href="classcsVector3.html#42b1546a61c4fd76ec17c50592fcad1e" title="Returns the norm of this vector.">Norm</a>(); } <a name="l00288"></a>00288 <a name="l00290"></a><a class="code" href="classcsVector3.html#f438a4e42d69985e693dcbaf78cc9940">00290</a> <span class="keyword">inline</span> <span class="keyword">static</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> Unit (<span class="keyword">const</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a>& v) { <span class="keywordflow">return</span> v.<a class="code" href="classcsVector3.html#dfe6a123b665375450d78bf47eee2b77" title="Returns the unit vector in the direction of this vector.">Unit</a>(); } <a name="l00291"></a>00291 <a name="l00293"></a>00293 <span class="keywordtype">void</span> Normalize (); <a name="l00294"></a>00294 <a name="l00296"></a><a class="code" href="classcsVector3.html#bd1301a92ffbf20d43f99b1ba1346f09">00296</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> IsZero (<span class="keywordtype">float</span> precision = SMALL_EPSILON)<span class="keyword"> const</span> <a name="l00297"></a>00297 <span class="keyword"> </span>{ <a name="l00298"></a>00298 <span class="keywordflow">return</span> (fabsf(x) < precision) && (fabsf(y) < precision) <a name="l00299"></a>00299 && (fabsf(z) < precision); <a name="l00300"></a>00300 } <a name="l00301"></a>00301 <a name="l00303"></a><a class="code" href="classcsVector3.html#678aef7f60ea2869d4924edfbd39c545">00303</a> <span class="keyword">inline</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> UnitAxisClamped ()<span class="keyword"> const</span> <a name="l00304"></a>00304 <span class="keyword"> </span>{ <a name="l00305"></a>00305 <span class="keywordflow">if</span> (IsZero ()) <a name="l00306"></a>00306 <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (0, 0, 0); <a name="l00307"></a>00307 <a name="l00308"></a>00308 <span class="keywordflow">if</span> (fabsf (x) > fabsf (y) && fabsf (x) > fabsf (z)) <a name="l00309"></a>00309 <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (x / fabsf (x), 0, 0); <span class="comment">//X biggest</span> <a name="l00310"></a>00310 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabsf (y) > fabsf (z)) <a name="l00311"></a>00311 <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (0, y / fabsf (y), 0); <span class="comment">//Y biggest</span> <a name="l00312"></a>00312 <span class="keywordflow">else</span> <a name="l00313"></a>00313 <span class="keywordflow">return</span> <a class="code" href="classcsVector3.html" title="A 3D vector.">csVector3</a> (0, 0, z / fabsf (z)); <span class="comment">//Z biggest</span> <a name="l00314"></a>00314 } <a name="l00315"></a>00315 <a name="l00317"></a><a class="code" href="classcsVector3.html#1885c814e9bebfb95cdebe8a66f9f036">00317</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> DominantAxis ()<span class="keyword"> const</span> <a name="l00318"></a>00318 <span class="keyword"> </span>{ <a name="l00319"></a>00319 <span class="keywordflow">if</span> (fabsf (x) > fabsf (y) && fabsf (x) > fabsf (z)) <a name="l00320"></a>00320 <span class="keywordflow">return</span> <a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4098e81da4ab0c7c07c39847d17fb3a95b5" title="X axis.">CS_AXIS_X</a>; <a name="l00321"></a>00321 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabsf (y) > fabsf (z)) <a name="l00322"></a>00322 <span class="keywordflow">return</span> <a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4099734b1073fe8f5572622f5e39120317d" title="Y axis.">CS_AXIS_Y</a>; <a name="l00323"></a>00323 <span class="keywordflow">else</span> <a name="l00324"></a>00324 <span class="keywordflow">return</span> <a class="code" href="group__geom__utils.html#ggdb49720dc49f7d4e4cf9adbf2948e4092524f76ec772151941164bee31d5d9f1" title="Z axis.">CS_AXIS_Z</a>; <a name="l00325"></a>00325 } <a name="l00326"></a>00326 }; <a name="l00327"></a>00327 <a name="l00330"></a>00330 <span class="preprocessor">#endif // __CS_VECTOR3_H__</span> </pre></div><hr size="1"><address><small>Generated for Crystal Space 1.2.1 by <a href="http://www.doxygen.org/index.html">doxygen</a> 1.5.3 </small></address> </div></body> </html>