📄 vector3_8cpp-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>maths/vector3.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.4.1 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div><div class="nav"><a class="el" href="dir_000003.html">maths</a></div><h1>vector3.cpp</h1><a href="vector3_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 00025 <span class="preprocessor">#include "<a class="code" href="common_8h.html">common.h</a>"</span>00026 <span class="preprocessor">#include "<a class="code" href="vector3_8h.html">vector3.h</a>"</span>00027 00028 00029 <span class="comment">/*</span>00030 <span class="comment">Members or class Vector3</span>00031 <span class="comment">*/</span>00032 00033 <a name="l00034"></a><a class="code" href="classVector3.html#a2">00034</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a> <a class="code" href="classVector3.html#a2">Vector3::operator - </a>()<span class="keyword"> const</span>00035 <span class="keyword"> </span>{00036 <span class="keywordflow">return</span> <a class="code" href="classVector3.html#a0">Vector3</a>(-<a class="code" href="classVector3.html#o0">X</a>,-<a class="code" href="classVector3.html#o1">Y</a>,-<a class="code" href="classVector3.html#o2">Z</a>);00037 }00038 00039 <a name="l00040"></a><a class="code" href="classVector3.html#a3">00040</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a> <a class="code" href="classVector3.html#a3">Vector3::operator + </a>(<span class="keyword">const</span> <a class="code" href="classVector3.html">Vector3</a>& vector)<span class="keyword"> const</span>00041 <span class="keyword"> </span>{00042 <span class="keywordflow">return</span> <a class="code" href="classVector3.html#a0">Vector3</a>(<a class="code" href="classVector3.html#o0">X</a>+vector.X,<a class="code" href="classVector3.html#o1">Y</a>+vector.Y,<a class="code" href="classVector3.html#o2">Z</a>+vector.Z);00043 }00044 00045 <a name="l00046"></a><a class="code" href="classVector3.html#a4">00046</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a> <a class="code" href="classVector3.html#a2">Vector3::operator - </a>(<span class="keyword">const</span> <a class="code" href="classVector3.html">Vector3</a>& vector)<span class="keyword"> const</span>00047 <span class="keyword"> </span>{00048 <span class="keywordflow">return</span> <a class="code" href="classVector3.html#a0">Vector3</a>(<a class="code" href="classVector3.html#o0">X</a>-vector.X,<a class="code" href="classVector3.html#o1">Y</a>-vector.Y,<a class="code" href="classVector3.html#o2">Z</a>-vector.Z);00049 }00050 00051 <a name="l00052"></a><a class="code" href="classVector3.html#a5">00052</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a> <a class="code" href="classVector3.html#a5">Vector3::operator * </a>(fix scalar)<span class="keyword"> const</span>00053 <span class="keyword"> </span>{00054 <span class="keywordflow">return</span> <a class="code" href="classVector3.html#a0">Vector3</a>(Fix::MulNS(<a class="code" href="classVector3.html#o0">X</a>,scalar),Fix::MulNS(<a class="code" href="classVector3.html#o1">Y</a>,scalar),Fix::MulNS(<a class="code" href="classVector3.html#o2">Z</a>,scalar));00055 }00056 00057 <a name="l00058"></a><a class="code" href="classVector3.html#a6">00058</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a> <a class="code" href="classVector3.html#a6">Vector3::operator / </a>(fix scalar)<span class="keyword"> const</span>00059 <span class="keyword"> </span>{00060 <span class="keywordflow">return</span> <a class="code" href="classVector3.html#a0">Vector3</a>(Fix::Div(<a class="code" href="classVector3.html#o0">X</a>,scalar),Fix::Div(<a class="code" href="classVector3.html#o1">Y</a>,scalar),Fix::Div(<a class="code" href="classVector3.html#o2">Z</a>,scalar));00061 }00062 00063 <a name="l00064"></a><a class="code" href="classVector3.html#a7">00064</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a>& <a class="code" href="classVector3.html#a7">Vector3::operator += </a>(<span class="keyword">const</span> <a class="code" href="classVector3.html">Vector3</a>& vector)00065 {00066 <a class="code" href="classVector3.html#o0">X</a> += vector.<a class="code" href="classVector3.html#o0">X</a>;00067 <a class="code" href="classVector3.html#o1">Y</a> += vector.<a class="code" href="classVector3.html#o1">Y</a>;00068 <a class="code" href="classVector3.html#o2">Z</a> += vector.<a class="code" href="classVector3.html#o2">Z</a>;00069 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00070 }00071 00072 <a name="l00073"></a><a class="code" href="classVector3.html#a8">00073</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a>& <a class="code" href="classVector3.html#a8">Vector3::operator -= </a>(<span class="keyword">const</span> <a class="code" href="classVector3.html">Vector3</a>& vector)00074 {00075 <a class="code" href="classVector3.html#o0">X</a> -= vector.<a class="code" href="classVector3.html#o0">X</a>;00076 <a class="code" href="classVector3.html#o1">Y</a> -= vector.<a class="code" href="classVector3.html#o1">Y</a>;00077 <a class="code" href="classVector3.html#o2">Z</a> -= vector.<a class="code" href="classVector3.html#o2">Z</a>;00078 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00079 }00080 00081 <a name="l00082"></a><a class="code" href="classVector3.html#a9">00082</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a>& <a class="code" href="classVector3.html#a9">Vector3::operator *= </a>(fix scalar)00083 {00084 <a class="code" href="classVector3.html#o0">X</a> = <a class="code" href="classFix.html#e3">Fix::MulNS</a>(<a class="code" href="classVector3.html#o0">X</a>,scalar);00085 <a class="code" href="classVector3.html#o1">Y</a> = <a class="code" href="classFix.html#e3">Fix::MulNS</a>(<a class="code" href="classVector3.html#o1">Y</a>,scalar);00086 <a class="code" href="classVector3.html#o2">Z</a> = <a class="code" href="classFix.html#e3">Fix::MulNS</a>(<a class="code" href="classVector3.html#o2">Z</a>,scalar);00087 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00088 }00089 00090 <a name="l00091"></a><a class="code" href="classVector3.html#a10">00091</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a>& <a class="code" href="classVector3.html#a10">Vector3::operator /= </a>(fix scalar)00092 {00093 <a class="code" href="classVector3.html#o0">X</a> = <a class="code" href="classFix.html#e4">Fix::Div</a>(<a class="code" href="classVector3.html#o0">X</a>,scalar);00094 <a class="code" href="classVector3.html#o1">Y</a> = <a class="code" href="classFix.html#e4">Fix::Div</a>(<a class="code" href="classVector3.html#o1">Y</a>,scalar);00095 <a class="code" href="classVector3.html#o2">Z</a> = <a class="code" href="classFix.html#e4">Fix::Div</a>(<a class="code" href="classVector3.html#o2">Z</a>,scalar);00096 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00097 }00098 00099 <a name="l00100"></a><a class="code" href="classVector3.html#a11">00100</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <span class="keywordtype">bool</span> <a class="code" href="classVector3.html#a11">Vector3::operator == </a>(<span class="keyword">const</span> <a class="code" href="classVector3.html">Vector3</a>& vector)<span class="keyword"> const</span>00101 <span class="keyword"> </span>{00102 <span class="keywordflow">return</span> (<a class="code" href="classVector3.html#o0">X</a>==vector.X && <a class="code" href="classVector3.html#o1">Y</a>==vector.Y && <a class="code" href="classVector3.html#o2">Z</a>==vector.Z);00103 }00104 00105 <a name="l00106"></a><a class="code" href="classVector3.html#a13">00106</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="group__fix.html#ga0">fix</a> <a class="code" href="classVector3.html#a13">Vector3::DotProduct</a>(<span class="keyword">const</span> <a class="code" href="classVector3.html">Vector3</a>& vector)<span class="keyword"> const</span>00107 <span class="keyword"> </span>{00108 <span class="keywordflow">return</span> <a class="code" href="classFix.html#e3">Fix::MulNS</a>(<a class="code" href="classVector3.html#o0">X</a>,vector.X)+<a class="code" href="classFix.html#e3">Fix::MulNS</a>(<a class="code" href="classVector3.html#o1">Y</a>,vector.Y)+<a class="code" href="classFix.html#e3">Fix::MulNS</a>(<a class="code" href="classVector3.html#o2">Z</a>,vector.Z);00109 }00110 00111 <a name="l00112"></a><a class="code" href="classVector3.html#a14">00112</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="classVector3.html">Vector3</a> <a class="code" href="classVector3.html#a14">Vector3::CrossProduct</a>(<span class="keyword">const</span> <a class="code" href="classVector3.html">Vector3</a>& vector)<span class="keyword"> const</span>00113 <span class="keyword"> </span>{00114 <span class="keywordflow">return</span> <a class="code" href="classVector3.html#a0">Vector3</a>(Fix::MulNS(<a class="code" href="classVector3.html#o1">Y</a>,vector.Z)-Fix::MulNS(<a class="code" href="classVector3.html#o2">Z</a>,vector.Y),00115 Fix::MulNS(Z,vector.X)-Fix::MulNS(<a class="code" href="classVector3.html#o0">X</a>,vector.Z),00116 Fix::MulNS(X,vector.Y)-Fix::MulNS(Y,vector.X));00117 }00118 00119 00120 <span class="keyword">static</span> <a class="code" href="group__integers.html#ga6">uint</a> MostSignificantBit(uint32 a)00121 {00122 <a class="code" href="group__integers.html#ga6">uint</a> b = 0;00123 <span class="keywordflow">if</span>(a>=(1<<16)) b |= 16, a >>= 16;00124 <span class="keywordflow">if</span>(a>=(1<<8)) b |= 8, a >>= 8;00125 <span class="keywordflow">if</span>(a>=(1<<4)) b |= 4, a >>= 4;00126 <span class="keywordflow">if</span>(a>=(1<<2)) b |= 2, a >>= 2;00127 b |= a>>1;00128 <span class="keywordflow">return</span> b;00129 }00130 00131 <a name="l00132"></a><a class="code" href="classVector3.html#a15">00132</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="group__fix.html#ga1">ufix</a> <a class="code" href="classVector3.html#a15">Vector3::Length</a>()<span class="keyword"> const</span>00133 <span class="keyword"> </span>{00134 <span class="comment">// calculate square of the length</span>00135 <a class="code" href="group__integers.html#ga6">uint</a> f;00136 <a class="code" href="group__integers.html#ga6">uint</a> i = <a class="code" href="classVector3.html#a18">LengthSquared</a>(f);00137 00138 <span class="comment">// if no integer part, return the square root</span>00139 <span class="keywordflow">if</span>(!i)00140 <span class="keywordflow">return</span> <a class="code" href="classFix.html#e5">Fix::Sqrt</a>(f)>>8;00141 00142 <span class="comment">// shift square of result so it fits into 32 bits</span>00143 <span class="keywordtype">int</span> shift = (2+MostSignificantBit(i))&~1;00144 <a class="code" href="group__fix.html#ga1">ufix</a> s;00145 <span class="keywordflow">if</span>(shift==32)00146 s = i;00147 <span class="keywordflow">else</span>00148 {00149 s = f>>shift;00150 s |= i<<(32-shift);00151 }00152 00153 <span class="comment">// take the square root</span>00154 <a class="code" href="group__fix.html#ga1">ufix</a> r = <a class="code" href="classFix.html#e5">Fix::Sqrt</a>(s);00155 00156 <span class="comment">// shift result to get binary point in the correct place</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -