feat(quaternion): add C4Quaternion

This commit is contained in:
fallenoak 2022-12-24 17:30:47 -06:00
parent b17b7a18e6
commit 189085960f
No known key found for this signature in database
GPG key ID: 7628F8E61AEA070D
4 changed files with 57 additions and 0 deletions

View file

@ -0,0 +1,26 @@
#include "tempest/quaternion/C4Quaternion.hpp"
C4Quaternion C4Quaternion::Nlerp(float ratio, const C4Quaternion& q1, const C4Quaternion& q2) {
float x = (q2.x - q1.x) * ratio + q1.x;
float y = (q2.y - q1.y) * ratio + q1.y;
float z = (q2.z - q1.z) * ratio + q1.z;
float w = (q2.w - q1.w) * ratio + q1.w;
float m = x * x + y * y + z * z + w * w;
float v9 = ((m - 0.95906597) * -0.532516) + 1.021435;
if (m <= 0.91521198) {
v9 *= (((v9 * v9 * m) - 0.95906597) * -0.532516) + 1.021435;
if (m <= 0.6521197) {
v9 *= (((v9 * v9 * m) - 0.95906597) * -0.532516) + 1.021435;
}
}
x *= v9;
y *= v9;
z *= v9;
w *= v9;
return { x, y, z, w };
}

View file

@ -0,0 +1,24 @@
#ifndef TEMPEST_QUATERNION_C_4QUATERNION_HPP
#define TEMPEST_QUATERNION_C_4QUATERNION_HPP
class C4Quaternion {
public:
// Static functions
static C4Quaternion Nlerp(float ratio, const C4Quaternion& q1, const C4Quaternion& q2);
// Member variables
float x = 0.0f;
float y = 0.0f;
float z = 0.0f;
float w = 1.0f;
// Member functions
C4Quaternion() = default;
C4Quaternion(float x, float y, float z, float w)
: x(x)
, y(y)
, z(z)
, w(w) {};
};
#endif