Honeycomb  0.1
Component-Model Framework
Vec3.h
Go to the documentation of this file.
1 // Honeycomb, Copyright (C) 2015 NewGamePlus Inc. Distributed under the Boost Software License v1.0.
2 #pragma once
3 
6 
7 namespace honey
8 {
9 
10 template<class Real, int Options>
11 struct matrix::priv::Traits<Vec<3,Real,Options>> : vec::priv::Traits<3,Real,Options,std::allocator<int8>>
12 {
14 };
15 
16 namespace vec { namespace priv
17 {
18  template<class Real, szt Align>
19  struct StorageFieldsMixin<Real, 3, Align>
20  {
24  };
25 } }
26 
27 namespace matrix { namespace priv
28 {
29  template<class R, int O>
30  void storageCopy(const R* a, Vec<3,R,O>& v) { v.x = a[0]; v.y = a[1]; v.z = a[2]; }
31  template<class R, int O>
32  void storageCopy(const Vec<3,R,O>& v, R* a) { a[0] = v.x; a[1] = v.y; a[2] = v.z; }
33 
34  template<class R, int O>
35  void storageFill(Vec<3,R,O>& v, R f) { v.x = f; v.y = f; v.z = f; }
36  template<class R, int O>
37  void storageFillZero(Vec<3,R,O>& v) { v.x = 0; v.y = 0; v.z = 0; }
38 
39  template<class R, int O>
40  bool storageEqual(const Vec<3,R,O>& lhs, const Vec<3,R,O>& rhs) { return lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z; }
41 } }
42 
44 template<class Real, int Options>
45 class Vec<3,Real,Options> : public VecBase<Vec<3,Real,Options>>
46 {
48  using typename Super::Alge;
49 protected:
50  typedef Vec<2,Real> Vec2;
51  typedef Vec Vec3;
52  typedef Vec<4,Real> Vec4;
58 public:
59  using Super::dot;
60  using Super::x;
61  using Super::y;
62  using Super::z;
63 
65  Vec() {}
66  Vec(Real x, Real y, Real z) { this->x = x; this->y = y; this->z = z; }
68  explicit Vec(Real scalar) { this->fromScalar(scalar); }
70  explicit Vec(const Vec2& v, Real z = 0) { x = v.x; y = v.y; this->z = z; }
72  explicit Vec(const Vec4& v) { x = v.x; y = v.y; z = v.z; }
74  template<class T>
75  Vec(const MatrixBase<T>& rhs) { operator=(rhs); }
76 
77  template<class T>
78  Vec& operator=(const MatrixBase<T>& rhs) { Super::operator=(rhs); return *this; }
79 
82  Real lengthSqr() const { return x*x + y*y + z*z; }
83  Real dot(const Vec& v) const { return x*v.x + y*v.y + z*v.z; }
85 
87  Vec3 cross(const Vec3& v) const { return Vec3(y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x); }
89  Vec3 crossUnit(const Vec3& v) const { return cross(v).normalize(); }
90 
92  static void orthonormalize(Vec3& u, Vec3& v, Vec3& w)
93  {
94  u = u.normalize();
95 
96  Real dot0 = u.dot(v);
97  v -= dot0*u;
98  v = v.normalize();
99 
100  Real dot1 = v.dot(w);
101  dot0 = u.dot(w);
102  w -= dot0*u + dot1*v;
103  w = w.normalize();
104  }
105 
107  tuple<Vec3,Vec3> orthonormalBasis() const
108  {
109  Vec u,v;
110  const Vec3& w = *this;
111 
112  if (Alge::abs(w[0]) >= Alge::abs(w[1]))
113  {
114  // w.x or w.z is the largest magnitude component, swap them
115  Real invLength = Alge::sqrtInv(w[0]*w[0] + w[2]*w[2]);
116  u[0] = -w[2]*invLength;
117  u[1] = 0;
118  u[2] = +w[0]*invLength;
119  v[0] = w[1]*u[2];
120  v[1] = w[2]*u[0] - w[0]*u[2];
121  v[2] = -w[1]*u[0];
122  }
123  else
124  {
125  // w.y or w.z is the largest magnitude component, swap them
126  Real invLength = Alge::sqrtInv(w[1]*w[1] + w[2]*w[2]);
127  u[0] = 0;
128  u[1] = +w[2]*invLength;
129  u[2] = -w[1]*invLength;
130  v[0] = w[1]*u[2] - w[2]*u[1];
131  v[1] = -w[0]*u[2];
132  v[2] = w[0]*u[1];
133  }
134  return make_tuple(u,v);
135  }
136 
137 public:
138  static const Vec zero;
139  static const Vec one;
140  static const Vec axisX;
141  static const Vec axisY;
142  static const Vec axisZ;
143  static const Vec axis[3];
144 
145 public:
148  VecSwizCon2 xx() const { return VecSwizCon2(x,x); }
149  VecSwizCon3 xxx() const { return VecSwizCon3(x,x,x); }
150  VecSwizCon4 xxxx() const { return VecSwizCon4(x,x,x,x); }
151  VecSwizCon4 xxxy() const { return VecSwizCon4(x,x,x,y); }
152  VecSwizCon4 xxxz() const { return VecSwizCon4(x,x,x,z); }
153  VecSwizCon3 xxy() const { return VecSwizCon3(x,x,y); }
154  VecSwizCon4 xxyx() const { return VecSwizCon4(x,x,y,x); }
155  VecSwizCon4 xxyy() const { return VecSwizCon4(x,x,y,y); }
156  VecSwizCon4 xxyz() const { return VecSwizCon4(x,x,y,z); }
157  VecSwizCon3 xxz() const { return VecSwizCon3(x,x,z); }
158  VecSwizCon4 xxzx() const { return VecSwizCon4(x,x,z,x); }
159  VecSwizCon4 xxzy() const { return VecSwizCon4(x,x,z,y); }
160  VecSwizCon4 xxzz() const { return VecSwizCon4(x,x,z,z); }
161  VecSwizCon2 xy() const { return VecSwizCon2(x,y); }
162  VecSwizCon3 xyx() const { return VecSwizCon3(x,y,x); }
163  VecSwizCon4 xyxx() const { return VecSwizCon4(x,y,x,x); }
164  VecSwizCon4 xyxy() const { return VecSwizCon4(x,y,x,y); }
165  VecSwizCon4 xyxz() const { return VecSwizCon4(x,y,x,z); }
166  VecSwizCon3 xyy() const { return VecSwizCon3(x,y,y); }
167  VecSwizCon4 xyyx() const { return VecSwizCon4(x,y,y,x); }
168  VecSwizCon4 xyyy() const { return VecSwizCon4(x,y,y,y); }
169  VecSwizCon4 xyyz() const { return VecSwizCon4(x,y,y,z); }
170  VecSwizCon3 xyz() const { return VecSwizCon3(x,y,z); }
171  VecSwizCon4 xyzx() const { return VecSwizCon4(x,y,z,x); }
172  VecSwizCon4 xyzy() const { return VecSwizCon4(x,y,z,y); }
173  VecSwizCon4 xyzz() const { return VecSwizCon4(x,y,z,z); }
174  VecSwizCon2 xz() const { return VecSwizCon2(x,z); }
175  VecSwizCon3 xzx() const { return VecSwizCon3(x,z,x); }
176  VecSwizCon4 xzxx() const { return VecSwizCon4(x,z,x,x); }
177  VecSwizCon4 xzxy() const { return VecSwizCon4(x,z,x,y); }
178  VecSwizCon4 xzxz() const { return VecSwizCon4(x,z,x,z); }
179  VecSwizCon3 xzy() const { return VecSwizCon3(x,z,y); }
180  VecSwizCon4 xzyx() const { return VecSwizCon4(x,z,y,x); }
181  VecSwizCon4 xzyy() const { return VecSwizCon4(x,z,y,y); }
182  VecSwizCon4 xzyz() const { return VecSwizCon4(x,z,y,z); }
183  VecSwizCon3 xzz() const { return VecSwizCon3(x,z,z); }
184  VecSwizCon4 xzzx() const { return VecSwizCon4(x,z,z,x); }
185  VecSwizCon4 xzzy() const { return VecSwizCon4(x,z,z,y); }
186  VecSwizCon4 xzzz() const { return VecSwizCon4(x,z,z,z); }
187  VecSwizCon2 yx() const { return VecSwizCon2(y,x); }
188  VecSwizCon3 yxx() const { return VecSwizCon3(y,x,x); }
189  VecSwizCon4 yxxx() const { return VecSwizCon4(y,x,x,x); }
190  VecSwizCon4 yxxy() const { return VecSwizCon4(y,x,x,y); }
191  VecSwizCon4 yxxz() const { return VecSwizCon4(y,x,x,z); }
192  VecSwizCon3 yxy() const { return VecSwizCon3(y,x,y); }
193  VecSwizCon4 yxyx() const { return VecSwizCon4(y,x,y,x); }
194  VecSwizCon4 yxyy() const { return VecSwizCon4(y,x,y,y); }
195  VecSwizCon4 yxyz() const { return VecSwizCon4(y,x,y,z); }
196  VecSwizCon3 yxz() const { return VecSwizCon3(y,x,z); }
197  VecSwizCon4 yxzx() const { return VecSwizCon4(y,x,z,x); }
198  VecSwizCon4 yxzy() const { return VecSwizCon4(y,x,z,y); }
199  VecSwizCon4 yxzz() const { return VecSwizCon4(y,x,z,z); }
200  VecSwizCon2 yy() const { return VecSwizCon2(y,y); }
201  VecSwizCon3 yyx() const { return VecSwizCon3(y,y,x); }
202  VecSwizCon4 yyxx() const { return VecSwizCon4(y,y,x,x); }
203  VecSwizCon4 yyxy() const { return VecSwizCon4(y,y,x,y); }
204  VecSwizCon4 yyxz() const { return VecSwizCon4(y,y,x,z); }
205  VecSwizCon3 yyy() const { return VecSwizCon3(y,y,y); }
206  VecSwizCon4 yyyx() const { return VecSwizCon4(y,y,y,x); }
207  VecSwizCon4 yyyy() const { return VecSwizCon4(y,y,y,y); }
208  VecSwizCon4 yyyz() const { return VecSwizCon4(y,y,y,z); }
209  VecSwizCon3 yyz() const { return VecSwizCon3(y,y,z); }
210  VecSwizCon4 yyzx() const { return VecSwizCon4(y,y,z,x); }
211  VecSwizCon4 yyzy() const { return VecSwizCon4(y,y,z,y); }
212  VecSwizCon4 yyzz() const { return VecSwizCon4(y,y,z,z); }
213  VecSwizCon2 yz() const { return VecSwizCon2(y,z); }
214  VecSwizCon3 yzx() const { return VecSwizCon3(y,z,x); }
215  VecSwizCon4 yzxx() const { return VecSwizCon4(y,z,x,x); }
216  VecSwizCon4 yzxy() const { return VecSwizCon4(y,z,x,y); }
217  VecSwizCon4 yzxz() const { return VecSwizCon4(y,z,x,z); }
218  VecSwizCon3 yzy() const { return VecSwizCon3(y,z,y); }
219  VecSwizCon4 yzyx() const { return VecSwizCon4(y,z,y,x); }
220  VecSwizCon4 yzyy() const { return VecSwizCon4(y,z,y,y); }
221  VecSwizCon4 yzyz() const { return VecSwizCon4(y,z,y,z); }
222  VecSwizCon3 yzz() const { return VecSwizCon3(y,z,z); }
223  VecSwizCon4 yzzx() const { return VecSwizCon4(y,z,z,x); }
224  VecSwizCon4 yzzy() const { return VecSwizCon4(y,z,z,y); }
225  VecSwizCon4 yzzz() const { return VecSwizCon4(y,z,z,z); }
226  VecSwizCon2 zx() const { return VecSwizCon2(z,x); }
227  VecSwizCon3 zxx() const { return VecSwizCon3(z,x,x); }
228  VecSwizCon4 zxxx() const { return VecSwizCon4(z,x,x,x); }
229  VecSwizCon4 zxxy() const { return VecSwizCon4(z,x,x,y); }
230  VecSwizCon4 zxxz() const { return VecSwizCon4(z,x,x,z); }
231  VecSwizCon3 zxy() const { return VecSwizCon3(z,x,y); }
232  VecSwizCon4 zxyx() const { return VecSwizCon4(z,x,y,x); }
233  VecSwizCon4 zxyy() const { return VecSwizCon4(z,x,y,y); }
234  VecSwizCon4 zxyz() const { return VecSwizCon4(z,x,y,z); }
235  VecSwizCon3 zxz() const { return VecSwizCon3(z,x,z); }
236  VecSwizCon4 zxzx() const { return VecSwizCon4(z,x,z,x); }
237  VecSwizCon4 zxzy() const { return VecSwizCon4(z,x,z,y); }
238  VecSwizCon4 zxzz() const { return VecSwizCon4(z,x,z,z); }
239  VecSwizCon2 zy() const { return VecSwizCon2(z,y); }
240  VecSwizCon3 zyx() const { return VecSwizCon3(z,y,x); }
241  VecSwizCon4 zyxx() const { return VecSwizCon4(z,y,x,x); }
242  VecSwizCon4 zyxy() const { return VecSwizCon4(z,y,x,y); }
243  VecSwizCon4 zyxz() const { return VecSwizCon4(z,y,x,z); }
244  VecSwizCon3 zyy() const { return VecSwizCon3(z,y,y); }
245  VecSwizCon4 zyyx() const { return VecSwizCon4(z,y,y,x); }
246  VecSwizCon4 zyyy() const { return VecSwizCon4(z,y,y,y); }
247  VecSwizCon4 zyyz() const { return VecSwizCon4(z,y,y,z); }
248  VecSwizCon3 zyz() const { return VecSwizCon3(z,y,z); }
249  VecSwizCon4 zyzx() const { return VecSwizCon4(z,y,z,x); }
250  VecSwizCon4 zyzy() const { return VecSwizCon4(z,y,z,y); }
251  VecSwizCon4 zyzz() const { return VecSwizCon4(z,y,z,z); }
252  VecSwizCon2 zz() const { return VecSwizCon2(z,z); }
253  VecSwizCon3 zzx() const { return VecSwizCon3(z,z,x); }
254  VecSwizCon4 zzxx() const { return VecSwizCon4(z,z,x,x); }
255  VecSwizCon4 zzxy() const { return VecSwizCon4(z,z,x,y); }
256  VecSwizCon4 zzxz() const { return VecSwizCon4(z,z,x,z); }
257  VecSwizCon3 zzy() const { return VecSwizCon3(z,z,y); }
258  VecSwizCon4 zzyx() const { return VecSwizCon4(z,z,y,x); }
259  VecSwizCon4 zzyy() const { return VecSwizCon4(z,z,y,y); }
260  VecSwizCon4 zzyz() const { return VecSwizCon4(z,z,y,z); }
261  VecSwizCon3 zzz() const { return VecSwizCon3(z,z,z); }
262  VecSwizCon4 zzzx() const { return VecSwizCon4(z,z,z,x); }
263  VecSwizCon4 zzzy() const { return VecSwizCon4(z,z,z,y); }
264  VecSwizCon4 zzzz() const { return VecSwizCon4(z,z,z,z); }
265 
266 
269  VecSwizRef2 xy() { return VecSwizRef2(x,y); }
270  VecSwizRef3 xyz() { return VecSwizRef3(x,y,z); }
271  VecSwizRef2 xz() { return VecSwizRef2(x,z); }
272  VecSwizRef3 xzy() { return VecSwizRef3(x,z,y); }
273  VecSwizRef2 yx() { return VecSwizRef2(y,x); }
274  VecSwizRef3 yxz() { return VecSwizRef3(y,x,z); }
275  VecSwizRef2 yz() { return VecSwizRef2(y,z); }
276  VecSwizRef3 yzx() { return VecSwizRef3(y,z,x); }
277  VecSwizRef2 zx() { return VecSwizRef2(z,x); }
278  VecSwizRef3 zxy() { return VecSwizRef3(z,x,y); }
279  VecSwizRef2 zy() { return VecSwizRef2(z,y); }
280  VecSwizRef3 zyx() { return VecSwizRef3(z,y,x); }
282 };
283 
284 template<class R, int O> const Vec<3,R,O> Vec<3,R,O>::zero (0);
285 template<class R, int O> const Vec<3,R,O> Vec<3,R,O>::one (1);
286 template<class R, int O> const Vec<3,R,O> Vec<3,R,O>::axisX (1, 0, 0);
287 template<class R, int O> const Vec<3,R,O> Vec<3,R,O>::axisY (0, 1, 0);
288 template<class R, int O> const Vec<3,R,O> Vec<3,R,O>::axisZ (0, 0, 1);
289 template<class R, int O> const Vec<3,R,O> Vec<3,R,O>::axis[3] = { axisX, axisY, axisZ };
290 
292 template<class R, int Opt>
295 struct priv::map_impl<Vec<3,R,Opt>, Vec<3,R,Opt>>
296 {
297  template<class T, class O, class Func>
298  static O&& func(T&& v, O&& o, Func&& f) { o.x = f(v.x); o.y = f(v.y); o.z = f(v.z); return forward<O>(o); }
299 };
300 
301 template<class R, int Opt>
302 struct priv::map_impl<Vec<3,R,Opt>, Vec<3,R,Opt>, Vec<3,R,Opt>>
303 {
304  template<class T, class T2, class O, class Func>
305  static O&& func(T&& v, T2&& rhs, O&& o, Func&& f) { o.x = f(v.x,rhs.x); o.y = f(v.y,rhs.y); o.z = f(v.z,rhs.z); return forward<O>(o); }
306 };
307 
308 template<class R, int O, class Accum_>
309 struct priv::reduce_impl<Vec<3,R,O>, Accum_>
310 {
311  template<class T, class Accum, class Func>
312  static Accum_ func(T&& v, Accum&& initVal, Func&& f) { return f(f(f(forward<Accum>(initVal), v.x), v.y), v.z); }
313 };
314 
315 template<class R, int O, class Accum_>
316 struct priv::reduce_impl<Vec<3,R,O>, Accum_, Vec<3,R,O>>
317 {
318  template<class T, class T2, class Accum, class Func>
319  static Accum_ func(T&& v, T2&& rhs, Accum&& initVal, Func&& f) { return f(f(f(forward<Accum>(initVal), v.x, rhs.x), v.y, rhs.y), v.z, rhs.z); }
320 };
322 
324 template<class Real, int Options>
326 class VecSwizCon<3,Real,Options> : public VecSwizConBase<VecSwizCon<3,Real,Options>>
327 {
328 public:
329  VecSwizCon(Real x, Real y, Real z) { this->x = x; this->y = y; this->z = z; }
330 };
331 
333 template<class Real, int Options>
334 class VecSwizRef<3,Real,Options> : public VecSwizRefBase<VecSwizRef<3,Real,Options>>
335 {
336  template<class> friend class VecSwizRefBase;
337 public:
339  using Super::operator=;
340  using Super::x;
341  using Super::y;
342  using Super::z;
343 
344  VecSwizRef(Real& x, Real& y, Real& z) : rx(x), ry(y), rz(z) { this->x = x; this->y = y; this->z = z; }
345 
346  VecSwizRef& commit() { rx = x; ry = y; rz = z; return *this; }
347 
348 private:
349  Real& rx;
350  Real& ry;
351  Real& rz;
352 };
353 
354 
356 typedef Vec<3> Vec3;
359 
364 
365 }
366 
367 #include "Honey/Math/Alge/Vec/platform/Vec3.h"
MatrixS & fromScalar(Real f)
Initialize with scalar in every element.
Definition: Base.h:72
VecSwizCon2 zy() const
Definition: Vec3.h:239
Real lengthSqr() const
Definition: Vec3.h:82
VecSwizCon4 zzxz() const
Definition: Vec3.h:256
VecSwizCon2 yx() const
Definition: Vec3.h:187
VecSwizCon4 yxxy() const
Definition: Vec3.h:190
Automatic (stack-compatible) vector storage that allows direct access to dimension fields...
Definition: Storage.h:13
VecBase & operator=(const MatrixBase< T > &rhs)
Assign to row or column vector of any dimension. Asserts that if this vector has a fixed dimension th...
Definition: Base.h:35
void storageFillZero(StorageBlock< T > &store)
Fill block storage with zeros.
Definition: Block.h:136
VecSwizCon4 zxxy() const
Definition: Vec3.h:229
VecSwizCon4 zxzz() const
Definition: Vec3.h:238
static const Vec axisZ
Definition: Vec3.h:142
VecSwizCon4 yxyx() const
Definition: Vec3.h:193
Vec3 cross(const Vec3 &v) const
Vector cross product.
Definition: Vec3.h:87
VecSwizRef3 xzy()
Definition: Vec3.h:272
N-dimensional vector traits.
Definition: Vec.h:14
VecSwizRef & commit()
Definition: Vec3.h:346
VecSwizRef< 3, Real, Options > VecSwizRef3
Definition: Vec3.h:57
static const Vec axisY
Definition: Vec3.h:141
VecSwizCon4 xzzx() const
Definition: Vec3.h:184
VecSwizCon4 yzzx() const
Definition: Vec3.h:223
VecSwizCon3 yxz() const
Definition: Vec3.h:196
Real dot(const VecBase< T > &v) const
Vector dot product.
Definition: Base.h:91
VecSwizCon4 xyzy() const
Definition: Vec3.h:172
VecSwizCon4 zxyx() const
Definition: Vec3.h:232
VecSwizCon3 xxy() const
Definition: Vec3.h:153
VecSwizRef2 xz()
Definition: Vec3.h:271
VecSwizRef2 zy()
Definition: Vec3.h:279
VecSwizCon4 yyyy() const
Definition: Vec3.h:207
VecSwizCon3 yzz() const
Definition: Vec3.h:222
VecSwizCon3 xzz() const
Definition: Vec3.h:183
VecSwizCon4 xzzy() const
Definition: Vec3.h:185
Vec< 3, Float > Vec3_f
Definition: Vec3.h:357
VecSwizCon4 xyyy() const
Definition: Vec3.h:168
Vec< 3, Double > Vec3_d
Definition: Vec3.h:358
VecSwizCon4 zxyy() const
Definition: Vec3.h:233
VecSwizCon3 zzy() const
Definition: Vec3.h:257
VecSwizCon3 zzx() const
Definition: Vec3.h:253
VecSwizCon4 yzyz() const
Definition: Vec3.h:221
VecSwizCon4 xyxy() const
Definition: Vec3.h:164
VecS normalize(optional< Real & > len=optnull) const
Get unit vector. The pre-normalized length will be returned in len if specified.
Definition: Base.h:77
VecSwizCon4 yyxx() const
Definition: Vec3.h:202
VecSwizCon3 zxz() const
Definition: Vec3.h:235
VecSwizRef(Real &x, Real &y, Real &z)
Definition: Vec3.h:344
Vec(Real x, Real y, Real z)
Definition: Vec3.h:66
VecSwizCon4 xxyy() const
Definition: Vec3.h:155
bool storageEqual(const StorageBlock< T > &lhs, const StorageBlock< T2 > &rhs)
Test between block storages.
Definition: Block.h:157
VecSwizCon4 xyxz() const
Definition: Vec3.h:165
VecSwizRef3 yxz()
Definition: Vec3.h:274
3D const swizzle vector
Definition: Vec3.h:326
Alge_< Real > Alge
Definition: Base.h:28
tuple< Vec3, Vec3 > orthonormalBasis() const
Generate an orthonormal basis {u,v,this} (all unit length and perpendicular). Returns (Vec3 u...
Definition: Vec3.h:107
VecSwizCon3 zyx() const
Definition: Vec3.h:240
VecSwizCon4 zyyz() const
Definition: Vec3.h:247
Definition: Swiz.h:16
VecSwizCon4 yzxz() const
Definition: Vec3.h:217
Vec & operator=(const MatrixBase< T > &rhs)
Definition: Vec3.h:78
Vector for const swizzle operators.
Definition: Swiz.h:10
Real dot(const Vec &v) const
Definition: Vec3.h:83
static Real sqrtInv(Real x)
Inverse Square Root.
Definition: Alge.h:65
VecSwizRef3 xyz()
Definition: Vec3.h:270
2D const swizzle vector
Definition: Vec2.h:175
VecSwizCon< 4, Real, Options > VecSwizCon4
Definition: Vec3.h:55
VecSwizCon< 3, Real, Options > VecSwizCon3
Definition: Vec3.h:54
VecSwizCon2 xy() const
Definition: Vec3.h:161
static const Vec one
Definition: Vec3.h:139
VecSwizCon2 xx() const
Definition: Vec3.h:148
VecSwizCon3 zxx() const
Definition: Vec3.h:227
VecSwizRef2 yz()
Definition: Vec3.h:275
VecSwizCon4 xxxz() const
Definition: Vec3.h:152
VecSwizCon3 xyz() const
Definition: Vec3.h:170
Vec(Real scalar)
Construct uniform vector.
Definition: Vec3.h:68
VecSwizCon3 zxy() const
Definition: Vec3.h:231
Vec(const MatrixBase< T > &rhs)
Construct from vector of same dimension.
Definition: Vec3.h:75
VecSwizCon4 zzzx() const
Definition: Vec3.h:262
VecSwizCon3 zyy() const
Definition: Vec3.h:244
VecSwizCon4 xzxx() const
Definition: Vec3.h:176
VecSwizCon4 xzxz() const
Definition: Vec3.h:178
VecSwizCon4 yxxz() const
Definition: Vec3.h:191
VecSwizCon4 yyzx() const
Definition: Vec3.h:210
VecSwizCon4 yzxx() const
Definition: Vec3.h:215
VecSwizCon3 zzz() const
Definition: Vec3.h:261
VecSwizCon3 yxy() const
Definition: Vec3.h:192
VecSwizRef2 xy()
Definition: Vec3.h:269
VecSwizCon4 zzxx() const
Definition: Vec3.h:254
VecSwizCon4 zyyx() const
Definition: Vec3.h:245
VecSwizCon4 yxxx() const
Definition: Vec3.h:189
VecSwizCon3 xyx() const
Definition: Vec3.h:162
3D mutable swizzle vector
Definition: Vec3.h:334
VecSwizCon4 xyyx() const
Definition: Vec3.h:167
VecSwizRef3 yzx()
Definition: Vec3.h:276
static Int abs(Int x)
Get absolute value of signed integer.
Definition: Alge.h:21
static const Vec zero
Definition: Vec3.h:138
VecSwizCon4 zzyx() const
Definition: Vec3.h:258
VecSwizCon4 xxxx() const
Definition: Vec3.h:150
VecSwizRef2 yx()
Definition: Vec3.h:273
VecSwizCon4 zyyy() const
Definition: Vec3.h:246
VecSwizCon4 zxxz() const
Definition: Vec3.h:230
VecSwizCon3 yyy() const
Definition: Vec3.h:205
N-dimensional vector.
Definition: Traits.h:12
VecSwizCon2 xz() const
Definition: Vec3.h:174
VecSwizRef3 zyx()
Definition: Vec3.h:280
VecSwizCon4 yyzy() const
Definition: Vec3.h:211
VecSwizCon4 yyzz() const
Definition: Vec3.h:212
VecSwizCon4 yyyx() const
Definition: Vec3.h:206
Definition: Traits.h:20
VecSwizCon4 zzyz() const
Definition: Vec3.h:260
VecSwizCon3 yzy() const
Definition: Vec3.h:218
VecSwizCon2 zz() const
Definition: Vec3.h:252
Vec(const Vec4 &v)
Construct from vector ignoring the extra components.
Definition: Vec3.h:72
VecSwizCon4 yxzx() const
Definition: Vec3.h:197
VecSwizCon4 yyxz() const
Definition: Vec3.h:204
VecSwizCon3 xyy() const
Definition: Vec3.h:166
4D const swizzle vector
Definition: Vec4.h:641
VecSwizCon4 xyzx() const
Definition: Vec3.h:171
float Real
Real number type. See Real_ for real number operations and constants.
Definition: Real.h:21
VecSwizCon3 xxz() const
Definition: Vec3.h:157
VecSwizRef3 zxy()
Definition: Vec3.h:278
Vec()
No init.
Definition: Vec3.h:65
VecSwizRef2 zx()
Definition: Vec3.h:277
Vec< 3 > Vec3
3D column vector types
Definition: Vec3.h:356
VecSwizRef< 2, Real, Options > VecSwizRef2
Definition: Vec3.h:56
VecSwizCon4 yxzy() const
Definition: Vec3.h:198
VecSwizCon3 yxx() const
Definition: Vec3.h:188
VecSwizCon4 zyxx() const
Definition: Vec3.h:241
Vector base class.
Definition: Base.h:11
VecSwizCon3 yzx() const
Definition: Vec3.h:214
VecSwizCon4 zzyy() const
Definition: Vec3.h:259
Vec & operator=(const MatrixBase< T > &rhs)
Assign to row or column vector of any dimension. Asserts that if this vector has a fixed dimension th...
Definition: Vec.h:56
Vec< 2, Real > Vec2
Definition: Vec3.h:50
void storageFill(StorageBlock< T > &store, typename StorageBlock< T >::Real f)
Fill block storage with scalar.
Definition: Block.h:128
VecSwizCon2 yz() const
Definition: Vec3.h:213
VecSwizCon4 zyxz() const
Definition: Vec3.h:243
VecSwizCon4 yyyz() const
Definition: Vec3.h:208
VecSwizRefBase< VecSwizRef< 3, Real, Options > > Super
Definition: Vec3.h:338
VecSwizCon4 xyzz() const
Definition: Vec3.h:173
Vec< 3, Float, matrix::Option::vecRow > VecRow3_f
Definition: Vec3.h:362
VecSwizCon4 xzyz() const
Definition: Vec3.h:182
VecSwizCon4 yzyx() const
Definition: Vec3.h:219
VecSwizCon4 yxzz() const
Definition: Vec3.h:199
VecSwizCon3 xzx() const
Definition: Vec3.h:175
VecSwizCon3 yyz() const
Definition: Vec3.h:209
VecSwizCon2 yy() const
Definition: Vec3.h:200
VecSwizCon4 zzxy() const
Definition: Vec3.h:255
Definition: Swiz.h:60
Vec< 3, Double, matrix::Option::vecRow > VecRow3_d
Definition: Vec3.h:363
VecSwizCon4 yyxy() const
Definition: Vec3.h:203
Vec3 crossUnit(const Vec3 &v) const
Vector cross product, result is normalized unit vector.
Definition: Vec3.h:89
VecSwizCon4 zxxx() const
Definition: Vec3.h:228
VecSwizCon4 xxzz() const
Definition: Vec3.h:160
VecSwizCon4 zyzz() const
Definition: Vec3.h:251
VecSwizCon3 zyz() const
Definition: Vec3.h:248
VecSwizCon4 yxyy() const
Definition: Vec3.h:194
VecSwizCon4 zxzx() const
Definition: Vec3.h:236
VecSwizCon(Real x, Real y, Real z)
Definition: Vec3.h:329
Vec(const Vec2 &v, Real z=0)
Construct from 2D vector.
Definition: Vec3.h:70
static void orthonormalize(Vec3 &u, Vec3 &v, Vec3 &w)
Gram-Schmidt orthonormalization. Useful for re-normalizing an orthonormal basis to eliminate rounding...
Definition: Vec3.h:92
VecSwizCon4 yxyz() const
Definition: Vec3.h:195
VecSwizCon4 xxzy() const
Definition: Vec3.h:159
VecSwizCon4 yzxy() const
Definition: Vec3.h:216
VecSwizCon4 xzzz() const
Definition: Vec3.h:186
VecSwizCon2 zx() const
Definition: Vec3.h:226
VecSwizCon3 xxx() const
Definition: Vec3.h:149
VecSwizCon4 xxxy() const
Definition: Vec3.h:151
Vec Vec3
Definition: Vec3.h:51
VecSwizCon4 zyzx() const
Definition: Vec3.h:249
void storageCopy(const StorageBlock< Src > &src, StorageBlock< Dst > &dst)
Copy between block and dense storages.
Definition: Block.h:84
VecSwizCon4 xyyz() const
Definition: Vec3.h:169
VecSwizCon4 xyxx() const
Definition: Vec3.h:163
VecSwizCon4 zzzz() const
Definition: Vec3.h:264
VecSwizCon4 xxyx() const
Definition: Vec3.h:154
VecSwizCon4 zzzy() const
Definition: Vec3.h:263
VecSwizCon4 xzyy() const
Definition: Vec3.h:181
Matrix base class.
Definition: Base.h:17
VecSwizCon4 yzzz() const
Definition: Vec3.h:225
Vec< 3, Real, matrix::Option::vecRow > VecRow3
3D row vector types
Definition: Vec3.h:361
VecSwizCon4 zyzy() const
Definition: Vec3.h:250
VecSwizCon3 yyx() const
Definition: Vec3.h:201
VecSwizCon4 zxyz() const
Definition: Vec3.h:234
VecSwizCon4 xxyz() const
Definition: Vec3.h:156
VecSwizCon4 yzyy() const
Definition: Vec3.h:220
VecSwizCon4 xxzx() const
Definition: Vec3.h:158
VecSwizCon< 2, Real, Options > VecSwizCon2
Definition: Vec3.h:53
Vector reference holder for mutable swizzle operators.
Definition: Swiz.h:54
Global Honeycomb namespace.
Vec< 4, Real > Vec4
Definition: Vec3.h:52
static const Vec axisX
Definition: Vec3.h:140
vec::priv::StorageFields< Vec< 3, Real, Options > > Storage
Definition: Vec3.h:13
2D mutable swizzle vector
Definition: Vec2.h:183
VecSwizCon4 zxzy() const
Definition: Vec3.h:237
VecSwizCon4 zyxy() const
Definition: Vec3.h:242
VecSwizCon4 xzxy() const
Definition: Vec3.h:177
VecSwizCon4 xzyx() const
Definition: Vec3.h:180
VecSwizCon3 xzy() const
Definition: Vec3.h:179
VecSwizCon4 yzzy() const
Definition: Vec3.h:224