-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathVector3f.cpp
119 lines (94 loc) · 2.06 KB
/
Vector3f.cpp
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/* *****************************************************************************
* Filename: Vector3f.h
*
* Description: Implementation the Vector3f class.
*
* Author: Thomas Havy
*
* License: MIT License - Copyright (c) 2017 Thomas Havy
* A copy of the license can be found at:
* https://github.com/Th-Havy/Simple-MPU6050-Arduino/blob/master/LICENSE
*
* Changes:
* - Created: 07-Sept-2017
*
* ************************************************************************* */
#include "Vector3f.h"
#include <math.h>
Vector3f::Vector3f(float X, float Y, float Z)
{
x = X;
y = Y;
z = Z;
}
float Vector3f::magnitude(void) const
{
return sqrt(x*x + y*y + z*z);
}
void Vector3f::normalize(void)
{
*this /= magnitude();
}
float Vector3f::dotProduct(const Vector3f& a, const Vector3f& b)
{
return a.x*b.x + a.y*b.y + a.z*b.z;
}
Vector3f Vector3f::crossProduct(const Vector3f& a, const Vector3f& b)
{
Vector3f c;
c.x = a.y*b.z - b.y*a.z;
c.y = a.z*b.x - b.z*a.x;
c.z = a.x*b.y - b.x*a.y;
return c;
}
Vector3f Vector3f::operator-() const
{
Vector3f a;
a.x = -x;
a.y = -y;
a.z = -z;
return a;
}
Vector3f& Vector3f::operator+=(const Vector3f& right)
{
x += right.x;
y += right.x;
z += right.x;
return *this;
}
Vector3f& Vector3f::operator-=(const Vector3f& right)
{
*this += -right;
return *this;
}
Vector3f& Vector3f::operator*=(const float &a)
{
x *= a;
y *= a;
z *= a;
return *this;
}
Vector3f& Vector3f::operator/=(const float &a)
{
return *this *= (1/a);
}
bool operator==(const Vector3f& a, const Vector3f& b)
{
return a.x == b.x && a.y == b.y && a.z == b.z;
}
bool operator!=(const Vector3f& a, const Vector3f& b)
{
return !(a == b);
}
Vector3f operator+(const Vector3f& a, const Vector3f& b)
{
Vector3f c(a);
c += b;
return c;
}
Vector3f operator-(const Vector3f& a, const Vector3f& b)
{
Vector3f c(a);
c -= b;
return c;
}