Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_quaternion.hpp
1#pragma once
2
3#include "structure/math/spk_vector3.hpp"
4#include <cmath>
5
6namespace spk
7{
19 {
20 public:
22 float x;
24 float y;
26 float z;
28 float w;
29
33 Quaternion();
41 Quaternion(float p_x, float p_y, float p_z, float p_w);
42
49 friend std::wostream &operator<<(std::wostream &p_os, const Quaternion &p_vec)
50 {
51 p_os << L"(" << p_vec.x << L", " << p_vec.y << L", " << p_vec.z << L", " << p_vec.w << L")";
52 return p_os;
53 }
54
61 friend std::ostream &operator<<(std::ostream &p_os, const Quaternion &p_vec)
62 {
63 p_os << "(" << p_vec.x << ", " << p_vec.y << ", " << p_vec.z << ", " << p_vec.w << ")";
64 return p_os;
65 }
66
71 std::wstring toWstring() const;
76 std::string toString() const;
77
82 static Quaternion identity();
83
89 static Quaternion fromEuler(const Vector3 &p_euler);
94 Vector3 toEuler() const;
95
102 static Quaternion fromAxisAngle(const Vector3 &p_axis, float p_angle);
103
108 Quaternion normalize() const;
109
115 Quaternion operator*(const Quaternion &p_rhs) const;
121 Vector3 operator*(const Vector3 &p_rhs) const;
122
128 Vector3 rotate(const Vector3 &p_v) const;
129
137 static Quaternion lookAt(const Vector3 &p_eye, const Vector3 &p_target, const Vector3 &p_up);
138 };
139}
Represents a rotation using (x, y, z, w) and offers common conversions.
Definition spk_quaternion.hpp:19
std::wstring toWstring() const
Converts the quaternion to a wide string.
Definition spk_quaternion.cpp:24
std::string toString() const
Converts the quaternion to a string.
Definition spk_quaternion.cpp:31
Quaternion normalize() const
Returns a normalized copy.
Definition spk_quaternion.cpp:113
Quaternion operator*(const Quaternion &p_rhs) const
Concatenates two rotations.
Definition spk_quaternion.cpp:136
static Quaternion fromAxisAngle(const Vector3 &p_axis, float p_angle)
Builds from axis and angle in degrees.
Definition spk_quaternion.cpp:99
static Quaternion lookAt(const Vector3 &p_eye, const Vector3 &p_target, const Vector3 &p_up)
Builds a quaternion looking from eye to target with an up vector.
Definition spk_quaternion.cpp:159
Vector3 rotate(const Vector3 &p_v) const
Rotates a vector by this quaternion.
Definition spk_quaternion.cpp:154
Quaternion()
Builds an identity quaternion.
Definition spk_quaternion.cpp:9
float x
X component of the quaternion vector part.
Definition spk_quaternion.hpp:22
float w
W component representing the scalar part.
Definition spk_quaternion.hpp:28
float z
Z component of the quaternion vector part.
Definition spk_quaternion.hpp:26
friend std::ostream & operator<<(std::ostream &p_os, const Quaternion &p_vec)
Streams the quaternion to a narrow output stream.
Definition spk_quaternion.hpp:61
friend std::wostream & operator<<(std::wostream &p_os, const Quaternion &p_vec)
Streams the quaternion to a wide output stream.
Definition spk_quaternion.hpp:49
static Quaternion fromEuler(const Vector3 &p_euler)
Builds from Euler angles in degrees.
Definition spk_quaternion.cpp:43
static Quaternion identity()
Returns the identity quaternion.
Definition spk_quaternion.cpp:38
float y
Y component of the quaternion vector part.
Definition spk_quaternion.hpp:24
Vector3 toEuler() const
Converts to Euler angles in degrees.
Definition spk_quaternion.cpp:65