9#ifndef __MATH_VECTOR_INLINE_C__
10#define __MATH_VECTOR_INLINE_C__
243 r[0] = (
int)roundf(a[0]);
244 r[1] = (
int)roundf(a[1]);
301 SWAP(
float, a[0],
b[0]);
302 SWAP(
float, a[1],
b[1]);
307 SWAP(
float, a[0],
b[0]);
308 SWAP(
float, a[1],
b[1]);
309 SWAP(
float, a[2],
b[2]);
314 SWAP(
float, a[0],
b[0]);
315 SWAP(
float, a[1],
b[1]);
316 SWAP(
float, a[2],
b[2]);
317 SWAP(
float, a[3],
b[3]);
419 r[0] = a[0] + (
float)
b[0];
420 r[1] = a[1] + (
float)
b[1];
421 r[2] = a[2] + (
float)
b[2];
507 r[0] = (
double)a[0] - (
double)
b[0];
508 r[1] = (
double)a[1] - (
double)
b[1];
513 r[0] = (
double)a[0] - (
double)
b[0];
514 r[1] = (
double)a[1] - (
double)
b[1];
515 r[2] = (
double)a[2] - (
double)
b[2];
624 r[0] = mat[0] * vec[0] + (+mat[1]) * vec[1];
625 r[1] = mat[1] * vec[0] + (-mat[0]) * vec[1];
630 float r0 = mat[0] * vec[0] + (-mat[1]) * vec[1];
631 float r1 = mat[1] * vec[0] + (+mat[0]) * vec[1];
638 return (mat[0][3] * co[0]) + (mat[1][3] * co[1]) + (mat[2][3] * co[2]) + mat[3][3];
643 return M[0][0] * a[0] +
M[1][0] * a[1] +
M[2][0] * a[2];
647 return M[0][1] * a[0] +
M[1][1] * a[1] +
M[2][1] * a[2];
651 return M[0][2] * a[0] +
M[1][2] * a[1] +
M[2][2] * a[2];
656 return M[0][0] * a[0] +
M[1][0] * a[1] +
M[2][0] * a[2];
660 return M[0][1] * a[0] +
M[1][1] * a[1] +
M[2][1] * a[2];
664 return M[0][2] * a[0] +
M[1][2] * a[1] +
M[2][2] * a[2];
689 r[0] = a[0] +
b[0] * f;
690 r[1] = a[1] +
b[1] * f;
695 r[0] = a[0] +
b[0] * f;
696 r[1] = a[1] +
b[1] * f;
701 r[0] = a[0] +
b[0] * f;
702 r[1] = a[1] +
b[1] * f;
703 r[2] = a[2] +
b[2] * f;
708 r[0] = a[0] +
b[0] * f;
709 r[1] = a[1] +
b[1] * f;
710 r[2] = a[2] +
b[2] * f;
715 r[0] = a[0] +
b[0] * c[0];
716 r[1] = a[1] +
b[1] * c[1];
717 r[2] = a[2] +
b[2] * c[2];
725 r[0] = a[0] +
b[0] * (
float)c[0];
726 r[1] = a[1] +
b[1] * (
float)c[1];
727 r[2] = a[2] +
b[2] * (
float)c[2];
748 r[0] = v1[0] *
v2[0];
749 r[1] = v1[1] *
v2[1];
750 r[2] = v1[2] *
v2[2];
887 return a[0] *
b[0] + a[1] *
b[1];
892 return a[0] *
b[0] + a[1] *
b[1];
897 return a[0] *
b[0] + a[1] *
b[1] + a[2] *
b[2];
902 float vec1[3], vec2[3];
914 return a[0] *
b[0] + a[1] *
b[1] + a[2] *
b[2] + a[3] *
b[3];
919 return a[0] * (
double)
b[0] + a[1] * (
double)
b[1] + a[2] * (
double)
b[2];
924 return a[0] *
b[0] + a[1] *
b[1] + a[2] *
b[2];
929 return a[0] *
b[1] - a[1] *
b[0];
934 return a[0] *
b[1] - a[1] *
b[0];
940 r[0] = a[1] *
b[2] - a[2] *
b[1];
941 r[1] = a[2] *
b[0] - a[0] *
b[2];
942 r[2] = a[0] *
b[1] - a[1] *
b[0];
956 r[0] = a[1] *
b[2] - a[2] *
b[1];
957 r[1] = a[2] *
b[0] - a[0] *
b[2];
958 r[2] = a[0] *
b[1] - a[1] *
b[0];
963 n[0] += (v_prev[1] - v_curr[1]) * (v_prev[2] + v_curr[2]);
964 n[1] += (v_prev[2] - v_curr[2]) * (v_prev[0] + v_curr[0]);
965 n[2] += (v_prev[0] - v_curr[0]) * (v_prev[1] + v_curr[1]);
970 rmat[0][0] = rmat[1][1] = rmat[2][2] = 0.0;
983 return v[0] *
v[0] +
v[1] *
v[1];
988 return v[0] *
v[0] +
v[1] *
v[1] +
v[2] *
v[2];
993 return v[0] *
v[0] +
v[1] *
v[1] +
v[2] *
v[2];
1013 return sqrtf(
v[0] *
v[0] +
v[1] *
v[1]);
1018 return sqrt(
v[0] *
v[0] +
v[1] *
v[1]);
1027 return sqrtf(x * x + y * y);
1036 return sqrt(x * x + y * y);
1045 return sqrtf(x * x + y * y);
1212 double d = n[0] * n[0] + n[1] * n[1] + n[2] * n[2];
1220 mul = unit_length / d;
1227 n[0] = n[1] = n[2] = 0;
1250 out[0] = (short)(in[0] * 32767.0f);
1251 out[1] = (short)(in[1] * 32767.0f);
1256 out[0] = in[0] * (1.0f / 32767.0f);
1257 out[1] = in[1] * (1.0f / 32767.0f);
1258 out[2] = in[2] * (1.0f / 32767.0f);
1263 out[0] = (short)(in[0] * 32767.0f);
1264 out[1] = (short)(in[1] * 32767.0f);
1265 out[2] = (short)(in[2] * 32767.0f);
1270 out[0] = (short)(in[0] * 32767.0f);
1271 out[1] = (short)(in[1] * 32767.0f);
1272 out[2] = (short)(in[2] * 32767.0f);
1273 out[3] = (short)(in[3] * 32767.0f);
1280 return (
v[0] == 0.0f &&
v[1] == 0.0f);
1285 return (
v[0] == 0.0f &&
v[1] == 0.0f &&
v[2] == 0.0f);
1290 return (
v[0] == 0.0f &&
v[1] == 0.0f &&
v[2] == 0.0f &&
v[3] == 0.0f);
1295 return (
v[0] == 0.0 &&
v[1] == 0.0);
1300 return (
v[0] == 0.0 &&
v[1] == 0.0 &&
v[2] == 0.0);
1305 return (
v[0] == 0.0 &&
v[1] == 0.0 &&
v[2] == 0.0 &&
v[3] == 0.0);
1310 return (
v[0] == 1.0f &&
v[1] == 1.0f &&
v[2] == 1.0f);
1321 return ((v1[0] ==
v2[0]) && (v1[1] ==
v2[1]));
1326 return ((v1[0] ==
v2[0]) && (v1[1] ==
v2[1]) && (v1[2] ==
v2[2]));
1331 return ((v1[0] ==
v2[0]) && (v1[1] ==
v2[1]) && (v1[2] ==
v2[2]) && (v1[3] ==
v2[3]));
1336 return ((v1[0] ==
v2[0]) && (v1[1] ==
v2[1]));
1341 return ((v1[0] ==
v2[0]) && (v1[1] ==
v2[1]) && (v1[2] ==
v2[2]));
1346 return ((v1[0] ==
v2[0]) && (v1[1] ==
v2[1]) && (v1[2] ==
v2[2]) && (v1[3] ==
v2[3]));
1400 return (
dot_v3v3(d, d) <= (limit * limit));
1405 for (
int i = 0; i < 3; i++) {
1406 if (
v2[i] == 0.0f) {
1408 if (v1[i] !=
v2[i]) {
1413 if (
fabsf(v1[i] /
v2[i] - 1.0f) > limit) {
1471 return (((l1[0] - pt[0]) * (l2[1] - pt[1])) - ((l2[0] - pt[0]) * (l1[1] - pt[1])));
MINLINE int clamp_i(int value, int min, int max)
MINLINE int compare_ff_relative(float a, float b, float max_diff, int max_ulps)
MINLINE int compare_ff(float a, float b, float max_diff)
typedef double(DMatrix)[4][4]
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
static void mul(btAlignedObjectArray< T > &items, const Q &value)
local_group_size(16, 16) .push_constant(Type b
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
MINLINE void sub_v3db_v3fl_v3fl(double r[3], const float a[3], const float b[3])
MINLINE float dot_v2v2(const float a[2], const float b[2])
MINLINE double normalize_v3_db(double n[3])
MINLINE double normalize_v3_v3_length_db(double r[3], const double a[3], double const unit_length)
MINLINE void mul_v4_fl(float r[4], float f)
MINLINE int len_manhattan_v2v2_int(const int a[2], const int b[2])
MINLINE double normalize_v3_v3_db(double r[3], const double a[3])
MINLINE void madd_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3])
MINLINE void sub_v2_v2v2_int(int r[2], const int a[2], const int b[2])
MINLINE void round_v2i_v2fl(int r[2], const float a[2])
MINLINE void add_v4_v4(float r[4], const float a[4])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE void copy_v2fl_v2i(float r[2], const int a[2])
MINLINE void swap_v4_v4(float a[4], float b[4])
MINLINE void copy_v3fl_v3s(float r[3], const short a[3])
MINLINE void abs_v4(float r[4])
MINLINE float len_squared_v3v3(const float a[3], const float b[3])
MINLINE void copy_v3_uchar(unsigned char r[3], const unsigned char a)
MINLINE void add_v3fl_v3fl_v3i(float r[3], const float a[3], const int b[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_fl(float r[3], float f)
MINLINE void mul_v2_v2_cw(float r[2], const float mat[2], const float vec[2])
MINLINE void clamp_v4_v4v4(float vec[4], const float min[4], const float max[4])
MINLINE void copy_v2_fl2(float v[2], float x, float y)
MINLINE void mul_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void madd_v2_v2fl(float r[2], const float a[2], float f)
MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w)
MINLINE void add_v4_v4v4(float r[4], const float a[4], const float b[4])
MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], float f)
MINLINE float dot_v4v4(const float a[4], const float b[4])
MINLINE void swap_v2_v2(float a[2], float b[2])
MINLINE void madd_v3fl_v3fl_v3fl_v3i(float r[3], const float a[3], const float b[3], const int c[3])
MINLINE void copy_v2db_v2fl(double r[2], const float a[2])
MINLINE bool equals_v3v3_int(const int v1[3], const int v2[3])
MINLINE void copy_v2_v2_db(double r[2], const double a[2])
MINLINE float dot_m3_v3_row_x(const float M[3][3], const float a[3])
MINLINE void mul_v4_v4(float r[4], const float a[4])
MINLINE void sub_v2_v2(float r[2], const float a[2])
MINLINE float len_v4v4(const float a[4], const float b[4])
MINLINE void madd_v2_v2db_db(double r[2], const double a[2], const double b[2], double f)
MINLINE void copy_v4_v4_char(char r[4], const char a[4])
MINLINE void madd_v3_v3v3db_db(double r[3], const double a[3], const double b[3], double f)
MINLINE bool equals_v4v4_int(const int v1[4], const int v2[4])
MINLINE bool compare_v3v3(const float v1[3], const float v2[3], const float limit)
MINLINE void copy_v4_uchar(unsigned char r[4], const unsigned char a)
MINLINE void mul_v3_v3(float r[3], const float a[3])
MINLINE float len_v2v2_int(const int v1[2], const int v2[2])
MINLINE double normalize_v3_length_db(double n[3], const double unit_length)
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float v[3])
MINLINE float dot_m4_v3_row_z(const float M[4][4], const float a[3])
MINLINE void mul_v2_v2_ccw(float r[2], const float mat[2], const float vec[2])
MINLINE double len_squared_v3_db(const double v[3])
MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3])
MINLINE void add_v2_v2v2_int(int r[2], const int a[2], const int b[2])
MINLINE void mul_v2_v2(float r[2], const float a[2])
MINLINE float normalize_v2_v2_length(float r[2], const float a[2], const float unit_length)
MINLINE double len_squared_v2v2_db(const double a[2], const double b[2])
MINLINE double len_v3_db(const double a[3])
MINLINE void abs_v2(float r[2])
MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3])
MINLINE float len_manhattan_v3(const float v[3])
MINLINE bool is_one_v3(const float v[3])
MINLINE float dot_m3_v3_row_z(const float M[3][3], const float a[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void clamp_v3(float vec[3], const float min, const float max)
MINLINE void sub_v2_v2_db(double r[2], const double a[2])
MINLINE bool compare_len_v3v3(const float v1[3], const float v2[3], const float limit)
MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
MINLINE void copy_v3_v3_char(char r[3], const char a[3])
MINLINE void mul_v3db_db(double r[3], double f)
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE float len_v3(const float a[3])
MINLINE void copy_v3_v3_uchar(unsigned char r[3], const unsigned char a[3])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE bool is_zero_v4_db(const double v[4])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
MINLINE void madd_v4_v4v4(float r[4], const float a[4], const float b[4])
MINLINE void add_v3_v3_db(double r[3], const double a[3])
MINLINE void normal_float_to_short_v3(short out[3], const float in[3])
MINLINE void mul_v3_v3db_db(double r[3], const double a[3], double f)
MINLINE float len_manhattan_v2(const float v[2])
MINLINE void copy_v4db_v4fl(double r[4], const float a[4])
MINLINE void negate_v2(float r[2])
MINLINE void mul_v4_v4fl(float r[4], const float a[4], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float normalize_v2_length(float n[2], const float unit_length)
MINLINE void zero_v2_int(int r[2])
MINLINE float len_v2(const float v[2])
MINLINE float cross_v2v2(const float a[2], const float b[2])
MINLINE void negate_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3])
MINLINE float len_manhattan_v3v3(const float a[3], const float b[3])
MINLINE void normal_short_to_float_v3(float out[3], const short in[3])
MINLINE void copy_v3_v3_int(int r[3], const int a[3])
MINLINE void copy_v2_v2_char(char r[2], const char a[2])
MINLINE void add_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_fl3(float v[3], float x, float y, float z)
MINLINE void invert_v3_safe(float r[3])
MINLINE bool compare_v3v3_relative(const float v1[3], const float v2[3], const float limit, const int max_ulps)
MINLINE double dot_v2v2_db(const double a[2], const double b[2])
MINLINE void negate_v2_v2(float r[2], const float a[2])
MINLINE void normal_float_to_short_v4(short out[4], const float in[4])
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE bool equals_v2v2_int(const int v1[2], const int v2[2])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float len_v4(const float a[4])
MINLINE void clamp_v2(float vec[2], const float min, const float max)
MINLINE void copy_v4_v4_short(short r[4], const short a[4])
MINLINE void add_v2_fl(float r[2], float f)
MINLINE void zero_v3_int(int r[3])
MINLINE float len_squared_v2(const float v[2])
MINLINE bool compare_size_v3v3(const float v1[3], const float v2[3], const float limit)
MINLINE void abs_v3(float r[3])
MINLINE void madd_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3_short(short r[3], const short a[3])
MINLINE void copy_v2_uchar(unsigned char r[2], const unsigned char a)
MINLINE void negate_v4_v4(float r[4], const float a[4])
MINLINE double len_v2v2_db(const double v1[2], const double v2[2])
MINLINE float len_v3v3(const float a[3], const float b[3])
MINLINE void copy_v2_v2_short(short r[2], const short a[2])
MINLINE void negate_v3(float r[3])
MINLINE float dot_m4_v3_row_y(const float M[4][4], const float a[3])
MINLINE void sub_v2db_v2fl_v2fl(double r[2], const float a[2], const float b[2])
MINLINE bool equals_v3v3(const float v1[3], const float v2[3])
MINLINE bool equals_v2v2(const float v1[2], const float v2[2])
MINLINE bool equals_v4v4(const float v1[4], const float v2[4])
MINLINE void copy_v3fl_v3db(float r[3], const double a[3])
MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3])
MINLINE bool is_zero_v2_db(const double v[2])
MINLINE void clamp_v2_v2v2(float vec[2], const float min[2], const float max[2])
MINLINE void zero_v4(float r[4])
MINLINE void mul_v3_v3v3(float r[3], const float v1[3], const float v2[3])
MINLINE void copy_v3db_v3fl(double r[3], const float a[3])
MINLINE float len_squared_v4v4(const float a[4], const float b[4])
MINLINE void invert_v3(float r[3])
MINLINE void clamp_v4(float vec[4], const float min, const float max)
MINLINE double dot_v3v3_db(const double a[3], const double b[3])
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE void star_m3_v3(float rmat[3][3], const float a[3])
MINLINE float len_squared_v2v2(const float a[2], const float b[2])
MINLINE double cross_v2v2_db(const double a[2], const double b[2])
MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void negate_v3_short(short r[3])
MINLINE void copy_v2fl_v2db(float r[2], const double a[2])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void sub_v3_v3v3_int(int r[3], const int a[3], const int b[3])
MINLINE void zero_v2(float r[2])
MINLINE void copy_v4fl_v4db(float r[4], const double a[4])
MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3])
MINLINE float dot_m3_v3_row_y(const float M[3][3], const float a[3])
MINLINE bool compare_v2v2_relative(const float v1[2], const float v2[2], const float limit, const int max_ulps)
MINLINE bool compare_v2v2(const float v1[2], const float v2[2], const float limit)
MINLINE void copy_v4_v4_int(int r[4], const int a[4])
MINLINE float normalize_v2(float n[2])
MINLINE void abs_v4_v4(float r[4], const float a[4])
MINLINE double len_v2_db(const double v[2])
MINLINE bool compare_v4v4(const float v1[4], const float v2[4], const float limit)
MINLINE float normalize_v3_v3_length(float r[3], const float a[3], const float unit_length)
MINLINE void abs_v2_v2(float r[2], const float a[2])
MINLINE void swap_v3_v3(float a[3], float b[3])
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void abs_v3_v3(float r[3], const float a[3])
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
MINLINE void sub_v4_v4(float r[4], const float a[4])
MINLINE void madd_v4_v4fl(float r[4], const float a[4], float f)
MINLINE void copy_v3_v3_db(double r[3], const double a[3])
MINLINE float dot_v3v3v3(const float p[3], const float a[3], const float b[3])
MINLINE void zero_v3(float r[3])
MINLINE void clamp_v3_v3v3(float vec[3], const float min[3], const float max[3])
MINLINE float dot_m4_v3_row_x(const float M[4][4], const float a[3])
MINLINE float len_manhattan_v2v2(const float a[2], const float b[2])
MINLINE void copy_v4_v4_db(double r[4], const double a[4])
MINLINE void negate_v3_db(double r[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v4_fl(float r[4], float f)
MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f)
MINLINE bool compare_v4v4_relative(const float v1[4], const float v2[4], const float limit, const int max_ulps)
MINLINE void add_v2_v2_int(int r[2], const int a[2])
MINLINE float line_point_side_v2(const float l1[2], const float l2[2], const float pt[2])
MINLINE bool is_zero_v2(const float v[2])
MINLINE void add_v2_v2_db(double r[2], const double a[2])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE void invert_v2(float r[2])
MINLINE int len_manhattan_v2_int(const int v[2])
MINLINE void copy_v4_fl(float r[4], float f)
MINLINE float normalize_v2_v2(float r[2], const float a[2])
MINLINE void add_v3_uchar_clamped(uchar r[3], int i)
MINLINE float normalize_v3_length(float n[3], const float unit_length)
MINLINE double dot_v3db_v3fl(const double a[3], const float b[3])
MINLINE void copy_v2_v2_uchar(unsigned char r[2], const unsigned char a[2])
MINLINE void zero_v3_db(double r[3])
MINLINE float len_squared_v3(const float v[3])
MINLINE float normalize_v3(float n[3])
MINLINE void normal_float_to_short_v2(short out[2], const float in[2])
MINLINE bool is_zero_v3_db(const double v[3])
MINLINE void sub_v4_v4v4(float r[4], const float a[4], const float b[4])
MINLINE void negate_v4(float r[4])
MINLINE bool is_zero_v4(const float v[4])
MINLINE float len_v2v2(const float v1[2], const float v2[2])
MINLINE void sub_v3_v3v3_db(double r[3], const double a[3], const double b[3])
MINLINE void copy_v2_fl(float r[2], float f)
MINLINE void sub_v2_v2v2_db(double r[2], const double a[2], const double b[2])
ccl_device_inline int abs(int x)