summaryrefslogtreecommitdiffhomepage
path: root/facetracknoir/rotation.h
blob: 9dcea285ee88e5ff306778020b7e96544532d1cb (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
/* Copyright (c) 2012 Patrick Ruoff
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 */

#ifndef ROTATION_H
#define ROTATION_H

// ----------------------------------------------------------------------------
class Rotation {
	friend Rotation operator*(const Rotation& A, const Rotation& B);
public:
	Rotation() : a(1.0),b(0.0),c(0.0),d(0.0) {}
	Rotation(double yaw, double pitch, double roll) { fromEuler(yaw, pitch, roll); }
	Rotation(double a, double b, double c, double d) : a(a),b(b),c(c),d(d) {}

	Rotation inv();	// inverse

	// conversions
	void fromEuler(double yaw, double pitch, double roll);
	void toEuler(volatile double& yaw, volatile double& pitch, volatile double& roll);
	
protected:
	double a,b,c,d; // quaternion coefficients
};

Rotation operator*(const Rotation& A, const Rotation& B); // composition of rotations

#endif //ROTATION_H