aboutsummaryrefslogtreecommitdiff
path: root/include/fml/quat.h
blob: 67a89d5ad9d65ed4624b6d6af10a6e27e6b21ec8 (plain)
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
#ifndef QUAT_H
#define QUAT_H

#include "fml.h"
#include <iostream>

namespace fml {
    class quat {
    public:
        scalar w, x, y, z;
    public:
        quat(scalar w, scalar x, scalar y, scalar z);
        quat(scalar x, scalar y, scalar z);
        quat(scalar w, vec3 vec);
        quat(vec3 vec);
        quat();

        operator vec3() const;

        quat conjugate() const;

        /* returns <cos / 2, x * sin / 2, y * sin / 2, z * sin / 2> */
        static quat from_angleaxis(scalar angle, vec3 axis);

        /* returns rotquat * this * rotquat.conj */
        quat rotateby(const quat &rotquat) const;
    };

    quat operator*(const quat &, const quat &);
    std::ostream &operator<<(std::ostream &os, const quat &);
}
#endif