📄 vector3_8cpp-source.html
字号:
00157 shift = (16-shift)>>1;00158 <span class="keywordflow">if</span>(shift>0)00159 r >>= shift;00160 <span class="keywordflow">if</span>(shift<0)00161 r <<= -shift;00162 00163 <span class="keywordflow">return</span> r;00164 }00165 00166 <a name="l00167"></a><a class="code" href="classVector3.html#a16">00167</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <span class="keywordtype">int</span> <a class="code" href="classVector3.html#a16">Vector3::CompareLength</a>(ufix length)<span class="keyword"> const</span>00168 <span class="keyword"> </span>{00169 <span class="comment">// calculate the square of this vectors length as ai:af</span>00170 <a class="code" href="group__integers.html#ga2">uint32</a> af;00171 <a class="code" href="group__integers.html#ga2">uint32</a> ai = <a class="code" href="classVector3.html#a18">LengthSquared</a>(af);00172 00173 <span class="comment">// calculate the square of 'length' as bi:bf</span>00174 <a class="code" href="group__integers.html#ga2">uint32</a> l = length&0xFFFF;00175 <a class="code" href="group__integers.html#ga2">uint32</a> h = length>>16;00176 <a class="code" href="group__integers.html#ga2">uint32</a> bf = l*l;00177 <a class="code" href="group__integers.html#ga2">uint32</a> bi = h*h;00178 <a class="code" href="group__integers.html#ga2">uint32</a> r = l*h;00179 <a class="code" href="group__integers.html#ga2">uint32</a> obf = bf;00180 bf += r<<(16+1);00181 <span class="keywordflow">if</span>(bf<obf) bi++;00182 bi += r>>(16-1);00183 00184 <span class="comment">// compare the squares of the length</span>00185 <span class="keywordflow">if</span>(ai<bi)00186 <span class="keywordflow">return</span> -1;00187 <span class="keywordflow">if</span>(ai>bi)00188 <span class="keywordflow">return</span> 1;00189 <span class="keywordflow">if</span>(af<bf)00190 <span class="keywordflow">return</span> -1;00191 <span class="keywordflow">if</span>(af>bf)00192 <span class="keywordflow">return</span> 1;00193 <span class="keywordflow">return</span> 0;00194 }00195 00196 <a name="l00197"></a><a class="code" href="classVector3.html#a17">00197</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <span class="keywordtype">int</span> <a class="code" href="classVector3.html#a17">Vector3::CompareLengths</a>(<span class="keyword">const</span> <a class="code" href="classVector3.html">Vector3</a>& vector)<span class="keyword"> const</span>00198 <span class="keyword"> </span>{00199 <a class="code" href="group__integers.html#ga2">uint32</a> af,bf;00200 <a class="code" href="group__integers.html#ga2">uint32</a> ai = <a class="code" href="classVector3.html#a18">LengthSquared</a>(af);00201 <a class="code" href="group__integers.html#ga2">uint32</a> bi = vector.<a class="code" href="classVector3.html#a18">LengthSquared</a>(bf);00202 00203 <span class="keywordflow">if</span>(ai<bi)00204 <span class="keywordflow">return</span> -1;00205 <span class="keywordflow">if</span>(ai>bi)00206 <span class="keywordflow">return</span> 1;00207 <span class="keywordflow">if</span>(af<bf)00208 <span class="keywordflow">return</span> -1;00209 <span class="keywordflow">if</span>(af>bf)00210 <span class="keywordflow">return</span> 1;00211 <span class="keywordflow">return</span> 0;00212 }00213 00214 <a name="l00215"></a><a class="code" href="classVector3.html#a18">00215</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="group__integers.html#ga2">uint32</a> <a class="code" href="classVector3.html#a18">Vector3::LengthSquared</a>(uint32& fraction)<span class="keyword"> const</span>00216 <span class="keyword"> </span>{00217 <a class="code" href="group__integers.html#ga5">int32</a> v,r;00218 <a class="code" href="group__integers.html#ga2">uint32</a> l,h,lo,hi,ol;00219 00220 v = <a class="code" href="classVector3.html#o0">X</a>;00221 l = v&0xFFFF;00222 h = v>>16;00223 lo = l*l;00224 hi = h*h;00225 r = l*h;00226 ol = lo;00227 lo += r<<(16+1);00228 <span class="keywordflow">if</span>(lo<ol) hi++;00229 hi += r>>(16-1);00230 00231 v = <a class="code" href="classVector3.html#o1">Y</a>;00232 l = v&0xFFFF;00233 h = v>>16;00234 ol = lo;00235 lo += l*l;00236 <span class="keywordflow">if</span>(lo<ol) hi++;00237 hi += h*h;00238 r = l*h;00239 ol = lo;00240 lo += r<<(16+1);00241 <span class="keywordflow">if</span>(lo<ol) hi++;00242 hi += r>>(16-1);00243 00244 v = <a class="code" href="classVector3.html#o2">Z</a>;00245 l = v&0xFFFF;00246 h = v>>16;00247 ol = lo;00248 lo += l*l;00249 <span class="keywordflow">if</span>(lo<ol) hi++;00250 hi += h*h;00251 r = l*h;00252 ol = lo;00253 lo += r<<(16+1);00254 <span class="keywordflow">if</span>(lo<ol) hi++;00255 hi += r>>(16-1);00256 00257 fraction = lo;00258 <span class="keywordflow">return</span> hi;00259 }00260 00261 <a name="l00262"></a><a class="code" href="classVector3.html#d0">00262</a> <span class="keywordtype">void</span> <a class="code" href="classVector3.html#d0">Vector3::NormaliseComponents</a>(uint bits)00263 {00264 <span class="comment">// get components</span>00265 <a class="code" href="group__fix.html#ga0">fix</a> x = <a class="code" href="classVector3.html#o0">X</a>;00266 <a class="code" href="group__fix.html#ga0">fix</a> y = <a class="code" href="classVector3.html#o1">Y</a>;00267 <a class="code" href="group__fix.html#ga0">fix</a> z = <a class="code" href="classVector3.html#o2">Z</a>;00268 00269 <span class="comment">// find the magnitude of the largest component</span>00270 <a class="code" href="group__fix.html#ga1">ufix</a> max = x;00271 <span class="keywordflow">if</span>(x<0)00272 max = ~x;00273 00274 <a class="code" href="group__fix.html#ga1">ufix</a> ay = y;00275 <span class="keywordflow">if</span>(y<0)00276 ay = ~y;00277 <span class="keywordflow">if</span>(ay>max)00278 max = ay;00279 00280 <a class="code" href="group__fix.html#ga1">ufix</a> az = z;00281 <span class="keywordflow">if</span>(z<0)00282 az = ~z;00283 <span class="keywordflow">if</span>(az>max)00284 max = az;00285 00286 <span class="comment">// calculate shift value to get msb in correct place</span>00287 <span class="keywordtype">int</span> shift = MostSignificantBit(max)-bits;00288 00289 <span class="comment">// shift all components</span>00290 <span class="keywordflow">if</span>(shift>0)00291 {00292 x >>= shift;00293 y >>= shift;00294 z >>= shift;00295 }00296 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(shift<0)00297 {00298 shift = -shift;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -