-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathQuaternion.hpp
50 lines (44 loc) · 1.03 KB
/
Quaternion.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#pragma once
#include "Vector.hpp"
#include "Matrix4x4d.hpp"
namespace kazakami
{
class Quaternion
{
friend std::ostream & operator << (std::ostream&, const Quaternion&);
double innerProduct(const Vector3d & a,
const Vector3d & b) const;
Vector3d outerProduct(const Vector3d & a,
const Vector3d & b) const;
public:
double t;
Vector3d v;
Quaternion();
Quaternion(double w,
double x,
double y,
double z);
Quaternion(double w,
const Vector3d & vec);
double Norm() const;
Quaternion Conjugate() const;
Quaternion operator *(const Quaternion & q) const;
Quaternion & operator *=(const Quaternion & q);
Vector3d getVector() const;
Matrix4x4d toMat() const;
};
//変形させない四元数
inline Quaternion IdentityQuaternion()
{
return Quaternion(1, 0, 0, 0);
}
inline std::ostream & operator << (std::ostream & os,
const Quaternion & q)
{
os << "(" << q.t << "; "
<< q.v.X() << ", "
<< q.v.Y() << ", "
<< q.v.Z() << ")";
return os;
}
}//namespace kazakami