| 286 | } |
| 287 | |
| 288 | Quaternion* TriQuaternionSqrt( |
| 289 | Quaternion* out, |
| 290 | const Quaternion* q1 ) |
| 291 | { |
| 292 | Quaternion test = *q1; |
| 293 | *out = *q1; |
| 294 | float magic1 = out->w; |
| 295 | float magic = 0.99999f; |
| 296 | float magic2 = magic1 + magic; |
| 297 | if( 0.0f > magic2 ) |
| 298 | { |
| 299 | Vector3 axis( out->x, out->y, out->z ); |
| 300 | axis *= 1000000.0f; |
| 301 | axis = Normalize( axis ); |
| 302 | if( LengthSq( axis ) < 0.5 ) |
| 303 | { |
| 304 | |
| 305 | //The vector could not be normalized :-( |
| 306 | out->x = 1.0f; |
| 307 | out->y = 0.000f; |
| 308 | out->z = 0.000f; |
| 309 | out->w = 0.0f; |
| 310 | } |
| 311 | else |
| 312 | { |
| 313 | out->x = axis.x; |
| 314 | out->y = axis.y; |
| 315 | out->z = axis.z; |
| 316 | out->w = 0.0f; |
| 317 | } |
| 318 | return out; |
| 319 | } |
| 320 | else |
| 321 | { |
| 322 | out->w++; |
| 323 | *out = Normalize( *out ); |
| 324 | return out; |
| 325 | } |
| 326 | } |
| 327 | |
| 328 | Quaternion* TriQuaternionRotationArc( |
| 329 | Quaternion* out, |
no test coverage detected