35#define VEC_ZERO ((float2)(0.f,0.f))
38#define VEC_ONE ((float2)(1.f, 1.f))
41#define VEC_ALL_ONE VEC_ONE
44#define VEC_INFINITY ((float2)(INFINITY, INFINITY))
47#define VEC_ALL_INFINITY VEC_INFINITY
50#define VEC_NEG_INFINITY (-VEC_INFINITY)
53#define VEC_ALL_NEG_INFINITY (-VEC_ALL_INFINITY)
57#define MAT_ZERO ((float4)(0.f, 0.f, \
61#define MAT_ONE ((float4)(1.f, 1.f, \
65#define MAT_ALL_ONE MAT_ONE
70#define MAT_EYE ((float4)(1.f, 0.f, \
74#define MAT_ALL_EYE MAT_EYE
90#define uivec_xyz uivec2
91#define ulvec_xyz ulvec2
93#define ssvec_xyz ssvec2
126#define BEGIN_LOOP_OVER_NEIGHS() \
128 for(int ci = -1; ci <= 1; ci++) { \
129 for(int cj = -1; cj <= 1; cj++) { \
130 const usize c_j = c_i + \
133 usize j = ihoc[c_j]; \
134 while((j < N) && (icell[j] == c_j)) {
140#define END_LOOP_OVER_NEIGHS() \
174#define BEGIN_NEIGHS(CELL, NPARTS, NCELLS, ICELL, IHOC) \
175 for(int __ci = -1; __ci <= 1; __ci++) { \
176 for(int __cj = -1; __cj <= 1; __cj++) { \
177 const usize __c_j = CELL + \
180 usize j = IHOC[__c_j]; \
181 while((j < NPARTS) && (ICELL[j] == __c_j)) {
189#define END_NEIGHS() \
197#define MATRIX_DOT(_M, _V) \
198 ((float2)(dot(_M.s01, _V), \
203#define MATRIX_DOT_ALL MATRIX_DOT
207#define MATRIX_MUL(_M1, _M2) \
208 ((float4)(dot(_M1.s01, _M2.s02), dot(_M1.s01, _M2.s13), \
209 dot(_M1.s23, _M2.s02), dot(_M1.s23, _M2.s13)))
213#define MATRIX_MUL_ALL MATRIX_MUL
217#define TRANSPOSE s0213
225#define MATRIX_FROM_DIAG(_V) \
226 ((float4)(_V.x, 0.f, \
233#define MATRIX_TRACE(_M) (_M.s0 + _M.s3)
256 return m.s0 * m.s3 - m.s1 * m.s2;
268 const float d = 1.f /
det(m);
269 if(fabs(d) > 1.e16f) {
272 return ((
matrix)( m.s3, -m.s1,
281#define MATRIX_INV(_M) \
282 MATRIX_MUL(inv(MATRIX_MUL(_M.TRANSPOSE, _M)), _M.TRANSPOSE)
float det(const matrix m)
Determinant of a matrix.
Definition 2D.h:254
#define MAT_ALL_EYE
MAT_EYE.
Definition 2D.h:74
matrix inv(const matrix m)
Inverse of a matrix.
Definition 2D.h:266
matrix outer(const vec v1, const vec v2)
Perform the outer product of two vectors.
Definition 2D.h:241
#define vec
Definition LinkList.hcl.in:57
#define matrix
Definition LinkList.hcl.in:65