tmath::quaternion<type> q1; // Produces an empty quaternion tmath::quaternion<type> q2(0.0, 1.0f, 25.65, 1.0f); // Initiates the quaternion with values tmath::quaternion<type> q3(v2); // Initiates the quaternion by another quaternion
The identifier type can be float , double or an int. You should know that if you are using int types you will get rounding errors because you are not working with real values.
tmath::quaternion<float> q1(0.0f, 1.0f, 0.0f, 0.2f);
tmath::quaternion<float> q2(1.0f, 1.0f, 0.0f, 0.4f);
tmath::quaternion<float> q3;
// Addition
q3 = q1 + q2;
q3 += q1;
// Subtraction
q3 = q1 - q2;
q3 -= q1;
tmath::quaternion<float> q1(0.0f, 1.0f, 0.0f, 0.3f);
tmath::quaternion<float> q2(1.0f, 1.0f, 0.0f, 7.54f);
tmath::quaternion<float> q3;
// Quaternion quaternion multiplication
q3 = q1 * q2;
// multiplication with a scalar
q3 = q1 * 1.0f;
// dito
q3 = 1.0f * q1;
Or a division with a scalar:
tmath::quaternion<float> q1(0.0f, 1.0f, 0.0f, 0.02f);
tmath::quaternion<float> q2;
// Division == q1 * (1.0f/1.2f)
q2 = q1 / 1.2f;
tmath::quaternion<float> q1(3.3f, 1.0f, 0.0f, 9.3f);
// The length of a quaternion
float length =tmath::len(q1);
To estimate the norm of a quaternion use the norm() function
tmath::quaternion<float> q1(3.3f, 1.0f, 0.0f, 2.0f);
// The norm of a quaternion
float n = tmath::norm(q1);
To normalize a vector use the normalize() function:
tmath::quaternion<float> q1(3.3f, 1.0f, 0.0f, 9.54f);
// Normalizing a quaternion
tmath::normalize(q1);
If you need the conjugated quaternion use the conj() function:
tmath::quaternion<float> q1(3.3f, 1.0f, 0.0f, 9.54f), qres;
// Conjugate a quaternion
qres = tmath::conj(q1);
Or if you need the inverse of the quaternion use the inv() function:
tmath::quaternion<float> q1(3.3f, 1.0f, 0.0f, 9.54f), qres;
// Invert a quaternion
qres = tmath::inv(q1);
tmath::quaternion<float> q1(3.3f, 1.0f, 0.0f, 74.2f);
float x = q1.x;
float y = q1.y;
float z = q1.z;
float w = q1.w;
Or you can use the quaternion itself as a pointer of an array. Of course the type of the array depends on the quaternion.
tmath::quaternion<float> q1(3.3f, 1.0f, 0.0f, 0.2f);
float* q = q1;
float xcomp = q[0];
float ycomp = q[1];
float zcomp = q[2];
float wcomp = q[3];
Please keep in mind that the element access via the [] operator are not designed for security checking. This means no border checks are done.
tmath::quaternion<float> q1(3.3f, 1.0f, 0.0f, 34.4f);
std::cout << q << std::endl;
1.5.2