31 #ifndef OPENVDB_MATH_VEC2_HAS_BEEN_INCLUDED
32 #define OPENVDB_MATH_VEC2_HAS_BEEN_INCLUDED
35 #include <openvdb/Exceptions.h>
45 template<
typename T>
class Mat2;
58 explicit Vec2(T val) { this->mm[0] = this->mm[1] = val; }
68 template <
typename Source>
76 template<
typename Source>
79 this->mm[0] =
static_cast<T
>(t[0]);
80 this->mm[1] =
static_cast<T
>(t[1]);
84 T&
x() {
return this->mm[0];}
85 T&
y() {
return this->mm[1];}
88 T
x()
const {
return this->mm[0];}
89 T
y()
const {
return this->mm[1];}
104 this->mm[0] = x; this->mm[1] = y;
111 this->mm[0] = 0; this->mm[1] = 0;
116 template<
typename Source>
136 bool eq(
const Vec2<T> &v, T eps = static_cast<T>(1.0e-7))
const
147 template <
typename T0,
typename T1>
150 this->mm[0] = v1[0] + v2[0];
151 this->mm[1] = v1[1] + v2[1];
158 template <
typename T0,
typename T1>
161 this->mm[0] = v1[0] - v2[0];
162 this->mm[1] = v1[1] - v2[1];
169 template <
typename T0,
typename T1>
172 this->mm[0] = scalar * v[0];
173 this->mm[1] = scalar * v[1];
178 template <
typename T0,
typename T1>
181 this->mm[0] = v[0] / scalar;
182 this->mm[1] = v[1] / scalar;
188 T
dot(
const Vec2<T> &v)
const {
return this->mm[0]*v[0] + this->mm[1]*v[1]; }
193 return static_cast<T
>(sqrt(
double(this->mm[0]*this->mm[0] + this->mm[1]*this->mm[1])));
198 T
lengthSqr()
const {
return (this->mm[0]*this->mm[0] + this->mm[1]*this->mm[1]); }
229 template <
typename S>
232 this->mm[0] *= scalar;
233 this->mm[1] *= scalar;
238 template <
typename S>
241 this->mm[0] *= v1[0];
242 this->mm[1] *= v1[1];
247 template <
typename S>
250 this->mm[0] /= scalar;
251 this->mm[1] /= scalar;
256 template <
typename S>
259 this->mm[0] /= v1[0];
260 this->mm[1] /= v1[1];
265 template <
typename S>
268 this->mm[0] += scalar;
269 this->mm[1] += scalar;
274 template <
typename S>
277 this->mm[0] += v1[0];
278 this->mm[1] += v1[1];
283 template <
typename S>
286 this->mm[0] -= scalar;
287 this->mm[1] -= scalar;
292 template <
typename S>
295 this->mm[0] -= v1[0];
296 this->mm[1] -= v1[1];
307 T component(
const Vec2<T> &onto, T eps=1.0e-8)
const
312 return dot(onto)*(T(1)/l);
322 return onto*(dot(onto)*(T(1)/l));
331 bool isNan()
const {
return isnan(this->mm[0]) || isnan(this->mm[1]); }
334 bool isInfinite()
const {
return isinf(this->mm[0]) || isinf(this->mm[1]); }
337 bool isFinite()
const {
return finite(this->mm[0]) && finite(this->mm[1]); }
345 template <
typename S,
typename T>
352 template <
typename S,
typename T>
361 template <
typename T0,
typename T1>
369 template <
typename S,
typename T>
376 template <
typename S,
typename T>
385 template <
typename T0,
typename T1>
393 template <
typename T0,
typename T1>
402 template <
typename S,
typename T>
411 template <
typename T0,
typename T1>
420 template <
typename S,
typename T>
430 template <
typename T>
437 template <
typename T>
443 template <
typename T>
453 template <
typename T>
481 template <
typename T>
490 template <
typename T>
504 #if DWREAL_IS_DOUBLE == 1
508 #endif // DWREAL_IS_DOUBLE
514 #endif // OPENVDB_MATH_VEC2_HAS_BEEN_INCLUDED