mirror of
https://github.com/AxioDL/zeus.git
synced 2025-12-10 22:17:44 +00:00
Fix CQuaternion::transform and CNUQuaternion
This commit is contained in:
@@ -40,8 +40,18 @@ CQuaternion CQuaternion::operator-(const CQuaternion& q) const { return CQuatern
|
||||
|
||||
CQuaternion CQuaternion::operator*(const CQuaternion& q) const
|
||||
{
|
||||
return CQuaternion(w * q.w - CVector3f(x, y, z).dot({q.x, q.y, q.z}), y * q.z - z * q.y + w * q.x + x * q.w,
|
||||
z * q.x - x * q.z + w * q.y + y * q.w, x * q.y - y * q.x + w * q.z + z * q.w);
|
||||
return CQuaternion(w * q.w - CVector3f(x, y, z).dot({q.x, q.y, q.z}),
|
||||
y * q.z - z * q.y + w * q.x + x * q.w,
|
||||
z * q.x - x * q.z + w * q.y + y * q.w,
|
||||
x * q.y - y * q.x + w * q.z + z * q.w);
|
||||
}
|
||||
|
||||
CNUQuaternion CNUQuaternion::operator*(const CNUQuaternion& q) const
|
||||
{
|
||||
return CQuaternion(w * q.w - CVector3f(x, y, z).dot({q.x, q.y, q.z}),
|
||||
y * q.z - z * q.y + w * q.x + x * q.w,
|
||||
z * q.x - x * q.z + w * q.y + y * q.w,
|
||||
x * q.y - y * q.x + w * q.z + z * q.w);
|
||||
}
|
||||
|
||||
CQuaternion CQuaternion::operator/(const CQuaternion& q) const
|
||||
@@ -53,6 +63,8 @@ CQuaternion CQuaternion::operator/(const CQuaternion& q) const
|
||||
|
||||
CQuaternion CQuaternion::operator*(float scale) const { return CQuaternion(w * scale, x * scale, y * scale, z * scale); }
|
||||
|
||||
CNUQuaternion CNUQuaternion::operator*(float scale) const { return CNUQuaternion(w * scale, x * scale, y * scale, z * scale); }
|
||||
|
||||
CQuaternion CQuaternion::operator/(float scale) const { return CQuaternion(w / scale, x / scale, y / scale, z / scale); }
|
||||
|
||||
CQuaternion CQuaternion::operator-() const { return CQuaternion(-w, -x, -y, -z); }
|
||||
@@ -66,6 +78,15 @@ const CQuaternion& CQuaternion::operator+=(const CQuaternion& q)
|
||||
return *this;
|
||||
}
|
||||
|
||||
const CNUQuaternion& CNUQuaternion::operator+=(const CNUQuaternion& q)
|
||||
{
|
||||
w += q.w;
|
||||
x += q.x;
|
||||
y += q.y;
|
||||
z += q.z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const CQuaternion& CQuaternion::operator-=(const CQuaternion& q)
|
||||
{
|
||||
w -= q.w;
|
||||
@@ -105,14 +126,6 @@ const CQuaternion& CQuaternion::operator/=(float scale)
|
||||
return *this;
|
||||
}
|
||||
|
||||
float CQuaternion::magnitude() const { return std::sqrt(magSquared()); }
|
||||
|
||||
float CQuaternion::magSquared() const { return w * w + x * x + y * y + z * z; }
|
||||
|
||||
void CQuaternion::normalize() { *this /= magnitude(); }
|
||||
|
||||
CQuaternion CQuaternion::normalized() const { return *this / magnitude(); }
|
||||
|
||||
void CQuaternion::invert()
|
||||
{
|
||||
x = -x;
|
||||
@@ -263,6 +276,11 @@ CQuaternion operator*(float lhs, const CQuaternion& rhs)
|
||||
return CQuaternion(lhs * rhs.w, lhs * rhs.x, lhs * rhs.y, lhs * rhs.z);
|
||||
}
|
||||
|
||||
CNUQuaternion operator*(float lhs, const CNUQuaternion& rhs)
|
||||
{
|
||||
return CNUQuaternion(lhs * rhs.w, lhs * rhs.x, lhs * rhs.y, lhs * rhs.z);
|
||||
}
|
||||
|
||||
CQuaternion CQuaternion::buildEquivalent() const
|
||||
{
|
||||
float tmp = std::acos(clamp(-1.f, w, 1.f)) * 2.0;
|
||||
|
||||
Reference in New Issue
Block a user