A quick implementation of Quaternion and Vector classes for use with my MPU9150 library

Fork of QuaternionMath by Chris Pepper

Committer:
yakatano
Date:
Mon Dec 19 18:01:26 2016 +0000
Revision:
1:dd9d33446ccf
Parent:
0:3cc1a808d8c6
aa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p3p 0:3cc1a808d8c6 1 #ifndef __AHRSMATHDSP_VECTOR3_
p3p 0:3cc1a808d8c6 2 #define __AHRSMATHDSP_VECTOR3_
p3p 0:3cc1a808d8c6 3
yakatano 1:dd9d33446ccf 4 //#include "arm_math.h"
yakatano 1:dd9d33446ccf 5 #include "math.h"
yakatano 1:dd9d33446ccf 6 #define PI 3.1415926535
yakatano 1:dd9d33446ccf 7
p3p 0:3cc1a808d8c6 8
p3p 0:3cc1a808d8c6 9 class Vector3 {
p3p 0:3cc1a808d8c6 10 public:
p3p 0:3cc1a808d8c6 11 Vector3(){
p3p 0:3cc1a808d8c6 12 x = y = z = 0;
p3p 0:3cc1a808d8c6 13 }
p3p 0:3cc1a808d8c6 14
p3p 0:3cc1a808d8c6 15 Vector3(float x, float y, float z){
p3p 0:3cc1a808d8c6 16 this->x = x;
p3p 0:3cc1a808d8c6 17 this->y = y;
p3p 0:3cc1a808d8c6 18 this->z = z;
p3p 0:3cc1a808d8c6 19 }
p3p 0:3cc1a808d8c6 20
p3p 0:3cc1a808d8c6 21 void set(float x, float y, float z){
p3p 0:3cc1a808d8c6 22 this->x = x;
p3p 0:3cc1a808d8c6 23 this->y = y;
p3p 0:3cc1a808d8c6 24 this->z = z;
p3p 0:3cc1a808d8c6 25 }
p3p 0:3cc1a808d8c6 26
p3p 0:3cc1a808d8c6 27 float length_squared(){
p3p 0:3cc1a808d8c6 28 return x*x + y*y + z*z;
p3p 0:3cc1a808d8c6 29 }
p3p 0:3cc1a808d8c6 30
p3p 0:3cc1a808d8c6 31 float length(){
p3p 0:3cc1a808d8c6 32 return sqrt(length_squared());
p3p 0:3cc1a808d8c6 33 }
p3p 0:3cc1a808d8c6 34
p3p 0:3cc1a808d8c6 35 void normalise(){
p3p 0:3cc1a808d8c6 36 float len = length();
p3p 0:3cc1a808d8c6 37 x = x/len;
p3p 0:3cc1a808d8c6 38 y = y/len;
p3p 0:3cc1a808d8c6 39 z = z/len;
p3p 0:3cc1a808d8c6 40 }
p3p 0:3cc1a808d8c6 41
p3p 0:3cc1a808d8c6 42 float dot_product(const Vector3 &v){
p3p 0:3cc1a808d8c6 43 return x*v.x + y*v.y + z*v.z;
p3p 0:3cc1a808d8c6 44 }
p3p 0:3cc1a808d8c6 45
p3p 0:3cc1a808d8c6 46 Vector3 cross_product(const Vector3 &v){
p3p 0:3cc1a808d8c6 47 Vector3 temp(y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x);
p3p 0:3cc1a808d8c6 48 return temp;
p3p 0:3cc1a808d8c6 49 }
p3p 0:3cc1a808d8c6 50
p3p 0:3cc1a808d8c6 51 //operator overides
p3p 0:3cc1a808d8c6 52 void operator ()(const float x, const float y, const float z) {
p3p 0:3cc1a808d8c6 53 this->x = x;
p3p 0:3cc1a808d8c6 54 this->y = y;
p3p 0:3cc1a808d8c6 55 this->z = z;
p3p 0:3cc1a808d8c6 56 }
p3p 0:3cc1a808d8c6 57
p3p 0:3cc1a808d8c6 58 bool operator == (const Vector3 &v) {
p3p 0:3cc1a808d8c6 59 return (x==v.x && y==v.y && z==v.z);
p3p 0:3cc1a808d8c6 60 }
p3p 0:3cc1a808d8c6 61
p3p 0:3cc1a808d8c6 62 bool operator != (const Vector3 &v) {
p3p 0:3cc1a808d8c6 63 return (x!=v.x || y!=v.y || z!=v.z);
p3p 0:3cc1a808d8c6 64 }
p3p 0:3cc1a808d8c6 65
p3p 0:3cc1a808d8c6 66 const Vector3 &operator = (const Vector3 &v) {
p3p 0:3cc1a808d8c6 67 x = v.x;
p3p 0:3cc1a808d8c6 68 y = v.y;
p3p 0:3cc1a808d8c6 69 z = v.z;
p3p 0:3cc1a808d8c6 70 return *this;
p3p 0:3cc1a808d8c6 71 }
p3p 0:3cc1a808d8c6 72
p3p 0:3cc1a808d8c6 73 const Vector3 operator - (void) const {
p3p 0:3cc1a808d8c6 74 return Vector3(-x,-y,-z);
p3p 0:3cc1a808d8c6 75 }
p3p 0:3cc1a808d8c6 76
p3p 0:3cc1a808d8c6 77 const Vector3 operator + (const Vector3 &v) const {
p3p 0:3cc1a808d8c6 78 return Vector3(x+v.x, y+v.y, z+v.z);
p3p 0:3cc1a808d8c6 79 }
p3p 0:3cc1a808d8c6 80
p3p 0:3cc1a808d8c6 81 const Vector3 operator - (const Vector3 &v) const {
p3p 0:3cc1a808d8c6 82 return Vector3(x-v.x, y-v.y, z-v.z);
p3p 0:3cc1a808d8c6 83 }
p3p 0:3cc1a808d8c6 84
p3p 0:3cc1a808d8c6 85 const Vector3 operator * (const float num) const {
p3p 0:3cc1a808d8c6 86 Vector3 temp;
p3p 0:3cc1a808d8c6 87 temp.x = x * num;
p3p 0:3cc1a808d8c6 88 temp.y = y * num;
p3p 0:3cc1a808d8c6 89 temp.z = z * num;
p3p 0:3cc1a808d8c6 90 return temp;
p3p 0:3cc1a808d8c6 91 }
p3p 0:3cc1a808d8c6 92
p3p 0:3cc1a808d8c6 93 const Vector3 operator / (const float num) const {
p3p 0:3cc1a808d8c6 94 Vector3 temp;
p3p 0:3cc1a808d8c6 95 temp.x = x / num;
p3p 0:3cc1a808d8c6 96 temp.y = y / num;
p3p 0:3cc1a808d8c6 97 temp.z = z / num;
p3p 0:3cc1a808d8c6 98 return temp;
p3p 0:3cc1a808d8c6 99 }
p3p 0:3cc1a808d8c6 100
p3p 0:3cc1a808d8c6 101 float operator * (const Vector3 &v) const {
p3p 0:3cc1a808d8c6 102 return x*v.x + y*v.y + z*v.z;
p3p 0:3cc1a808d8c6 103 }
p3p 0:3cc1a808d8c6 104
p3p 0:3cc1a808d8c6 105 float x, y, z;
p3p 0:3cc1a808d8c6 106
p3p 0:3cc1a808d8c6 107 };
p3p 0:3cc1a808d8c6 108
p3p 0:3cc1a808d8c6 109 #endif