From 00acab154baf0844bf6d30a2b159d4588f62325f Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Fri, 20 Feb 2026 04:41:08 +0100 Subject: [PATCH] quanternion from euler --- interfaces/Crafter.Math-Vector.cppm | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/interfaces/Crafter.Math-Vector.cppm b/interfaces/Crafter.Math-Vector.cppm index 9276734..8db62b2 100755 --- a/interfaces/Crafter.Math-Vector.cppm +++ b/interfaces/Crafter.Math-Vector.cppm @@ -381,6 +381,15 @@ namespace Crafter { return v + t * q.w + Vector::Cross(qv, t); } + template + constexpr static Vector RotatePivot(Vector v, Vector q, Vector pivot) requires(Len == 3) { + Vector translated = v - pivot; + Vector qv(q.x, q.y, q.z); + Vector t = Cross(qv, translated) * T(2); + Vector rotated = translated + t * q.w +Cross(qv, t); + return rotated + pivot; + } + template constexpr static Vector QuanternionFromBasis(Vector right, Vector up, Vector forward) requires(Len == 4) { T m00 = right.x; @@ -431,6 +440,22 @@ namespace Crafter { q.Normalize(); return q; } + + constexpr static Vector QuanternionFromEuler(T roll, T pitch, T yaw) { + T cr = std::cos(roll * 0.5); + T sr = std::sin(roll * 0.5); + T cp = std::cos(pitch * 0.5); + T sp = std::sin(pitch * 0.5); + T cy = std::cos(yaw * 0.5); + T sy = std::sin(yaw * 0.5); + + return Vector( + sr * cp * cy - cr * sp * sy, + cr * sp * cy + sr * cp * sy, + cr * cp * sy - sr * sp * cy, + cr * cp * cy + sr * sp * sy + ); + } }; }