66 struct __declspec(dllexport) vec2 {
71 inline vec2(
Real a) { v[1 - 1] = a; v[2 - 1] = a; }
72 inline vec2(
Real v_1,
Real v_2) { v[1 - 1] = v_1; v[2 - 1] = v_2; }
73 inline vec2(
const ivec2& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1]; }
74 inline vec2(
const vec2& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1]; }
77 inline vec2& operator=(
const vec2& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1];
return *
this; }
78 inline Real& operator[] (
int i) {
return v[i]; }
79 inline const Real& operator[] (
int i)
const {
return v[i]; }
80 inline Real& operator() (
int i) {
return v[i % 2]; }
81 inline const Real& operator() (
int i)
const {
return v[i % 2]; }
86 inline bool is_zero()
const {
return (v[0] == 0.0 && v[1] == 0.0); }
87 inline bool is_tiny(
Real tiny_tol =
epsilon)
const {
88 return (fabs(v[0]) <= tiny_tol && fabs(v[1]) <= tiny_tol);
104 bool is_perpendicular(
134 for (
int i = 0; i < 2; ++i) { c[i] = a[i] + b[i]; }
141 for (
int i = 0; i < 2; ++i) { c[i] = a + b[i]; }
148 for (
int i = 0; i < 2; ++i) { c[i] = a[i] + b; }
157 for (
int i = 0; i < 2; ++i) { c[i] = a[i] - b[i]; }
164 for (
int i = 0; i < 2; ++i) { c[i] = a - b[i]; }
171 for (
int i = 0; i < 2; ++i) { c[i] = a[i] - b; }
180 for (
int i = 0; i < 2; ++i) { c[i] = a[i] * b[i]; }
187 for (
int i = 0; i < 2; ++i) { c[i] = a * b[i]; }
194 for (
int i = 0; i < 2; ++i) { c[i] = a[i] * b; }
203 for (
int i = 0; i < 2; ++i) { c[i] = a[i] / b[i]; }
210 for (
int i = 0; i < 2; ++i) { c[i] = a / b[i]; }
217 for (
int i = 0; i < 2; ++i) { c[i] = a[i] / b; }
280 for (
int i = 0; i < 2; ++i) { c = c && a[i] == b[i]; }
287 for (
int i = 0; i < 2; ++i) { c = c && a == b[i]; }
294 for (
int i = 0; i < 2; ++i) { c = c && a[i] == b; }
303 for (
int i = 0; i < 2; ++i) { c = c && a[i] < b[i]; }
310 for (
int i = 0; i < 2; ++i) { c = c && a < b[i]; }
317 for (
int i = 0; i < 2; ++i) { c = c && a[i] < b; }
326 for (
int i = 0; i < 2; ++i) { c = c && a[i] <= b[i]; }
333 for (
int i = 0; i < 2; ++i) { c = c && a <= b[i]; }
340 for (
int i = 0; i < 2; ++i) { c = c && a[i] <= b; }
349 for (
int i = 0; i < 2; ++i) { c = c && a[i] > b[i]; }
356 for (
int i = 0; i < 2; ++i) { c = c && a > b[i]; }
363 for (
int i = 0; i < 2; ++i) { c = c && a[i] > b; }
372 for (
int i = 0; i < 2; ++i) { c = c && a[i] >= b[i]; }
379 for (
int i = 0; i < 2; ++i) { c = c && a >= b[i]; }
386 for (
int i = 0; i < 2; ++i) { c = c && a[i] >= b; }
396 for (
int i = 0; i < 2; ++i) { c[i] = -a[i]; }
419 return sqrt(
inner(a, a));
426 inline vec2
unit(
const vec2& a)
446 inline vec2
proj(
const vec2& axis,
const vec2& a)
449 return inner(a, u) * u;
454 return vec2(fabs(val[0]), fabs(val[1]));
457 void store(FILE* fp,
const vec2& v);
460 int apx_equal(
const vec2& a,
const vec2& b);
466 struct __declspec(dllexport) vec3 {
471 inline vec3(
Real a) { v[1 - 1] = a; v[2 - 1] = a; v[3 - 1] = a; }
472 inline vec3(
Real v_1,
Real v_2,
Real v_3) { v[1 - 1] = v_1; v[2 - 1] = v_2; v[3 - 1] = v_3; }
473 inline vec3(
const ivec3& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1]; v[3 - 1] = a[3 - 1]; }
474 inline vec3(
const vec3& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1]; v[3 - 1] = a[3 - 1]; }
476 inline vec3& operator=(
const vec3& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1]; v[3 - 1] = a[3 - 1];
return *
this; }
477 inline Real& operator[] (
int i) {
return v[i]; }
478 inline const Real& operator[] (
int i)
const {
return v[i]; }
479 inline Real& operator() (
int i) {
return v[i % 3]; }
480 inline const Real& operator() (
int i)
const {
return v[i % 3]; }
482 inline bool is_zero()
const {
return (v[0] == 0.0 && v[1] == 0.0 && v[2] == 0.0); }
483 inline bool is_tiny(
Real tiny_tol =
epsilon)
const {
return (fabs(v[0]) <= tiny_tol && fabs(v[1]) <= tiny_tol && fabs(v[2]) <= tiny_tol); }
503 bool is_perpendicular(
519 const vec3&,
const vec3&,
const vec3&
529 for (
int i = 0; i < 3; ++i) { c[i] = a[i] + b[i]; }
536 for (
int i = 0; i < 3; ++i) { c[i] = a + b[i]; }
543 for (
int i = 0; i < 3; ++i) { c[i] = a[i] + b; }
552 for (
int i = 0; i < 3; ++i) { c[i] = a[i] - b[i]; }
559 for (
int i = 0; i < 3; ++i) { c[i] = a - b[i]; }
566 for (
int i = 0; i < 3; ++i) { c[i] = a[i] - b; }
575 for (
int i = 0; i < 3; ++i) { c[i] = a[i] * b[i]; }
582 for (
int i = 0; i < 3; ++i) { c[i] = a * b[i]; }
589 for (
int i = 0; i < 3; ++i) { c[i] = a[i] * b; }
598 for (
int i = 0; i < 3; ++i) { c[i] = a[i] / b[i]; }
605 for (
int i = 0; i < 3; ++i) { c[i] = a / b[i]; }
612 for (
int i = 0; i < 3; ++i) { c[i] = a[i] / b; }
673 for (
int i = 0; i < 3; ++i) { c = c && a[i] == b[i]; }
680 for (
int i = 0; i < 3; ++i) { c = c && a == b[i]; }
687 for (
int i = 0; i < 3; ++i) { c = c && a[i] == b; }
696 for (
int i = 0; i < 3; ++i) { c = c && a[i] < b[i]; }
703 for (
int i = 0; i < 3; ++i) { c = c && a < b[i]; }
710 for (
int i = 0; i < 3; ++i) { c = c && a[i] < b; }
719 for (
int i = 0; i < 3; ++i) { c = c && a[i] <= b[i]; }
726 for (
int i = 0; i < 3; ++i) { c = c && a <= b[i]; }
733 for (
int i = 0; i < 3; ++i) { c = c && a[i] <= b; }
742 for (
int i = 0; i < 3; ++i) { c = c && a[i] > b[i]; }
749 for (
int i = 0; i < 3; ++i) { c = c && a > b[i]; }
756 for (
int i = 0; i < 3; ++i) { c = c && a[i] > b; }
765 for (
int i = 0; i < 3; ++i) { c = c && a[i] >= b[i]; }
772 for (
int i = 0; i < 3; ++i) { c = c && a >= b[i]; }
779 for (
int i = 0; i < 3; ++i) { c = c && a[i] >= b; }
789 for (
int i = 0; i < 3; ++i) { c[i] = -a[i]; }
795 return vec3(fabs(val[0]), fabs(val[1]), fabs(val[2]));
826 return sqrt(
inner(a, a));
829 inline vec3
unit(
const vec3& a)
849 inline vec3
proj(
const vec3& axis,
const vec3& a)
852 return inner(a, u) * u;
855 void store(FILE* fp,
const vec3& v);
858 int apx_equal(
const vec3& a,
const vec3& b);
864 struct __declspec(dllexport) vec4 {
869 inline vec4(
Real a) { v[1 - 1] = a; v[2 - 1] = a; v[3 - 1] = a; v[4 - 1] = a; }
870 inline vec4(
Real v_1,
Real v_2,
Real v_3,
Real v_4) { v[1 - 1] = v_1; v[2 - 1] = v_2; v[3 - 1] = v_3; v[4 - 1] = v_4; }
871 inline vec4(
const ivec4& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1]; v[3 - 1] = a[3 - 1]; v[4 - 1] = a[4 - 1]; }
872 inline vec4(
const vec4& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1]; v[3 - 1] = a[3 - 1]; v[4 - 1] = a[4 - 1]; }
874 inline vec4& operator=(
const vec4& a) { v[1 - 1] = a[1 - 1]; v[2 - 1] = a[2 - 1]; v[3 - 1] = a[3 - 1]; v[4 - 1] = a[4 - 1];
return *
this; }
875 inline Real& operator[] (
int i) {
return v[i]; }
876 inline const Real& operator[] (
int i)
const {
return v[i]; }
877 inline Real& operator() (
int i) {
return v[i % 4]; }
878 inline const Real& operator() (
int i)
const {
return v[i % 4]; }
880 inline bool is_zero()
const {
return (v[0] == 0.0 && v[1] == 0.0 && v[2] == 0.0 && v[3] == 0.0); }
881 inline bool is_tiny(
Real tiny_tol =
epsilon)
const {
882 return (fabs(v[0]) <= tiny_tol && fabs(v[1]) <= tiny_tol && fabs(v[2]) <= tiny_tol && fabs(v[3]) <= tiny_tol);
899 for (
int i = 0; i < 4; ++i) { c[i] = a[i] + b[i]; }
906 for (
int i = 0; i < 4; ++i) { c[i] = a + b[i]; }
913 for (
int i = 0; i < 4; ++i) { c[i] = a[i] + b; }
922 for (
int i = 0; i < 4; ++i) { c[i] = a[i] - b[i]; }
929 for (
int i = 0; i < 4; ++i) { c[i] = a - b[i]; }
936 for (
int i = 0; i < 4; ++i) { c[i] = a[i] - b; }
945 for (
int i = 0; i < 4; ++i) { c[i] = a[i] * b[i]; }
952 for (
int i = 0; i < 4; ++i) { c[i] = a * b[i]; }
959 for (
int i = 0; i < 4; ++i) { c[i] = a[i] * b; }
968 for (
int i = 0; i < 4; ++i) { c[i] = a[i] / b[i]; }
975 for (
int i = 0; i < 4; ++i) { c[i] = a / b[i]; }
982 for (
int i = 0; i < 4; ++i) { c[i] = a[i] / b; }
1045 for (
int i = 0; i < 4; ++i) { c = c && a[i] == b[i]; }
1052 for (
int i = 0; i < 4; ++i) { c = c && a == b[i]; }
1059 for (
int i = 0; i < 4; ++i) { c = c && a[i] == b; }
1068 for (
int i = 0; i < 4; ++i) { c = c && a[i] < b[i]; }
1075 for (
int i = 0; i < 4; ++i) { c = c && a < b[i]; }
1082 for (
int i = 0; i < 4; ++i) { c = c && a[i] < b; }
1091 for (
int i = 0; i < 4; ++i) { c = c && a[i] <= b[i]; }
1098 for (
int i = 0; i < 4; ++i) { c = c && a <= b[i]; }
1105 for (
int i = 0; i < 4; ++i) { c = c && a[i] <= b; }
1114 for (
int i = 0; i < 4; ++i) { c = c && a[i] > b[i]; }
1121 for (
int i = 0; i < 4; ++i) { c = c && a > b[i]; }
1128 for (
int i = 0; i < 4; ++i) { c = c && a[i] > b; }
1137 for (
int i = 0; i < 4; ++i) { c = c && a[i] >= b[i]; }
1144 for (
int i = 0; i < 4; ++i) { c = c && a >= b[i]; }
1151 for (
int i = 0; i < 4; ++i) { c = c && a[i] >= b; }
1161 for (
int i = 0; i < 4; ++i) { c[i] = -a[i]; }
1167 return vec4(fabs(val[0]), fabs(val[1]), fabs(val[2]), fabs(val[3]));
1197 return sqrt(
inner(a, a));
1220 inline vec4
proj(
const vec4& axis,
const vec4& a)
1222 vec4 u =
unit(axis);
1223 return inner(a, u) * u;
1226 void store(FILE* fp,
const vec4& v);
1230 int apx_equal(
const vec4& a,
const vec4& b);
1233 vec3
cross(
const vec3& a,
const vec3& b);
Real inner(const vec2 &a, const vec2 &b)
ivec2 operator+=(ivec2 &a, const ivec2 &b)
vec2 proj(const vec2 &axis, const vec2 &a)
ivec2 operator-(const ivec2 &a, const ivec2 &b)
vec2 absolute(const vec2 &val)
int operator>=(const ivec2 &a, const ivec2 &b)
Real squaredNorm(const vec2 &a)
ivec2 operator+(const ivec2 &a, const ivec2 &b)
void store(FILE *fp, const vec2 &v)
ivec2 operator*(const ivec2 &a, const ivec2 &b)
int apx_equal(Real x, Real y)
vec2 operator/=(vec2 &a, const vec2 &b)
int operator<=(const ivec2 &a, const ivec2 &b)
vec3 cross(const vec3 &a, const vec3 &b)
vec2 operator/(const vec2 &a, const vec2 &b)
ivec2 operator-=(ivec2 &a, const ivec2 &b)
int operator>(const ivec2 &a, const ivec2 &b)
int operator==(const ivec2 &a, const ivec2 &b)
void angle(const std::vector< Complex< T >> &src, std::vector< T > &dst)
int operator<(const ivec2 &a, const ivec2 &b)
ivec2 operator*=(ivec2 &a, const ivec2 &b)