Updated documentation

This commit is contained in:
Pascal Serrarens 2022-01-07 16:53:38 +01:00
parent 4eafc6b5de
commit 6b3abb1731
3 changed files with 29 additions and 21 deletions

View File

@ -28,13 +28,6 @@ Quaternion::Quaternion(float _x, float _y, float _z, float _w) {
w = _w; w = _w;
} }
Quaternion::Quaternion(Vector3 _xyz, float _w) {
x = _xyz.x;
y = _xyz.y;
z = _xyz.z;
w = _w;
}
Quaternion::Quaternion(Quat q) { Quaternion::Quaternion(Quat q) {
x = q.x; x = q.x;
y = q.y; y = q.y;
@ -320,8 +313,8 @@ Quaternion Quaternion::SlerpUnclamped(const Quaternion& a, const Quaternion& b,
blendA = 1.0f - t; blendA = 1.0f - t;
blendB = t; blendB = t;
} }
Vector3 v = axyz * blendA + b2.xyz() * blendB;
Quaternion result = Quaternion(axyz * blendA + b2.xyz() * blendB, blendA * a.w + blendB * b2.w); Quaternion result = Quaternion(v.x, v.y, v.z, blendA * a.w + blendB * b2.w);
if (result.GetLengthSquared() > 0.0f) if (result.GetLengthSquared() > 0.0f)
return Quaternion::Normalize(result); return Quaternion::Normalize(result);
else else

View File

@ -20,23 +20,34 @@ extern "C" {
/// </summary> /// </summary>
struct Quaternion : Quat { struct Quaternion : Quat {
public: public:
/// <summary>
/// Create a new identity quaternion
/// </summary>
Quaternion(); Quaternion();
/// <summary>
/// create a new quaternion with the given values
/// </summary>
/// <param name="_x">x axis value</param>
/// <param name="_y">y axis value</param>
/// <param name="_z">z axis value</param>
/// <param name="_w">w axis value</param>
Quaternion(float _x, float _y, float _z, float _w); Quaternion(float _x, float _y, float _z, float _w);
Quaternion(Vector3 _xyz, float _w); /// <summary>
/// Create a quaternion from C-style Quat
/// </summary>
/// <param name="q"></param>
Quaternion(Quat q); Quaternion(Quat q);
~Quaternion(); ~Quaternion();
/// <summary>
/// An identity quaternion
/// </summary>
const static Quaternion identity; const static Quaternion identity;
float GetLength() const;
float GetLengthSquared() const;
static float GetLengthSquared(const Quaternion& q);
void Normalize(); void Normalize();
static Quaternion Normalize(const Quaternion& q); static Quaternion Normalize(const Quaternion& q);
static void Normalize(const Quaternion& q, Quaternion& result); static void Normalize(const Quaternion& q, Quaternion& result);
static float Dot(Quaternion a, Quaternion b);
static Vector3 ToAngles(const Quaternion& q1); static Vector3 ToAngles(const Quaternion& q1);
Vector3 operator *(const Vector3& p) const; Vector3 operator *(const Vector3& p) const;
@ -65,6 +76,14 @@ public:
static float GetAngleAround(Vector3 axis, Quaternion rotation); static float GetAngleAround(Vector3 axis, Quaternion rotation);
static Quaternion GetRotationAround(Vector3 axis, Quaternion rotation); static Quaternion GetRotationAround(Vector3 axis, Quaternion rotation);
static void GetSwingTwist(Vector3 axis, Quaternion rotation, Quaternion* swing, Quaternion* twist); static void GetSwingTwist(Vector3 axis, Quaternion rotation, Quaternion* swing, Quaternion* twist);
protected:
float GetLength() const;
float GetLengthSquared() const;
static float GetLengthSquared(const Quaternion& q);
static float Dot(Quaternion a, Quaternion b);
public: public:
Vector3 xyz() const; Vector3 xyz() const;
}; };

View File

@ -1,12 +1,8 @@
\author PasserVR
\version 0.1
\mainpage Vector Algebra \mainpage Vector Algebra
3D Vector algebra library (Vector3, Quaternion) 3D Vector algebra library (Vector3, Quaternion)
Note: this documentation is still work in progress....
Main components Main components
--------------- ---------------
* Vector3 * [Vector3](https://passervr.com/apis/VectorAlgebra/struct_vector3.html)
* Quaternion * [Quaternion](https://passervr.com/apis/VectorAlgebra/struct_quaternion.html)