PeriDyno 1.0.0
Loading...
Searching...
No Matches
Vector3D.inl
Go to the documentation of this file.
1#include <limits>
2#include <glm/gtx/norm.hpp>
3
4namespace dyno {
5
6 template <typename T>
7 DYN_FUNC Vector<T, 3>::Vector()
8 :Vector(0) //delegating ctor
9 {
10 }
11
12 template <typename T>
13 DYN_FUNC Vector<T, 3>::Vector(T x)
14 : Vector(x, x, x) //delegating ctor
15 {
16 }
17
18 template <typename T>
19 DYN_FUNC Vector<T, 3>::Vector(T x, T y, T z)
20 : data_(x, y, z)
21 {
22 }
23
24 template <typename T>
25 DYN_FUNC Vector<T, 3>::Vector(const Vector<T, 3>& vec)
26 : data_(vec.data_)
27 {
28
29 }
30
31 template <typename T>
32 DYN_FUNC Vector<T, 3>::~Vector()
33 {
34 }
35
36 template <typename T>
37 DYN_FUNC T& Vector<T, 3>::operator[] (unsigned int idx)
38 {
39 return const_cast<T &> (static_cast<const Vector<T, 3> &>(*this)[idx]);
40 }
41
42 template <typename T>
43 DYN_FUNC const T& Vector<T, 3>::operator[] (unsigned int idx) const
44 {
45 return data_[idx];
46 }
47
48 template <typename T>
49 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator+ (const Vector<T, 3> &vec2) const
50 {
51 return Vector<T, 3>(*this) += vec2;
52 }
53
54 template <typename T>
55 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator+= (const Vector<T, 3> &vec2)
56 {
57 data_ += vec2.data_;
58 return *this;
59 }
60
61 template <typename T>
62 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator- (const Vector<T, 3> &vec2) const
63 {
64 return Vector<T, 3>(*this) -= vec2;
65 }
66
67 template <typename T>
68 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator-= (const Vector<T, 3> &vec2)
69 {
70 data_ -= vec2.data_;
71 return *this;
72 }
73
74 template <typename T>
75 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator*(const Vector<T, 3> &vec2) const
76 {
77 return Vector<T, 3>(data_[0] * vec2[0], data_[1] * vec2[1], data_[2] * vec2[2]);
78 }
79
80 template <typename T>
81 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator*=(const Vector<T, 3> &vec2)
82 {
83 data_[0] *= vec2.data_[0]; data_[1] *= vec2.data_[1]; data_[2] *= vec2.data_[2];
84 return *this;
85 }
86
87 template <typename T>
88 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator/(const Vector<T, 3> &vec2) const
89 {
90 return Vector<T, 3>(data_[0] / vec2[0], data_[1] / vec2[1], data_[2] / vec2[2]);
91 }
92
93 template <typename T>
94 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator/=(const Vector<T, 3> &vec2)
95 {
96 data_[0] /= vec2.data_[0]; data_[1] /= vec2.data_[1]; data_[2] /= vec2.data_[2];
97 return *this;
98 }
99
100 template <typename T>
101 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator=(const Vector<T, 3> &vec2)
102 {
103 data_ = vec2.data_;
104 return *this;
105 }
106
107
108 template <typename T>
109 DYN_FUNC bool Vector<T, 3>::operator== (const Vector<T, 3> &vec2) const
110 {
111 return data_ == vec2.data_;
112 }
113
114 template <typename T>
115 DYN_FUNC bool Vector<T, 3>::operator!= (const Vector<T, 3> &vec2) const
116 {
117 return !((*this) == vec2);
118 }
119
120 template <typename T>
121 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator+(T value) const
122 {
123 return Vector<T, 3>(*this) += value;
124 }
125
126 template <typename T>
127 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator+= (T value)
128 {
129 data_ += value;
130 return *this;
131 }
132
133 template <typename T>
134 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator-(T value) const
135 {
136 return Vector<T, 3>(*this) -= value;
137 }
138
139 template <typename T>
140 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator-= (T value)
141 {
142 data_ -= value;
143 return *this;
144 }
145
146 template <typename T>
147 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator* (T scale) const
148 {
149 return Vector<T, 3>(*this) *= scale;
150 }
151
152 template <typename T>
153 Vector<T, 3>& Vector<T, 3>::operator*= (T scale)
154 {
155 data_ *= scale;
156 return *this;
157 }
158
159 template <typename T>
160 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator/ (T scale) const
161 {
162 return Vector<T, 3>(*this) /= scale;
163 }
164
165 template <typename T>
166 DYN_FUNC Vector<T, 3>& Vector<T, 3>::operator/= (T scale)
167 {
168 data_ /= scale;
169 return *this;
170 }
171
172 template <typename T>
173 DYN_FUNC const Vector<T, 3> Vector<T, 3>::operator-(void) const
174 {
175 Vector<T, 3> res;
176 res.data_ = -data_;
177 return res;
178 }
179
180 template <typename T>
181 DYN_FUNC T Vector<T, 3>::norm() const
182 {
183 return glm::length(data_);
184 }
185
186 template <typename T>
187 DYN_FUNC T Vector<T, 3>::normSquared() const
188 {
189 return glm::length2(data_);
190 }
191
192 template <typename T>
193 DYN_FUNC Vector<T, 3>& Vector<T, 3>::normalize()
194 {
195 data_ = glm::length(data_) > glm::epsilon<T>() ? glm::normalize(data_) : glm::tvec3<T>(0, 0, 0);
196 return *this;
197 }
198
199 template <typename T>
200 DYN_FUNC Vector<T, 3> Vector<T, 3>::cross(const Vector<T, 3>& vec2) const
201 {
202 Vector<T, 3> res;
203 res.data_ = glm::cross(data_, vec2.data_);
204 return res;
205 }
206
207 template <typename T>
208 DYN_FUNC T Vector<T, 3>::dot(const Vector<T, 3>& vec2) const
209 {
210 return glm::dot(data_, vec2.data_);
211 }
212
213 template <typename T>
214 DYN_FUNC Vector<T, 3> Vector<T, 3>::minimum(const Vector<T, 3>& vec2) const
215 {
216 Vector<T, 3> res;
217 res[0] = data_[0] < vec2[0] ? data_[0] : vec2[0];
218 res[1] = data_[1] < vec2[1] ? data_[1] : vec2[1];
219 res[2] = data_[2] < vec2[2] ? data_[2] : vec2[2];
220 return res;
221 }
222
223 template <typename T>
224 DYN_FUNC Vector<T, 3> Vector<T, 3>::maximum(const Vector<T, 3>& vec2) const
225 {
226 Vector<T, 3> res;
227 res[0] = data_[0] > vec2[0] ? data_[0] : vec2[0];
228 res[1] = data_[1] > vec2[1] ? data_[1] : vec2[1];
229 res[2] = data_[2] > vec2[2] ? data_[2] : vec2[2];
230 return res;
231 }
232
233 //make * operator commutative
234 template <typename S, typename T>
235 DYN_FUNC const Vector<T, 3> operator *(S scale, const Vector<T, 3> &vec)
236 {
237 return vec * (T)scale;
238 }
239
240}
DYN_FUNC Vector()
Definition VectorBase.h:26
#define T(t)
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
TEMPLATE_TYPENAME_T MAT4_T scale(MAT4_T const &m, VEC3_T const &v)
Definition vgMath.h:506
vgm::Vec2 vec2
Definition vgMath.h:630