23 const float s = 1.0f - t;
25 r[0] = s * a[0] + t *
b[0];
26 r[1] = s * a[1] + t *
b[1];
30 float r[2],
const float a[2],
const float b[2],
const float c[2],
const float t[3])
32 r[0] = a[0] * t[0] +
b[0] * t[1] + c[0] * t[2];
33 r[1] = a[1] * t[0] +
b[1] * t[1] + c[1] * t[2];
38 const float s = 1.0f - t;
40 r[0] = s * a[0] + t *
b[0];
41 r[1] = s * a[1] + t *
b[1];
42 r[2] = s * a[2] + t *
b[2];
47 const float s = 1.0f - t;
49 r[0] = s * a[0] + t *
b[0];
50 r[1] = s * a[1] + t *
b[1];
51 r[2] = s * a[2] + t *
b[2];
52 r[3] = s * a[3] + t *
b[3];
65 if (
UNLIKELY(cosom < (-1.0f + FLT_EPSILON))) {
71 target[0] =
w[0] * a[0] +
w[1] *
b[0];
72 target[1] =
w[0] * a[1] +
w[1] *
b[1];
73 target[2] =
w[0] * a[2] +
w[1] *
b[2];
87 if (
UNLIKELY(cosom < (1.0f + FLT_EPSILON))) {
93 target[0] =
w[0] * a[0] +
w[1] *
b[0];
94 target[1] =
w[0] * a[1] +
w[1] *
b[1];
149 float q0[2],
q1[2], q2[2], r0[2], r1[2];
162 float p[3],
const float v1[3],
const float v2[3],
const float v3[3],
const float w[3])
164 p[0] = v1[0] *
w[0] +
v2[0] *
w[1] + v3[0] *
w[2];
165 p[1] = v1[1] *
w[0] +
v2[1] *
w[1] + v3[1] *
w[2];
166 p[2] = v1[2] *
w[0] +
v2[2] *
w[1] + v3[2] *
w[2];
176 p[0] = v1[0] *
w[0] +
v2[0] *
w[1] + v3[0] *
w[2] + v4[0] *
w[3];
177 p[1] = v1[1] *
w[0] +
v2[1] *
w[1] + v3[1] *
w[2] + v4[1] *
w[3];
178 p[2] = v1[2] *
w[0] +
v2[2] *
w[1] + v3[2] *
w[2] + v4[2] *
w[3];
182 float p[4],
const float v1[4],
const float v2[4],
const float v3[4],
const float w[3])
184 p[0] = v1[0] *
w[0] +
v2[0] *
w[1] + v3[0] *
w[2];
185 p[1] = v1[1] *
w[0] +
v2[1] *
w[1] + v3[1] *
w[2];
186 p[2] = v1[2] *
w[0] +
v2[2] *
w[1] + v3[2] *
w[2];
187 p[3] = v1[3] *
w[0] +
v2[3] *
w[1] + v3[3] *
w[2];
197 p[0] = v1[0] *
w[0] +
v2[0] *
w[1] + v3[0] *
w[2] + v4[0] *
w[3];
198 p[1] = v1[1] *
w[0] +
v2[1] *
w[1] + v3[1] *
w[2] + v4[1] *
w[3];
199 p[2] = v1[2] *
w[0] +
v2[2] *
w[1] + v3[2] *
w[2] + v4[2] *
w[3];
200 p[3] = v1[3] *
w[0] +
v2[3] *
w[1] + v3[3] *
w[2] + v4[3] *
w[3];
204 float p[3],
const float v1[3],
const float v2[3],
const float v3[3],
const float uv[2])
206 p[0] = v1[0] + ((
v2[0] - v1[0]) * uv[0]) + ((v3[0] - v1[0]) * uv[1]);
207 p[1] = v1[1] + ((
v2[1] - v1[1]) * uv[0]) + ((v3[1] - v1[1]) * uv[1]);
208 p[2] = v1[2] + ((
v2[2] - v1[2]) * uv[0]) + ((v3[2] - v1[2]) * uv[1]);
213 const float s = 1.0f - t;
215 target[0] = (char)
floorf(s * a[0] + t *
b[0]);
216 target[1] = (char)
floorf(s * a[1] + t *
b[1]);
217 target[2] = (char)
floorf(s * a[2] + t *
b[2]);
226 const float s = 1.0f - t;
228 target[0] = (char)
floorf(s * a[0] + t *
b[0]);
229 target[1] = (char)
floorf(s * a[1] + t *
b[1]);
230 target[2] = (char)
floorf(s * a[2] + t *
b[2]);
231 target[3] = (char)
floorf(s * a[3] + t *
b[3]);
240 r[0] = 0.5f * (a[0] +
b[0]);
241 r[1] = 0.5f * (a[1] +
b[1]);
242 r[2] = 0.5f * (a[2] +
b[2]);
247 r[0] = 0.5f * (a[0] +
b[0]);
248 r[1] = 0.5f * (a[1] +
b[1]);
253 v[0] = (v1[0] +
v2[0] + v3[0]) / 3.0f;
254 v[1] = (v1[1] +
v2[1] + v3[1]) / 3.0f;
259 v[0] = (v1[0] +
v2[0] + v3[0]) / 3.0f;
260 v[1] = (v1[1] +
v2[1] + v3[1]) / 3.0f;
261 v[2] = (v1[2] +
v2[2] + v3[2]) / 3.0f;
265 float v[3],
const float v1[3],
const float v2[3],
const float v3[3],
const float v4[3])
267 v[0] = (v1[0] +
v2[0] + v3[0] + v4[0]) / 4.0f;
268 v[1] = (v1[1] +
v2[1] + v3[1] + v4[1]) / 4.0f;
269 v[2] = (v1[2] +
v2[2] + v3[2] + v4[2]) / 4.0f;
274 const float factor = 1.0f / (
float)vec_arr_num;
277 for (
uint i = 0; i < vec_arr_num; i++) {
293 angle = ((
float)M_2_PI *
309 angle = ((
float)M_2_PI *
324 v[0] = v1[0] + (v1[0] -
v2[0]);
325 v[1] = v1[1] + (v1[1] -
v2[1]);
326 v[2] = v1[2] + (v1[2] -
v2[2]);
327 v[3] = v1[3] + (v1[3] -
v2[3]);
332 v[0] = v1[0] + (v1[0] -
v2[0]);
333 v[1] = v1[1] + (v1[1] -
v2[1]);
334 v[2] = v1[2] + (v1[2] -
v2[2]);
339 v[0] = v1[0] + (v1[0] -
v2[0]);
340 v[1] = v1[1] + (v1[1] -
v2[1]);
351 return (isfinite(
v[0]) && isfinite(
v[1]));
356 return (isfinite(
v[0]) && isfinite(
v[1]) && isfinite(
v[2]));
361 return (isfinite(
v[0]) && isfinite(
v[1]) && isfinite(
v[2]) && isfinite(
v[3]));
372 float vec1[3], vec2[3];
382float cos_v3v3v3(
const float p1[3],
const float p2[3],
const float p3[3])
384 float vec1[3], vec2[3];
396 float vec1[3], vec2[3];
406 float vec1[2], vec2[2];
408 vec1[0] =
b[0] - a[0];
409 vec1[1] =
b[1] - a[1];
411 vec2[0] =
b[0] - c[0];
412 vec2[1] =
b[1] - c[1];
420float cos_v2v2v2(
const float p1[2],
const float p2[2],
const float p3[2])
422 float vec1[2], vec2[2];
434 float vec1[2], vec2[2];
450 const float perp_dot = (v1[1] *
v2[0]) - (v1[0] *
v2[1]);
488 float v1_proj[3], v2_proj[3];
499 float v1_proj[3], v2_proj[3], tproj[3];
522 float vec1[3], vec2[3];
535 float vec1[3], vec2[3];
543void angle_tri_v3(
float angles[3],
const float v1[3],
const float v2[3],
const float v3[3])
545 float ed1[3], ed2[3], ed3[3];
558 angles[2] = (
float)
M_PI - (angles[0] + angles[1]);
562 float angles[4],
const float v1[3],
const float v2[3],
const float v3[3],
const float v4[3])
564 float ed1[3], ed2[3], ed3[3], ed4[3];
589 for (i = 0; i <
len; i++) {
695 float d_12[3], d_23[3];
707 const float dot2 = 2.0f *
dot_v3v3(
v, normal);
722 const float eps = FLT_EPSILON;
726 const float d = 1.0f /
sqrtf(f);
733 r_n2[0] = -n[2] * r_n1[1];
734 r_n2[1] = n[2] * r_n1[0];
735 r_n2[2] = n[0] * r_n1[1] - n[1] * r_n1[0];
739 r_n1[0] = (n[2] < 0.0f) ? -1.0f : 1.0f;
740 r_n1[1] = r_n1[2] = r_n2[0] = r_n2[2] = 0.0f;
753 out[0] = -
v[1] -
v[2];
759 out[1] = -
v[0] -
v[2];
765 out[2] = -
v[0] -
v[1];
780 const float co =
cosf(angle);
781 const float si =
sinf(angle);
785 r[0] = co * p[0] - si * p[1];
786 r[1] = si * p[0] + co * p[1];
794 const float costheta =
cosf(angle);
795 const float sintheta =
sinf(angle);
800 out[0] = ((costheta + (1 - costheta) * axis[0] * axis[0]) * p[0]) +
801 (((1 - costheta) * axis[0] * axis[1] - axis[2] * sintheta) * p[1]) +
802 (((1 - costheta) * axis[0] * axis[2] + axis[1] * sintheta) * p[2]);
804 out[1] = (((1 - costheta) * axis[0] * axis[1] + axis[2] * sintheta) * p[0]) +
805 ((costheta + (1 - costheta) * axis[1] * axis[1]) * p[1]) +
806 (((1 - costheta) * axis[1] * axis[2] - axis[0] * sintheta) * p[2]);
808 out[2] = (((1 - costheta) * axis[0] * axis[2] - axis[1] * sintheta) * p[0]) +
809 (((1 - costheta) * axis[1] * axis[2] + axis[0] * sintheta) * p[1]) +
810 ((costheta + (1 - costheta) * axis[2] * axis[2]) * p[2]);
842 printf(
"%s: %.8f %.8f %.8f %.8f\n",
str,
v[0],
v[1],
v[2],
v[3]);
857 if (
min[0] > vec[0]) {
860 if (
min[1] > vec[1]) {
863 if (
min[2] > vec[2]) {
866 if (
min[3] > vec[3]) {
870 if (max[0] < vec[0]) {
873 if (max[1] < vec[1]) {
876 if (max[2] < vec[2]) {
879 if (max[3] < vec[3]) {
886 if (
min[0] > vec[0]) {
889 if (
min[1] > vec[1]) {
892 if (
min[2] > vec[2]) {
896 if (max[0] < vec[0]) {
899 if (max[1] < vec[1]) {
902 if (max[2] < vec[2]) {
909 if (
min[0] > vec[0]) {
912 if (
min[1] > vec[1]) {
916 if (max[0] < vec[0]) {
919 if (max[1] < vec[1]) {
951#define SWAP_AXIS(a, b) \
953 SWAP(float, v[a], v[b]); \
954 SWAP(int, r_axis_order[a], r_axis_order[b]); \
989double dot_vn_vn(
const float *array_src_a,
const float *array_src_b,
const int size)
992 const float *array_pt_a = array_src_a + (size - 1);
993 const float *array_pt_b = array_src_b + (size - 1);
996 d += (
double)(*(array_pt_a--) * *(array_pt_b--));
1004 const float *array_pt =
array + (size - 1);
1007 d +=
sqr_db((
double)*(array_pt--));
1018 mul_vn_vn_fl(array_tar, array_src, size, 1.0f / d_sqrt);
1034 int *array_pt = array_tar + (size - 1);
1035 int j = start + (size - 1);
1038 *(array_pt--) = j--;
1044 uint *array_pt = array_tar + (size - 1);
1048 *(array_pt--) = j--;
1052void range_vn_fl(
float *array_tar,
const int size,
const float start,
const float step)
1054 float *array_pt = array_tar + (size - 1);
1057 *(array_pt--) = start + step * (
float)(i);
1063 float *array_pt = array_tar + (size - 1);
1066 *(array_pt--) *= -1.0f;
1072 float *tar = array_tar + (size - 1);
1073 const float *src = array_src + (size - 1);
1076 *(tar--) = -*(src--);
1080void mul_vn_vn(
float *array_tar,
const float *array_src,
const int size)
1082 float *tar = array_tar + (size - 1);
1083 const float *src = array_src + (size - 1);
1086 *(tar--) *= *(src--);
1091 const float *array_src_a,
1092 const float *array_src_b,
1095 float *tar = array_tar + (size - 1);
1096 const float *src_a = array_src_a + (size - 1);
1097 const float *src_b = array_src_b + (size - 1);
1100 *(tar--) = *(src_a--) * *(src_b--);
1104void mul_vn_fl(
float *array_tar,
const int size,
const float f)
1106 float *array_pt = array_tar + (size - 1);
1113void mul_vn_vn_fl(
float *array_tar,
const float *array_src,
const int size,
const float f)
1115 float *tar = array_tar + (size - 1);
1116 const float *src = array_src + (size - 1);
1119 *(tar--) = *(src--) * f;
1123void add_vn_vn(
float *array_tar,
const float *array_src,
const int size)
1125 float *tar = array_tar + (size - 1);
1126 const float *src = array_src + (size - 1);
1129 *(tar--) += *(src--);
1134 const float *array_src_a,
1135 const float *array_src_b,
1138 float *tar = array_tar + (size - 1);
1139 const float *src_a = array_src_a + (size - 1);
1140 const float *src_b = array_src_b + (size - 1);
1143 *(tar--) = *(src_a--) + *(src_b--);
1147void madd_vn_vn(
float *array_tar,
const float *array_src,
const float f,
const int size)
1149 float *tar = array_tar + (size - 1);
1150 const float *src = array_src + (size - 1);
1153 *(tar--) += *(src--) * f;
1158 const float *array_src_a,
1159 const float *array_src_b,
1163 float *tar = array_tar + (size - 1);
1164 const float *src_a = array_src_a + (size - 1);
1165 const float *src_b = array_src_b + (size - 1);
1168 *(tar--) = *(src_a--) + (*(src_b--) * f);
1172void sub_vn_vn(
float *array_tar,
const float *array_src,
const int size)
1174 float *tar = array_tar + (size - 1);
1175 const float *src = array_src + (size - 1);
1178 *(tar--) -= *(src--);
1183 const float *array_src_a,
1184 const float *array_src_b,
1187 float *tar = array_tar + (size - 1);
1188 const float *src_a = array_src_a + (size - 1);
1189 const float *src_b = array_src_b + (size - 1);
1192 *(tar--) = *(src_a--) - *(src_b--);
1196void msub_vn_vn(
float *array_tar,
const float *array_src,
const float f,
const int size)
1198 float *tar = array_tar + (size - 1);
1199 const float *src = array_src + (size - 1);
1202 *(tar--) -= *(src--) * f;
1207 const float *array_src_a,
1208 const float *array_src_b,
1212 float *tar = array_tar + (size - 1);
1213 const float *src_a = array_src_a + (size - 1);
1214 const float *src_b = array_src_b + (size - 1);
1217 *(tar--) = *(src_a--) - (*(src_b--) * f);
1221void interp_vn_vn(
float *array_tar,
const float *array_src,
const float t,
const int size)
1223 const float s = 1.0f - t;
1224 float *tar = array_tar + (size - 1);
1225 const float *src = array_src + (size - 1);
1228 *(tar) = (s * *(tar)) + (t * *(src));
1234void copy_vn_i(
int *array_tar,
const int size,
const int val)
1236 int *tar = array_tar + (size - 1);
1245 short *tar = array_tar + (size - 1);
1254 ushort *tar = array_tar + (size - 1);
1263 uchar *tar = array_tar + (size - 1);
1270void copy_vn_fl(
float *array_tar,
const int size,
const float val)
1272 float *tar = array_tar + (size - 1);
1285void add_vn_vn_d(
double *array_tar,
const double *array_src,
const int size)
1287 double *tar = array_tar + (size - 1);
1288 const double *src = array_src + (size - 1);
1291 *(tar--) += *(src--);
1296 const double *array_src_a,
1297 const double *array_src_b,
1300 double *tar = array_tar + (size - 1);
1301 const double *src_a = array_src_a + (size - 1);
1302 const double *src_b = array_src_b + (size - 1);
1305 *(tar--) = *(src_a--) + *(src_b--);
1309void mul_vn_db(
double *array_tar,
const int size,
const double f)
1311 double *array_pt = array_tar + (size - 1);
1320 const double s = 1.0f - t;
1322 target[0] = s * a[0] + t *
b[0];
1323 target[1] = s * a[1] + t *
b[1];
1324 target[2] = s * a[2] + t *
b[2];
1329 const double s = 1.0f - t;
1331 target[0] = s * a[0] + t *
b[0];
1332 target[1] = s * a[1] + t *
b[1];
#define BLI_ASSERT_UNIT_V3_DB(v)
#define BLI_ASSERT_UNIT_V2(v)
#define BLI_ASSERT_UNIT_V3(v)
MINLINE float safe_asinf(float a)
MINLINE int axis_dominant_v3_single(const float vec[3])
void interp_dot_slerp(float t, float cosom, float r_w[2])
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_squared_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE bool is_zero_v3_db(const double v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], float f)
MINLINE void madd_v3_v3v3db_db(double r[3], const double a[3], const double b[3], double f)
MINLINE bool equals_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float len_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void mul_v3_v3db_db(double r[3], const double a[3], double f)
MINLINE bool is_zero_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void negate_v3_v3(float r[3], const float a[3])
MINLINE double dot_v3v3_db(const double a[3], const double b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void negate_v2_v2(float r[2], const float a[2])
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE bool equals_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE bool is_zero_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void zero_v2(float r[2])
MINLINE float dot_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v2(float n[2])
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
MINLINE void zero_v3(float r[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f)
MINLINE void zero_v3_db(double r[3])
MINLINE float normalize_v3(float n[3])
typedef double(DMatrix)[4][4]
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
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
void mid_v3_v3v3v3v3(float v[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
void copy_vn_fl(float *array_tar, const int size, const float val)
void project_v2_v2v2_normalized(float out[2], const float p[2], const float v_proj[2])
void madd_vn_vn(float *array_tar, const float *array_src, const float f, const int size)
void add_vn_vn_d(double *array_tar, const double *array_src, const int size)
void negate_vn(float *array_tar, const int size)
void interp_v2_v2v2(float r[2], const float a[2], const float b[2], const float t)
void reflect_v3_v3v3_db(double out[3], const double v[3], const double normal[3])
void angle_quad_v3(float angles[4], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
void axis_sort_v3(const float axis_values[3], int r_axis_order[3])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], const float t)
void sub_vn_vn(float *array_tar, const float *array_src, const int size)
void mul_vn_db(double *array_tar, const int size, const double f)
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
void rotate_v2_v2fl(float r[2], const float p[2], const float angle)
void mul_vn_vn_fl(float *array_tar, const float *array_src, const int size, const float f)
void copy_vn_i(int *array_tar, const int size, const int val)
void print_v3(const char *str, const float v[3])
void madd_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const float f, const int size)
bool is_finite_v2(const float v[2])
void project_plane_normalized_v2_v2v2(float out[2], const float p[2], const float v_plane[2])
void interp_v4_v4v4_char(char target[4], const char a[4], const char b[4], const float t)
float angle_on_axis_v3v3_v3(const float v1[3], const float v2[3], const float axis[3])
float normalize_vn(float *array_tar, const int size)
float angle_v3v3v3(const float a[3], const float b[3], const float c[3])
void reflect_v3_v3v3(float out[3], const float v[3], const float normal[3])
bool is_finite_v4(const float v[4])
void interp_v3_v3v3v3(float p[3], const float v1[3], const float v2[3], const float v3[3], const float w[3])
float angle_normalized_v3v3(const float v1[3], const float v2[3])
void interp_v4_v4v4v4v4(float p[4], const float v1[4], const float v2[4], const float v3[4], const float v4[4], const float w[4])
void sub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const int size)
void interp_v3_v3v3_db(double target[3], const double a[3], const double b[3], const double t)
double dot_vn_vn(const float *array_src_a, const float *array_src_b, const int size)
void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3])
void add_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const int size)
void interp_v3_v3v3_char(char target[3], const char a[3], const char b[3], const float t)
void mid_v3_angle_weighted(float r[3])
float angle_v3v3(const float a[3], const float b[3])
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], const float t)
void mid_v2_v2v2v2(float v[2], const float v1[2], const float v2[2], const float v3[2])
void project_v3_plane(float out[3], const float plane_no[3], const float plane_co[3])
float cos_v3v3v3(const float p1[3], const float p2[3], const float p3[3])
void add_vn_vn(float *array_tar, const float *array_src, const int size)
void project_v3_v3v3_normalized(float out[3], const float p[3], const float v_proj[3])
void interp_v2_v2v2v2(float r[2], const float a[2], const float b[2], const float c[2], const float t[3])
void print_v4(const char *str, const float v[4])
bool interp_v3_v3v3_slerp(float target[3], const float a[3], const float b[3], const float t)
float normalize_vn_vn(float *array_tar, const float *array_src, const int size)
bool is_finite_v3(const float v[3])
void negate_vn_vn(float *array_tar, const float *array_src, const int size)
void project_v3_v3v3(float out[3], const float p[3], const float v_proj[3])
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
void project_plane_v3_v3v3(float out[3], const float p[3], const float v_plane[3])
void interp_v3_v3v3_slerp_safe(float target[3], const float a[3], const float b[3], const float t)
void copy_vn_short(short *array_tar, const int size, const short val)
void project_plane_normalized_v3_v3v3(float out[3], const float p[3], const float v_plane[3])
void msub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const float f, const int size)
void interp_v3_v3v3_uchar(uchar target[3], const uchar a[3], const uchar b[3], const float t)
void print_v2(const char *str, const float v[2])
void mid_v3_v3v3_angle_weighted(float r[3], const float a[3], const float b[3])
void rotate_v3_v3v3fl(float r[3], const float p[3], const float axis[3], const float angle)
void ortho_v3_v3(float out[3], const float v[3])
float angle_v2v2(const float a[2], const float b[2])
void interp_v2_v2v2_db(double target[2], const double a[2], const double b[2], const double t)
void interp_v4_v4v4v4(float p[4], const float v1[4], const float v2[4], const float v3[4], const float w[3])
void flip_v2_v2v2(float v[2], const float v1[2], const float v2[2])
float cos_v2v2v2(const float p1[2], const float p2[2], const float p3[2])
void print_vn(const char *str, const float v[], const int n)
void interp_v3_v3v3v3v3(float p[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3], const float w[4])
void minmax_v4v4_v4(float min[4], float max[4], const float vec[4])
void dist_ensure_v2_v2fl(float v1[2], const float v2[2], const float dist)
void mid_v2_v2v2(float r[2], const float a[2], const float b[2])
void range_vn_u(uint *array_tar, const int size, const uint start)
void interp_v4_v4v4_uchar(uchar target[4], const uchar a[4], const uchar b[4], const float t)
void ortho_v2_v2(float out[2], const float v[2])
void mul_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const int size)
void interp_v2_v2v2_slerp_safe(float target[2], const float a[2], const float b[2], const float t)
void angle_poly_v3(float *angles, const float *verts[3], int len)
void range_vn_fl(float *array_tar, const int size, const float start, const float step)
void interp_vn_vn(float *array_tar, const float *array_src, const float t, const int size)
double len_squared_vn(const float *array, const int size)
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
void ortho_basis_v3v3_v3(float r_n1[3], float r_n2[3], const float n[3])
void mul_vn_vn(float *array_tar, const float *array_src, const int size)
void msub_vn_vn(float *array_tar, const float *array_src, const float f, const int size)
void add_vn_vnvn_d(double *array_tar, const double *array_src_a, const double *array_src_b, const int size)
void mid_v3_v3_array(float r[3], const float(*vec_arr)[3], const uint vec_arr_num)
void range_vn_i(int *array_tar, const int size, const int start)
void flip_v4_v4v4(float v[4], const float v1[4], const float v2[4])
void flip_v3_v3v3(float v[3], const float v1[3], const float v2[3])
void project_plane_v2_v2v2(float out[2], const float p[2], const float v_plane[2])
float angle_v2v2v2(const float a[2], const float b[2], const float c[2])
float angle_normalized_v2v2(const float a[2], const float b[2])
bool interp_v2_v2v2_slerp(float target[2], const float a[2], const float b[2], const float t)
void dist_ensure_v3_v3fl(float v1[3], const float v2[3], const float dist)
void project_v3_v3v3_db(double out[3], const double p[3], const double v_proj[3])
float angle_on_axis_v3v3v3_v3(const float v1[3], const float v2[3], const float v3[3], const float axis[3])
void mul_vn_fl(float *array_tar, const int size, const float f)
void copy_vn_uchar(uchar *array_tar, const int size, const uchar val)
void interp_v3_v3v3v3_uv(float p[3], const float v1[3], const float v2[3], const float v3[3], const float uv[2])
float angle_signed_on_axis_v3v3v3_v3(const float v1[3], const float v2[3], const float v3[3], const float axis[3])
void rotate_normalized_v3_v3v3fl(float out[3], const float p[3], const float axis[3], const float angle)
MINLINE double sqr_db(double f)
float angle_signed_on_axis_v3v3_v3(const float v1[3], const float v2[3], const float axis[3])
void mid_v3_v3v3v3(float v[3], const float v1[3], const float v2[3], const float v3[3])
void interp_v2_v2v2v2v2_cubic(float p[2], const float v1[2], const float v2[2], const float v3[2], const float v4[2], const float u)
void project_v2_v2v2(float out[2], const float p[2], const float v_proj[2])
void bisect_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3])
void copy_vn_ushort(ushort *array_tar, const int size, const ushort val)
float angle_signed_v2v2(const float v1[2], const float v2[2])
Frequency::GEOMETRY nor[]