Blender V4.3
BLI_math_vector.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
11#include "BLI_compiler_attrs.h"
12#include "BLI_math_inline.h"
13#include "BLI_utildefines.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19/* -------------------------------------------------------------------- */
23#ifdef BLI_MATH_GCC_WARN_PRAGMA
24# pragma GCC diagnostic push
25# pragma GCC diagnostic ignored "-Wredundant-decls"
26#endif
27
28MINLINE void zero_v2(float r[2]);
29MINLINE void zero_v3(float r[3]);
30MINLINE void zero_v4(float r[4]);
31
32MINLINE void copy_v2_v2(float r[2], const float a[2]);
33MINLINE void copy_v3_v3(float r[3], const float a[3]);
34MINLINE void copy_v4_v4(float r[4], const float a[4]);
35
36MINLINE void copy_v2_fl(float r[2], float f);
37MINLINE void copy_v3_fl(float r[3], float f);
38MINLINE void copy_v4_fl(float r[4], float f);
39
40MINLINE void swap_v2_v2(float a[2], float b[2]);
41MINLINE void swap_v3_v3(float a[3], float b[3]);
42MINLINE void swap_v4_v4(float a[4], float b[4]);
43
44/* unsigned char */
45
46MINLINE void copy_v2_v2_uchar(unsigned char r[2], const unsigned char a[2]);
47MINLINE void copy_v3_v3_uchar(unsigned char r[3], const unsigned char a[3]);
48MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4]);
49
50MINLINE void copy_v2_uchar(unsigned char r[2], unsigned char a);
51MINLINE void copy_v3_uchar(unsigned char r[3], unsigned char a);
52MINLINE void copy_v4_uchar(unsigned char r[4], unsigned char a);
53
54/* char */
55
56MINLINE void copy_v2_v2_char(char r[2], const char a[2]);
57MINLINE void copy_v3_v3_char(char r[3], const char a[3]);
58MINLINE void copy_v4_v4_char(char r[4], const char a[4]);
59
60/* short */
61
62MINLINE void copy_v2_v2_short(short r[2], const short a[2]);
63MINLINE void copy_v3_v3_short(short r[3], const short a[3]);
64MINLINE void copy_v4_v4_short(short r[4], const short a[4]);
65
66/* int */
67
68MINLINE void zero_v3_int(int r[3]);
69MINLINE void copy_v2_v2_int(int r[2], const int a[2]);
70MINLINE void copy_v3_v3_int(int r[3], const int a[3]);
71MINLINE void copy_v4_v4_int(int r[4], const int a[4]);
72
73/* double */
74
75MINLINE void zero_v3_db(double r[3]);
76MINLINE void copy_v2_v2_db(double r[2], const double a[2]);
77MINLINE void copy_v3_v3_db(double r[3], const double a[3]);
78MINLINE void copy_v4_v4_db(double r[4], const double a[4]);
79
80/* short -> float */
81
82MINLINE void copy_v3fl_v3s(float r[3], const short a[3]);
83
84/* int <-> float */
85
86MINLINE void copy_v2fl_v2i(float r[2], const int a[2]);
87
88/* int <-> float */
89
90MINLINE void round_v2i_v2fl(int r[2], const float a[2]);
91
92/* double -> float */
93
94MINLINE void copy_v2fl_v2db(float r[2], const double a[2]);
95MINLINE void copy_v3fl_v3db(float r[3], const double a[3]);
96MINLINE void copy_v4fl_v4db(float r[4], const double a[4]);
97
98/* float -> double */
99
100MINLINE void copy_v2db_v2fl(double r[2], const float a[2]);
101MINLINE void copy_v3db_v3fl(double r[3], const float a[3]);
102MINLINE void copy_v4db_v4fl(double r[4], const float a[4]);
103
104/* float args -> vec */
105
106MINLINE void copy_v2_fl2(float v[2], float x, float y);
107MINLINE void copy_v3_fl3(float v[3], float x, float y, float z);
108MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w);
109
112/* -------------------------------------------------------------------- */
116MINLINE void add_v2_fl(float r[2], float f);
117MINLINE void add_v3_fl(float r[3], float f);
118MINLINE void add_v4_fl(float r[4], float f);
119MINLINE void add_v2_v2(float r[2], const float a[2]);
120MINLINE void add_v2_v2_db(double r[2], const double a[2]);
121MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2]);
122MINLINE void add_v2_v2_int(int r[2], const int a[2]);
123MINLINE void add_v2_v2v2_int(int r[2], const int a[2], const int b[2]);
124MINLINE void add_v3_v3(float r[3], const float a[3]);
125MINLINE void add_v3_v3_db(double r[3], const double a[3]);
126MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3]);
127MINLINE void add_v4_v4(float r[4], const float a[4]);
128MINLINE void add_v4_v4v4(float r[4], const float a[4], const float b[4]);
129
130MINLINE void add_v3fl_v3fl_v3i(float r[3], const float a[3], const int b[3]);
131
132MINLINE void add_v3_uchar_clamped(uchar r[3], int i);
133
134MINLINE void sub_v2_v2(float r[2], const float a[2]);
135MINLINE void sub_v2_v2_db(double r[2], const double a[2]);
136MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2]);
137MINLINE void sub_v2_v2v2_db(double r[2], const double a[2], const double b[2]);
138MINLINE void sub_v2_v2v2_int(int r[2], const int a[2], const int b[2]);
139MINLINE void sub_v3_v3(float r[3], const float a[3]);
140MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3]);
141MINLINE void sub_v3_v3v3_int(int r[3], const int a[3], const int b[3]);
142MINLINE void sub_v3_v3v3_db(double r[3], const double a[3], const double b[3]);
143MINLINE void sub_v4_v4(float r[4], const float a[4]);
144MINLINE void sub_v4_v4v4(float r[4], const float a[4], const float b[4]);
145
146MINLINE void sub_v2db_v2fl_v2fl(double r[2], const float a[2], const float b[2]);
147MINLINE void sub_v3db_v3fl_v3fl(double r[3], const float a[3], const float b[3]);
148
149MINLINE void mul_v2_fl(float r[2], float f);
150MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f);
151MINLINE void mul_v3_fl(float r[3], float f);
152MINLINE void mul_v3db_db(double r[3], double f);
153MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f);
154MINLINE void mul_v3_v3db_db(double r[3], const double a[3], double f);
155MINLINE void mul_v2_v2(float r[2], const float a[2]);
156MINLINE void mul_v2_v2v2(float r[2], const float a[2], const float b[2]);
157MINLINE void mul_v3_v3(float r[3], const float a[3]);
158MINLINE void mul_v3_v3v3(float r[3], const float v1[3], const float v2[3]);
159MINLINE void mul_v4_fl(float r[4], float f);
160MINLINE void mul_v4_v4(float r[4], const float a[4]);
161MINLINE void mul_v4_v4fl(float r[4], const float a[4], float f);
162MINLINE void mul_v2_v2_cw(float r[2], const float mat[2], const float vec[2]);
163MINLINE void mul_v2_v2_ccw(float r[2], const float mat[2], const float vec[2]);
176MINLINE float mul_project_m4_v3_zfac(const float mat[4][4],
177 const float co[3]) ATTR_WARN_UNUSED_RESULT;
181MINLINE float dot_m3_v3_row_x(const float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT;
182MINLINE float dot_m3_v3_row_y(const float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT;
183MINLINE float dot_m3_v3_row_z(const float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT;
188MINLINE float dot_m4_v3_row_x(const float M[4][4], const float a[3]) ATTR_WARN_UNUSED_RESULT;
189MINLINE float dot_m4_v3_row_y(const float M[4][4], const float a[3]) ATTR_WARN_UNUSED_RESULT;
190MINLINE float dot_m4_v3_row_z(const float M[4][4], const float a[3]) ATTR_WARN_UNUSED_RESULT;
191
192MINLINE void madd_v2_v2fl(float r[2], const float a[2], float f);
193MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f);
194MINLINE void madd_v3_v3v3(float r[3], const float a[3], const float b[3]);
195MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], float f);
196MINLINE void madd_v2_v2db_db(double r[2], const double a[2], const double b[2], double f);
197MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f);
198MINLINE void madd_v3_v3v3db_db(double r[3], const double a[3], const double b[3], double f);
199MINLINE void madd_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3]);
200MINLINE void madd_v4_v4fl(float r[4], const float a[4], float f);
201MINLINE void madd_v4_v4v4(float r[4], const float a[4], const float b[4]);
202
203MINLINE void madd_v3fl_v3fl_v3fl_v3i(float r[3],
204 const float a[3],
205 const float b[3],
206 const int c[3]);
207
208MINLINE void negate_v2(float r[2]);
209MINLINE void negate_v2_v2(float r[2], const float a[2]);
210MINLINE void negate_v3(float r[3]);
211MINLINE void negate_v3_v3(float r[3], const float a[3]);
212MINLINE void negate_v4(float r[4]);
213MINLINE void negate_v4_v4(float r[4], const float a[4]);
214
215/* could add more... */
216
217MINLINE void negate_v3_short(short r[3]);
218MINLINE void negate_v3_db(double r[3]);
219
220MINLINE void invert_v2(float r[2]);
221MINLINE void invert_v3(float r[3]);
225MINLINE void invert_v3_safe(float r[3]);
226
227MINLINE void abs_v2(float r[2]);
228MINLINE void abs_v2_v2(float r[2], const float a[2]);
229MINLINE void abs_v3(float r[3]);
230MINLINE void abs_v3_v3(float r[3], const float a[3]);
231MINLINE void abs_v4(float r[4]);
232MINLINE void abs_v4_v4(float r[4], const float a[4]);
233
234MINLINE float dot_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
235MINLINE double dot_v2v2_db(const double a[2], const double b[2]) ATTR_WARN_UNUSED_RESULT;
236MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT;
237MINLINE float dot_v3v3v3(const float p[3],
238 const float a[3],
239 const float b[3]) ATTR_WARN_UNUSED_RESULT;
240MINLINE float dot_v4v4(const float a[4], const float b[4]) ATTR_WARN_UNUSED_RESULT;
241
242MINLINE double dot_v3db_v3fl(const double a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT;
243
244MINLINE double dot_v3v3_db(const double a[3], const double b[3]) ATTR_WARN_UNUSED_RESULT;
245
246MINLINE float cross_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
247MINLINE double cross_v2v2_db(const double a[2], const double b[2]) ATTR_WARN_UNUSED_RESULT;
248MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3]);
253MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3]);
254MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3]);
255
260MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3]);
261
262MINLINE void star_m3_v3(float rmat[3][3], const float a[3]);
263
266/* -------------------------------------------------------------------- */
270MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT;
271MINLINE float len_squared_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT;
275MINLINE float len_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT;
276MINLINE double len_v2_db(const double v[2]) ATTR_WARN_UNUSED_RESULT;
277MINLINE float len_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT;
278MINLINE double len_v2v2_db(const double v1[2], const double v2[2]) ATTR_WARN_UNUSED_RESULT;
279MINLINE float len_v2v2_int(const int v1[2], const int v2[2]);
280MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
281MINLINE double len_squared_v2v2_db(const double a[2], const double b[2]) ATTR_WARN_UNUSED_RESULT;
282MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT;
283MINLINE float len_squared_v4v4(const float a[4], const float b[4]) ATTR_WARN_UNUSED_RESULT;
284MINLINE float len_manhattan_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
285MINLINE int len_manhattan_v2v2_int(const int a[2], const int b[2]) ATTR_WARN_UNUSED_RESULT;
286MINLINE float len_manhattan_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT;
287MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT;
288MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT;
289
290MINLINE double len_v3_db(const double a[3]) ATTR_WARN_UNUSED_RESULT;
291MINLINE double len_squared_v3_db(const double v[3]) ATTR_WARN_UNUSED_RESULT;
292MINLINE float normalize_v2_length(float n[2], float unit_length);
296MINLINE float normalize_v2_v2_length(float r[2], const float a[2], float unit_length);
297MINLINE float normalize_v3_length(float n[3], float unit_length);
301MINLINE float normalize_v3_v3_length(float r[3], const float a[3], float unit_length);
302MINLINE double normalize_v3_length_db(double n[3], double unit_length);
303MINLINE double normalize_v3_v3_length_db(double r[3], const double a[3], double unit_length);
304
305MINLINE float normalize_v2(float n[2]);
306MINLINE float normalize_v2_v2(float r[2], const float a[2]);
307MINLINE float normalize_v3(float n[3]);
308MINLINE float normalize_v3_v3(float r[3], const float a[3]);
309MINLINE double normalize_v3_v3_db(double r[3], const double a[3]);
310MINLINE double normalize_v3_db(double n[3]);
311
314/* -------------------------------------------------------------------- */
318void interp_v2_v2v2(float r[2], const float a[2], const float b[2], float t);
319void interp_v2_v2v2_db(double target[2], const double a[2], const double b[2], double t);
325 float r[2], const float a[2], const float b[2], const float c[2], const float t[3]);
326void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t);
327void interp_v3_v3v3_db(double target[3], const double a[3], const double b[3], double t);
333 float p[3], const float v1[3], const float v2[3], const float v3[3], const float w[3]);
338void interp_v3_v3v3v3v3(float p[3],
339 const float v1[3],
340 const float v2[3],
341 const float v3[3],
342 const float v4[3],
343 const float w[4]);
344void interp_v4_v4v4(float r[4], const float a[4], const float b[4], float t);
346 float p[4], const float v1[4], const float v2[4], const float v3[4], const float w[3]);
347void interp_v4_v4v4v4v4(float p[4],
348 const float v1[4],
349 const float v2[4],
350 const float v3[4],
351 const float v4[4],
352 const float w[4]);
354 float p[3], const float v1[3], const float v2[3], const float v3[3], const float uv[2]);
355
362bool interp_v3_v3v3_slerp(float target[3], const float a[3], const float b[3], float t)
364bool interp_v2_v2v2_slerp(float target[2], const float a[2], const float b[2], float t)
366
370void interp_v3_v3v3_slerp_safe(float target[3], const float a[3], const float b[3], float t);
371void interp_v2_v2v2_slerp_safe(float target[2], const float a[2], const float b[2], float t);
372
374void interp_v2_v2v2v2v2_cubic(float p[2],
375 const float v1[2],
376 const float v2[2],
377 const float v3[2],
378 const float v4[2],
379 float u);
380
381void interp_v3_v3v3_char(char target[3], const char a[3], const char b[3], float t);
382void interp_v3_v3v3_uchar(unsigned char target[3],
383 const unsigned char a[3],
384 const unsigned char b[3],
385 float t);
386void interp_v4_v4v4_char(char target[4], const char a[4], const char b[4], float t);
387void interp_v4_v4v4_uchar(unsigned char target[4],
388 const unsigned char a[4],
389 const unsigned char b[4],
390 float t);
391
392void mid_v3_v3v3(float r[3], const float a[3], const float b[3]);
393void mid_v2_v2v2(float r[2], const float a[2], const float b[2]);
394void mid_v3_v3v3v3(float v[3], const float v1[3], const float v2[3], const float v3[3]);
395void mid_v2_v2v2v2(float v[2], const float v1[2], const float v2[2], const float v3[2]);
396void mid_v3_v3v3v3v3(
397 float v[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3]);
398void mid_v3_v3_array(float r[3], const float (*vec_arr)[3], unsigned int vec_arr_num);
399
412void mid_v3_v3v3_angle_weighted(float r[3], const float a[3], const float b[3]);
417void mid_v3_angle_weighted(float r[3]);
418
419void flip_v4_v4v4(float v[4], const float v1[4], const float v2[4]);
420void flip_v3_v3v3(float v[3], const float v1[3], const float v2[3]);
421void flip_v2_v2v2(float v[2], const float v1[2], const float v2[2]);
422
425/* -------------------------------------------------------------------- */
429MINLINE bool is_zero_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT;
430MINLINE bool is_zero_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT;
431MINLINE bool is_zero_v4(const float v[4]) ATTR_WARN_UNUSED_RESULT;
432
433MINLINE bool is_zero_v2_db(const double v[2]) ATTR_WARN_UNUSED_RESULT;
434MINLINE bool is_zero_v3_db(const double v[3]) ATTR_WARN_UNUSED_RESULT;
435MINLINE bool is_zero_v4_db(const double v[4]) ATTR_WARN_UNUSED_RESULT;
436
437bool is_finite_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT;
438bool is_finite_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT;
439bool is_finite_v4(const float v[4]) ATTR_WARN_UNUSED_RESULT;
440
441MINLINE bool is_one_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT;
442
443MINLINE bool equals_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT;
444MINLINE bool equals_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT;
445MINLINE bool equals_v4v4(const float v1[4], const float v2[4]) ATTR_WARN_UNUSED_RESULT;
446
447MINLINE bool equals_v2v2_int(const int v1[2], const int v2[2]) ATTR_WARN_UNUSED_RESULT;
448MINLINE bool equals_v3v3_int(const int v1[3], const int v2[3]) ATTR_WARN_UNUSED_RESULT;
449MINLINE bool equals_v4v4_int(const int v1[4], const int v2[4]) ATTR_WARN_UNUSED_RESULT;
450
451MINLINE bool compare_v2v2(const float v1[2],
452 const float v2[2],
453 float limit) ATTR_WARN_UNUSED_RESULT;
454MINLINE bool compare_v3v3(const float v1[3],
455 const float v2[3],
456 float limit) ATTR_WARN_UNUSED_RESULT;
457MINLINE bool compare_v4v4(const float v1[4],
458 const float v2[4],
459 float limit) ATTR_WARN_UNUSED_RESULT;
460
461MINLINE bool compare_v2v2_relative(const float v1[2], const float v2[2], float limit, int max_ulps)
463MINLINE bool compare_v3v3_relative(const float v1[3], const float v2[3], float limit, int max_ulps)
465MINLINE bool compare_v4v4_relative(const float v1[4], const float v2[4], float limit, int max_ulps)
467
468MINLINE bool compare_len_v3v3(const float v1[3],
469 const float v2[3],
470 float limit) ATTR_WARN_UNUSED_RESULT;
471
472MINLINE bool compare_size_v3v3(const float v1[3],
473 const float v2[3],
474 float limit) ATTR_WARN_UNUSED_RESULT;
475
488MINLINE float line_point_side_v2(const float l1[2],
489 const float l2[2],
490 const float pt[2]) ATTR_WARN_UNUSED_RESULT;
491
494/* -------------------------------------------------------------------- */
498/* - angle with 2 arguments is angle between vector.
499 * - angle with 3 arguments is angle between 3 points at the middle point.
500 * - angle_normalized_* is faster equivalent if vectors are normalized.
501 */
502
506float angle_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
507float angle_signed_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT;
508float angle_v2v2v2(const float a[2], const float b[2], const float c[2]) ATTR_WARN_UNUSED_RESULT;
509float angle_normalized_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
513float angle_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT;
522float angle_v3v3v3(const float a[3], const float b[3], const float c[3]) ATTR_WARN_UNUSED_RESULT;
526float cos_v3v3v3(const float p1[3], const float p2[3], const float p3[3]) ATTR_WARN_UNUSED_RESULT;
530float cos_v2v2v2(const float p1[2], const float p2[2], const float p3[2]) ATTR_WARN_UNUSED_RESULT;
534float angle_on_axis_v3v3_v3(const float v1[3],
535 const float v2[3],
536 const float axis[3]) ATTR_WARN_UNUSED_RESULT;
537float angle_signed_on_axis_v3v3_v3(const float v1[3],
538 const float v2[3],
539 const float axis[3]) ATTR_WARN_UNUSED_RESULT;
540float angle_normalized_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT;
544float angle_on_axis_v3v3v3_v3(const float v1[3],
545 const float v2[3],
546 const float v3[3],
547 const float axis[3]) ATTR_WARN_UNUSED_RESULT;
548float angle_signed_on_axis_v3v3v3_v3(const float v1[3],
549 const float v2[3],
550 const float v3[3],
551 const float axis[3]) ATTR_WARN_UNUSED_RESULT;
552void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3]);
553void angle_quad_v3(
554 float angles[4], const float v1[3], const float v2[3], const float v3[3], const float v4[3]);
555void angle_poly_v3(float *angles, const float *verts[3], int len);
556
559/* -------------------------------------------------------------------- */
566void project_v2_v2v2(float out[2], const float p[2], const float v_proj[2]);
570void project_v3_v3v3(float out[3], const float p[3], const float v_proj[3]);
571void project_v3_v3v3_db(double out[3], const double p[3], const double v_proj[3]);
575void project_v2_v2v2_normalized(float out[2], const float p[2], const float v_proj[2]);
579void project_v3_v3v3_normalized(float out[3], const float p[3], const float v_proj[3]);
593void project_plane_v3_v3v3(float out[3], const float p[3], const float v_plane[3]);
594void project_plane_v2_v2v2(float out[2], const float p[2], const float v_plane[2]);
595void project_plane_normalized_v3_v3v3(float out[3], const float p[3], const float v_plane[3]);
596void project_plane_normalized_v2_v2v2(float out[2], const float p[2], const float v_plane[2]);
600void project_v3_plane(float out[3], const float plane_no[3], const float plane_co[3]);
617void reflect_v3_v3v3(float out[3], const float v[3], const float normal[3]);
618void reflect_v3_v3v3_db(double out[3], const double v[3], const double normal[3]);
624void ortho_basis_v3v3_v3(float r_n1[3], float r_n2[3], const float n[3]);
630void ortho_v3_v3(float out[3], const float v[3]);
634void ortho_v2_v2(float out[2], const float v[2]);
638void bisect_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3]);
642void rotate_v2_v2fl(float r[2], const float p[2], float angle);
643void rotate_v3_v3v3fl(float r[3], const float p[3], const float axis[3], float angle);
648void rotate_normalized_v3_v3v3fl(float out[3], const float p[3], const float axis[3], float angle);
649
652/* -------------------------------------------------------------------- */
656void print_v2(const char *str, const float v[2]);
657void print_v3(const char *str, const float v[3]);
658void print_v4(const char *str, const float v[4]);
659void print_vn(const char *str, const float v[], int n);
660
661#define print_v2_id(v) print_v2(STRINGIFY(v), v)
662#define print_v3_id(v) print_v3(STRINGIFY(v), v)
663#define print_v4_id(v) print_v4(STRINGIFY(v), v)
664#define print_vn_id(v, n) print_vn(STRINGIFY(v), v, n)
665
666MINLINE void normal_float_to_short_v2(short out[2], const float in[2]);
667MINLINE void normal_short_to_float_v3(float out[3], const short in[3]);
668MINLINE void normal_float_to_short_v3(short out[3], const float in[3]);
669MINLINE void normal_float_to_short_v4(short out[4], const float in[4]);
670
671void minmax_v4v4_v4(float min[4], float max[4], const float vec[4]);
672void minmax_v3v3_v3(float min[3], float max[3], const float vec[3]);
673void minmax_v2v2_v2(float min[2], float max[2], const float vec[2]);
674
676void dist_ensure_v3_v3fl(float v1[3], const float v2[3], float dist);
677void dist_ensure_v2_v2fl(float v1[2], const float v2[2], float dist);
678
679void axis_sort_v3(const float axis_values[3], int r_axis_order[3]);
680
681MINLINE void clamp_v2(float vec[2], float min, float max);
682MINLINE void clamp_v3(float vec[3], float min, float max);
683MINLINE void clamp_v4(float vec[4], float min, float max);
684MINLINE void clamp_v2_v2v2(float vec[2], const float min[2], const float max[2]);
685MINLINE void clamp_v3_v3v3(float vec[3], const float min[3], const float max[3]);
686MINLINE void clamp_v4_v4v4(float vec[4], const float min[4], const float max[4]);
687
690/* -------------------------------------------------------------------- */
696double dot_vn_vn(const float *array_src_a,
697 const float *array_src_b,
698 int size) ATTR_WARN_UNUSED_RESULT;
699double len_squared_vn(const float *array, int size) ATTR_WARN_UNUSED_RESULT;
700float normalize_vn_vn(float *array_tar, const float *array_src, int size);
701float normalize_vn(float *array_tar, int size);
702void range_vn_i(int *array_tar, int size, int start);
703void range_vn_u(unsigned int *array_tar, int size, unsigned int start);
704void range_vn_fl(float *array_tar, int size, float start, float step);
705void negate_vn(float *array_tar, int size);
706void negate_vn_vn(float *array_tar, const float *array_src, int size);
707void mul_vn_vn(float *array_tar, const float *array_src, int size);
708void mul_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, int size);
709void mul_vn_fl(float *array_tar, int size, float f);
710void mul_vn_vn_fl(float *array_tar, const float *array_src, int size, float f);
711void add_vn_vn(float *array_tar, const float *array_src, int size);
712void add_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, int size);
713void madd_vn_vn(float *array_tar, const float *array_src, float f, int size);
714void madd_vn_vnvn(
715 float *array_tar, const float *array_src_a, const float *array_src_b, float f, int size);
716void sub_vn_vn(float *array_tar, const float *array_src, int size);
717void sub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, int size);
718void msub_vn_vn(float *array_tar, const float *array_src, float f, int size);
719void msub_vn_vnvn(
720 float *array_tar, const float *array_src_a, const float *array_src_b, float f, int size);
721void interp_vn_vn(float *array_tar, const float *array_src, float t, int size);
722void copy_vn_i(int *array_tar, int size, int val);
723void copy_vn_short(short *array_tar, int size, short val);
724void copy_vn_ushort(unsigned short *array_tar, int size, unsigned short val);
725void copy_vn_uchar(unsigned char *array_tar, int size, unsigned char val);
726void copy_vn_fl(float *array_tar, int size, float val);
727
728void add_vn_vn_d(double *array_tar, const double *array_src, int size);
729void add_vn_vnvn_d(double *array_tar,
730 const double *array_src_a,
731 const double *array_src_b,
732 int size);
733void mul_vn_db(double *array_tar, int size, double f);
734
737/* -------------------------------------------------------------------- */
741#if BLI_MATH_DO_INLINE
743#endif
744
745#ifdef BLI_MATH_GCC_WARN_PRAGMA
746# pragma GCC diagnostic pop
747#endif
748
751#ifdef __cplusplus
752}
753#endif
#define ATTR_WARN_UNUSED_RESULT
#define MINLINE
void mid_v3_v3v3v3v3(float v[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
void project_v2_v2v2_normalized(float out[2], const float p[2], const float v_proj[2])
MINLINE void sub_v3db_v3fl_v3fl(double r[3], const float a[3], const float b[3])
MINLINE double normalize_v3_db(double n[3])
MINLINE float normalize_v2_v2_length(float r[2], const float a[2], float unit_length)
MINLINE void mul_v4_fl(float r[4], float f)
float angle_v2v2v2(const float a[2], const float b[2], const float c[2]) ATTR_WARN_UNUSED_RESULT
MINLINE double len_squared_v2v2_db(const double a[2], const double b[2]) ATTR_WARN_UNUSED_RESULT
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])
void add_vn_vn(float *array_tar, const float *array_src, int size)
void copy_vn_short(short *array_tar, int size, short val)
void rotate_v3_v3v3fl(float r[3], const float p[3], const float axis[3], float angle)
void interp_v2_v2v2_slerp_safe(float target[2], const float a[2], const float b[2], float t)
MINLINE void copy_v2fl_v2i(float r[2], const int a[2])
void interp_v3_v3v3_db(double target[3], const double a[3], const double b[3], double t)
void reflect_v3_v3v3_db(double out[3], const double v[3], const double normal[3])
float angle_on_axis_v3v3_v3(const float v1[3], const float v2[3], const float axis[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void swap_v4_v4(float a[4], float b[4])
MINLINE void copy_v3fl_v3s(float r[3], const short a[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])
MINLINE void abs_v4(float r[4])
double len_squared_vn(const float *array, int size) ATTR_WARN_UNUSED_RESULT
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
float angle_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void msub_vn_vn(float *array_tar, const float *array_src, float f, int size)
MINLINE float len_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
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
void madd_vn_vn(float *array_tar, const float *array_src, float f, int size)
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 float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
float angle_normalized_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void add_v3_fl(float r[3], float f)
MINLINE bool is_zero_v3_db(const double v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v2_v2_cw(float r[2], const float mat[2], const float vec[2])
MINLINE bool equals_v4v4_int(const int v1[4], const int v2[4]) ATTR_WARN_UNUSED_RESULT
MINLINE double dot_v2v2_db(const double a[2], const double b[2]) ATTR_WARN_UNUSED_RESULT
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)
void print_v3(const char *str, const float v[3])
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)
void mul_vn_fl(float *array_tar, int size, float f)
MINLINE void swap_v2_v2(float a[2], float b[2])
bool interp_v3_v3v3_slerp(float target[3], const float a[3], const float b[3], float t) ATTR_WARN_UNUSED_RESULT
Definition math_vector.c:55
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 is_one_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2_db(double r[2], const double a[2])
float cos_v3v3v3(const float p1[3], const float p2[3], const float p3[3]) ATTR_WARN_UNUSED_RESULT
bool interp_v2_v2v2_slerp(float target[2], const float a[2], const float b[2], float t) ATTR_WARN_UNUSED_RESULT
Definition math_vector.c:77
void project_plane_normalized_v2_v2v2(float out[2], const float p[2], const float v_plane[2])
void mid_v3_v3_array(float r[3], const float(*vec_arr)[3], unsigned int vec_arr_num)
MINLINE void clamp_v3(float vec[3], float min, float max)
MINLINE void mul_v4_v4(float r[4], const float a[4])
float normalize_vn(float *array_tar, int size)
float angle_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2(float r[2], const float a[2])
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 void copy_v2_uchar(unsigned char r[2], unsigned char a)
void negate_vn(float *array_tar, int size)
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 len_squared_v3_db(const double v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3(float r[3], const float a[3])
void reflect_v3_v3v3(float out[3], const float v[3], const float normal[3])
void madd_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, float f, int size)
MINLINE bool equals_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
void interp_v2_v2v2v2v2_cubic(float p[2], const float v1[2], const float v2[2], const float v3[2], const float v4[2], float u)
void interp_v3_v3v3v3(float p[3], const float v1[3], const float v2[3], const float v3[3], const float w[3])
MINLINE void mul_v2_v2_ccw(float r[2], const float mat[2], const float vec[2])
MINLINE void copy_v4_uchar(unsigned char r[4], unsigned char a)
MINLINE void clamp_v4(float vec[4], float min, float max)
MINLINE float dot_v3v3v3(const float p[3], const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3])
MINLINE bool is_zero_v4(const float v[4]) ATTR_WARN_UNUSED_RESULT
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 len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
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])
MINLINE double dot_v3db_v3fl(const double a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
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 bool compare_v4v4(const float v1[4], const float v2[4], float limit) ATTR_WARN_UNUSED_RESULT
bool is_finite_v4(const float v[4]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void sub_v2_v2_db(double r[2], const double a[2])
void add_vn_vnvn_d(double *array_tar, const double *array_src_a, const double *array_src_b, int size)
MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3])
void interp_v4_v4v4_char(char target[4], const char a[4], const char b[4], float t)
MINLINE void copy_v3_v3_char(char r[3], const char a[3])
MINLINE float normalize_v2_length(float n[2], float unit_length)
MINLINE float len_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
void mid_v3_angle_weighted(float r[3])
MINLINE void mul_v3db_db(double r[3], double f)
MINLINE void mul_v2_fl(float r[2], float f)
void interp_v2_v2v2(float r[2], const float a[2], const float b[2], float t)
Definition math_vector.c:21
MINLINE double len_v3_db(const double a[3]) ATTR_WARN_UNUSED_RESULT
void mid_v2_v2v2v2(float v[2], const float v1[2], const float v2[2], const float v3[2])
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])
void project_v3_plane(float out[3], const float plane_no[3], const float plane_co[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE bool is_zero_v2_db(const double v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
void range_vn_fl(float *array_tar, int size, float start, float step)
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])
void dist_ensure_v2_v2fl(float v1[2], const float v2[2], float dist)
MINLINE void mul_v3_v3db_db(double r[3], const double a[3], double f)
void sub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, int size)
MINLINE void copy_v4db_v4fl(double r[4], const float a[4])
MINLINE void negate_v2(float r[2])
MINLINE float dot_m3_v3_row_x(const float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v4_v4fl(float r[4], const float a[4], float f)
MINLINE bool is_zero_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
float angle_signed_on_axis_v3v3v3_v3(const float v1[3], const float v2[3], const float v3[3], const float axis[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE bool equals_v3v3_int(const int v1[3], const int v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_m3_v3_row_y(const float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_v4v4(const float a[4], const float b[4]) ATTR_WARN_UNUSED_RESULT
void add_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, int size)
MINLINE void negate_v3_v3(float r[3], const float a[3])
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])
Definition math_vector.c:29
MINLINE double normalize_v3_v3_length_db(double r[3], const double a[3], double unit_length)
void print_v4(const char *str, const float v[4])
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], float t)
Definition math_vector.c:45
MINLINE double dot_v3v3_db(const double a[3], const double b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void normal_short_to_float_v3(float out[3], const short in[3])
void msub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, float f, int size)
MINLINE void copy_v3_v3_int(int r[3], const int a[3])
void copy_vn_fl(float *array_tar, int size, float val)
MINLINE bool compare_v3v3_relative(const float v1[3], const float v2[3], float limit, int max_ulps) ATTR_WARN_UNUSED_RESULT
void project_v3_v3v3(float out[3], const float p[3], const float v_proj[3])
void interp_v3_v3v3_slerp_safe(float target[3], const float a[3], const float b[3], float t)
Definition math_vector.c:99
MINLINE void copy_v2_v2_char(char r[2], const char a[2])
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
float cos_v2v2v2(const float p1[2], const float p2[2], const float p3[2]) ATTR_WARN_UNUSED_RESULT
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])
void project_plane_v3_v3v3(float out[3], const float p[3], const float v_plane[3])
void project_plane_normalized_v3_v3v3(float out[3], const float p[3], const float v_plane[3])
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])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
Definition math_vector.c:36
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])
void rotate_normalized_v3_v3v3fl(float out[3], const float p[3], const float axis[3], float angle)
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
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])
MINLINE int len_manhattan_v2v2_int(const int a[2], const int b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v4_v4_short(short r[4], const short a[4])
float normalize_vn_vn(float *array_tar, const float *array_src, int size)
MINLINE void add_v2_fl(float r[2], float f)
float angle_on_axis_v3v3v3_v3(const float v1[3], const float v2[3], const float v3[3], const float axis[3]) ATTR_WARN_UNUSED_RESULT
float angle_signed_on_axis_v3v3_v3(const float v1[3], const float v2[3], const float axis[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void zero_v3_int(int r[3])
bool is_finite_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE bool is_zero_v4_db(const double v[4]) ATTR_WARN_UNUSED_RESULT
void ortho_v3_v3(float out[3], const float v[3])
MINLINE bool equals_v4v4(const float v1[4], const float v2[4]) ATTR_WARN_UNUSED_RESULT
MINLINE bool equals_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_m4_v3_row_z(const float M[4][4], const float a[3]) ATTR_WARN_UNUSED_RESULT
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])
void interp_v4_v4v4v4(float p[4], const float v1[4], const float v2[4], const float v3[4], const float w[3])
MINLINE void copy_v3_uchar(unsigned char r[3], unsigned char a)
void flip_v2_v2v2(float v[2], const float v1[2], const float v2[2])
MINLINE void negate_v4_v4(float r[4], const float a[4])
double dot_vn_vn(const float *array_src_a, const float *array_src_b, int size) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3_v3_length(float r[3], const float a[3], float unit_length)
void copy_vn_ushort(unsigned short *array_tar, int size, unsigned short val)
MINLINE void copy_v2_v2_short(short r[2], const short a[2])
void range_vn_i(int *array_tar, int size, int start)
MINLINE float len_manhattan_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void negate_v3(float r[3])
MINLINE void sub_v2db_v2fl_v2fl(double r[2], const float a[2], const float b[2])
MINLINE bool compare_v2v2(const float v1[2], const float v2[2], float limit) ATTR_WARN_UNUSED_RESULT
MINLINE void clamp_v2(float vec[2], float min, float max)
MINLINE float dot_m3_v3_row_z(const float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT
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])
float angle_signed_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float cross_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3fl_v3db(float r[3], const double a[3])
void minmax_v4v4_v4(float min[4], float max[4], const float vec[4])
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 void invert_v3(float r[3])
void mid_v2_v2v2(float r[2], const float a[2], const float b[2])
void print_vn(const char *str, const float v[], int n)
MINLINE float normalize_v3_v3(float r[3], const float a[3])
void copy_vn_i(int *array_tar, int size, int val)
MINLINE float len_squared_v4v4(const float a[4], const float b[4]) ATTR_WARN_UNUSED_RESULT
MINLINE double len_v2_db(const double v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void star_m3_v3(float rmat[3][3], const float a[3])
MINLINE bool compare_v3v3(const float v1[3], const float v2[3], float limit) ATTR_WARN_UNUSED_RESULT
MINLINE float len_manhattan_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
void mul_vn_vn(float *array_tar, const float *array_src, int size)
MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void negate_v3_short(short r[3])
void ortho_v2_v2(float out[2], const float v[2])
MINLINE void copy_v2fl_v2db(float r[2], const double a[2])
void negate_vn_vn(float *array_tar, const float *array_src, int size)
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE float line_point_side_v2(const float l1[2], const float l2[2], const float pt[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3_int(int r[3], const int a[3], const int b[3])
MINLINE bool is_zero_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
void copy_vn_uchar(unsigned char *array_tar, int size, unsigned char val)
MINLINE void zero_v2(float r[2])
MINLINE void copy_v4fl_v4db(float r[4], const double a[4])
MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3])
MINLINE void copy_v4_v4_int(int r[4], const int a[4])
void range_vn_u(unsigned int *array_tar, int size, unsigned int start)
MINLINE float len_manhattan_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
void angle_poly_v3(float *angles, const float *verts[3], int len)
MINLINE float len_manhattan_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
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 abs_v4_v4(float r[4], const float a[4])
bool is_finite_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE double len_v2v2_db(const double v1[2], const double v2[2]) ATTR_WARN_UNUSED_RESULT
void rotate_v2_v2fl(float r[2], const float p[2], float angle)
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void abs_v2_v2(float r[2], const float a[2])
void ortho_basis_v3v3_v3(float r_n1[3], float r_n2[3], const float n[3])
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 bool compare_len_v3v3(const float v1[3], const float v2[3], float limit) ATTR_WARN_UNUSED_RESULT
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 void zero_v3(float r[3])
void mul_vn_vn_fl(float *array_tar, const float *array_src, int size, float f)
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])
MINLINE void clamp_v3_v3v3(float vec[3], const float min[3], const float max[3])
void interp_v3_v3v3_uchar(unsigned char target[3], const unsigned char a[3], const unsigned char b[3], float t)
float angle_v3v3v3(const float a[3], const float b[3], const float c[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v4_v4_db(double r[4], const double a[4])
MINLINE void negate_v3_db(double r[3])
void add_vn_vn_d(double *array_tar, const double *array_src, int size)
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v4_fl(float r[4], float f)
void project_plane_v2_v2v2(float out[2], const float p[2], const float v_plane[2])
MINLINE double normalize_v3_length_db(double n[3], double unit_length)
void interp_v3_v3v3_char(char target[3], const char a[3], const char b[3], float t)
MINLINE bool compare_v4v4_relative(const float v1[4], const float v2[4], float limit, int max_ulps) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f)
MINLINE void add_v2_v2_int(int r[2], const int a[2])
void mul_vn_db(double *array_tar, int size, double f)
void interp_v2_v2v2_db(double target[2], const double a[2], const double b[2], double t)
float angle_normalized_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE bool equals_v2v2_int(const int v1[2], const int v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void add_v2_v2_db(double r[2], const double a[2])
MINLINE float dot_m4_v3_row_x(const float M[4][4], const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE void invert_v2(float r[2])
void project_v3_v3v3_db(double out[3], const double p[3], const double v_proj[3])
MINLINE int len_manhattan_v2_int(const int v[2]) ATTR_WARN_UNUSED_RESULT
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)
void interp_v3_v3v3v3_uv(float p[3], const float v1[3], const float v2[3], const float v3[3], const float uv[2])
void mul_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, int size)
MINLINE float normalize_v3_length(float n[3], float unit_length)
void dist_ensure_v3_v3fl(float v1[3], const float v2[3], float dist)
MINLINE bool compare_v2v2_relative(const float v1[2], const float v2[2], float limit, int max_ulps) ATTR_WARN_UNUSED_RESULT
MINLINE bool compare_size_v3v3(const float v1[3], const float v2[3], float limit) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2_uchar(unsigned char r[2], const unsigned char a[2])
void interp_vn_vn(float *array_tar, const float *array_src, float t, int size)
MINLINE void zero_v3_db(double r[3])
MINLINE float dot_m4_v3_row_y(const float M[4][4], const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3(float n[3])
MINLINE void normal_float_to_short_v2(short out[2], const float in[2])
void sub_vn_vn(float *array_tar, const float *array_src, int size)
MINLINE void sub_v4_v4v4(float r[4], const float a[4], const float b[4])
MINLINE void negate_v4(float r[4])
void mid_v3_v3v3v3(float v[3], const float v1[3], const float v2[3], const float v3[3])
void project_v2_v2v2(float out[2], const float p[2], const float v_proj[2])
void interp_v4_v4v4_uchar(unsigned char target[4], const unsigned char a[4], const unsigned char b[4], float t)
MINLINE double cross_v2v2_db(const double a[2], const double b[2]) ATTR_WARN_UNUSED_RESULT
void bisect_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
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])
unsigned char uchar
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.
Definition btQuadWord.h:117
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
local_group_size(16, 16) .push_constant(Type b
int len
#define str(s)
static float verts[][3]
#define M
#define min(a, b)
Definition sort.c:32