MCPcopy Create free account
hub / github.com/carbonengine/trinity / TriQuaternionSqrt

Function TriQuaternionSqrt

trinity/TriMath.cpp:288–326  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

286}
287
288Quaternion* 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
328Quaternion* TriQuaternionRotationArc(
329 Quaternion* out,

Callers 1

TriQuaternionRotationArcFunction · 0.85

Calls 1

LengthSqFunction · 0.85

Tested by

no test coverage detected