Vuo 2.4.4
Loading...
Searching...
No Matches
VuoPoint4d.h
Go to the documentation of this file.
1
10#ifndef VuoPoint4d_h
11#define VuoPoint4d_h
12
13#include <math.h>
14#include "VuoPoint3d.h"
15#include "VuoReal.h"
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
32typedef float __attribute__((ext_vector_type(4))) VuoPoint4d;
33
34#define VuoPoint4d_SUPPORTS_COMPARISON
35#include "VuoList_VuoPoint4d.h"
36
37VuoPoint4d VuoPoint4d_makeFromJson(struct json_object * js);
38struct json_object * VuoPoint4d_getJson(const VuoPoint4d value);
39char * VuoPoint4d_getSummary(const VuoPoint4d value);
40
41bool VuoPoint4d_areEqual(const VuoPoint4d value1, const VuoPoint4d value2);
42bool VuoPoint4d_areEqualListWithinTolerance(VuoList_VuoPoint4d values, VuoPoint4d tolerance);
43bool VuoPoint4d_isLessThan(const VuoPoint4d a, const VuoPoint4d b);
44bool VuoPoint4d_isWithinRange(VuoPoint4d value, VuoPoint4d minimum, VuoPoint4d maximum);
45
46VuoPoint4d VuoPoint4d_minList(VuoList_VuoPoint4d values, VuoInteger *outputPosition);
47VuoPoint4d VuoPoint4d_maxList(VuoList_VuoPoint4d values, VuoInteger *outputPosition);
48VuoPoint4d VuoPoint4d_average(VuoList_VuoPoint4d values);
49
50VuoPoint4d VuoPoint4d_random(const VuoPoint4d minimum, const VuoPoint4d maximum);
51VuoPoint4d VuoPoint4d_randomWithState(unsigned short state[3], const VuoPoint4d minimum, const VuoPoint4d maximum);
52
54
57char * VuoPoint4d_getString(const VuoPoint4d value);
58void VuoPoint4d_retain(VuoPoint4d value);
59void VuoPoint4d_release(VuoPoint4d value);
61
65static inline VuoPoint4d VuoPoint4d_make(float x, float y, float z, float w) __attribute__((const));
66static inline VuoPoint4d VuoPoint4d_make(float x, float y, float z, float w)
67{
68 return (VuoPoint4d){x, y, z, w};
69}
70
76static inline VuoPoint4d VuoPoint4d_makeFromArray(float *f)
77{
78 return (VuoPoint4d){ f[0], f[1], f[2], f[3] };
79}
80
86static inline void VuoPoint4d_setArray(float *f, VuoPoint4d p)
87{
88 f[0] = p.x;
89 f[1] = p.y;
90 f[2] = p.z;
91 f[3] = p.w;
92}
93
99static inline VuoPoint3d VuoPoint4d_to3d(VuoPoint4d p) __attribute__((const));
100static inline VuoPoint3d VuoPoint4d_to3d(VuoPoint4d p)
101{
102 return (VuoPoint3d){p.x, p.y, p.z};
103}
104
110static inline VuoPoint4d VuoPoint3d_to4d1(VuoPoint3d p) __attribute__((const));
111static inline VuoPoint4d VuoPoint3d_to4d1(VuoPoint3d p)
112{
113 return (VuoPoint4d){p.x, p.y, p.z, 1};
114}
115
119static inline VuoPoint4d VuoPoint4d_crossProduct(VuoPoint4d u, VuoPoint4d v) __attribute__((const));
120static inline VuoPoint4d VuoPoint4d_crossProduct(VuoPoint4d u, VuoPoint4d v)
121{
122 return (VuoPoint4d){
123 u.y*v.z - u.z*v.y,
124 u.z*v.x - u.x*v.z,
125 u.x*v.y - u.y*v.x,
126 1.
127 };
128}
129
133static inline float VuoPoint4d_dotProduct(VuoPoint4d u, VuoPoint4d v) __attribute__((const));
134static inline float VuoPoint4d_dotProduct(VuoPoint4d u, VuoPoint4d v)
135{
136 return u.x*v.x + u.y*v.y + u.z*v.z + u.w*v.w;
137}
138
139
143static inline float VuoPoint4d_magnitude(VuoPoint4d a) __attribute__((const));
144static inline float VuoPoint4d_magnitude(VuoPoint4d a)
145{
146 return sqrtf(a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w);
147}
148
152static inline VuoPoint4d VuoPoint4d_normalize3d(VuoPoint4d a) __attribute__((const));
153static inline VuoPoint4d VuoPoint4d_normalize3d(VuoPoint4d a)
154{
155 VuoPoint3d p = a.xyz / sqrtf(a.x * a.x + a.y * a.y + a.z * a.z);
156 return (VuoPoint4d){p.x, p.y, p.z, a.w};
157}
158
162static inline VuoPoint4d VuoPoint4d_normalize(VuoPoint4d a) __attribute__((const));
163static inline VuoPoint4d VuoPoint4d_normalize(VuoPoint4d a)
164{
165 return a / sqrtf(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w);
166}
167
171static inline VuoPoint4d VuoPoint4d_add(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
172static inline VuoPoint4d VuoPoint4d_add(VuoPoint4d a, VuoPoint4d b)
173{
174 return a + b;
175}
176
180static inline VuoPoint4d VuoPoint4d_subtract(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
181static inline VuoPoint4d VuoPoint4d_subtract(VuoPoint4d a, VuoPoint4d b)
182{
183 return a - b;
184}
185
189static inline float VuoPoint4d_squaredMagnitude(VuoPoint4d a) __attribute__((const));
190static inline float VuoPoint4d_squaredMagnitude(VuoPoint4d a)
191{
192 return (a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w);
193}
194
195
199static inline VuoPoint4d VuoPoint4d_divide(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
200static inline VuoPoint4d VuoPoint4d_divide(VuoPoint4d a, VuoPoint4d b)
201{
202 return a / b;
203}
204
208static inline VuoPoint4d VuoPoint4d_multiply(VuoPoint4d a, float b) __attribute__((const));
209static inline VuoPoint4d VuoPoint4d_multiply(VuoPoint4d a, float b)
210{
211 return a * b;
212}
213
217static inline VuoPoint4d VuoPoint4d_scale(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
218static inline VuoPoint4d VuoPoint4d_scale(VuoPoint4d a, VuoPoint4d b)
219{
220 return a * b;
221}
222
226static inline VuoPoint4d VuoPoint4d_makeNonzero(VuoPoint4d a) __attribute__((const));
227static inline VuoPoint4d VuoPoint4d_makeNonzero(VuoPoint4d a)
228{
229 if (fabs(a.x) < 0.000001)
230 a.x = copysign(0.000001, a.x);
231 if (fabs(a.y) < 0.000001)
232 a.y = copysign(0.000001, a.y);
233 if (fabs(a.z) < 0.000001)
234 a.z = copysign(0.000001, a.z);
235 if (fabs(a.w) < 0.000001)
236 a.w = copysign(0.000001, a.w);
237 return a;
238}
239
243static inline float VuoPoint4d_distance(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
244static inline float VuoPoint4d_distance(VuoPoint4d a, VuoPoint4d b)
245{
246 return sqrtf((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) + (a.z-b.z)*(a.z-b.z) + (a.w-b.w)*(a.w-b.w));
247}
248
252static inline VuoPoint4d VuoPoint4d_min(const VuoPoint4d l, const VuoPoint4d r) __attribute__((const));
253static inline VuoPoint4d VuoPoint4d_min(const VuoPoint4d l, const VuoPoint4d r)
254{
255 return (VuoPoint4d){
256 fminf(l.x, r.x),
257 fminf(l.y, r.y),
258 fminf(l.z, r.z),
259 fminf(l.w, r.w)};
260}
261
265static inline VuoPoint4d VuoPoint4d_max(const VuoPoint4d l, const VuoPoint4d r) __attribute__((const));
266static inline VuoPoint4d VuoPoint4d_max(const VuoPoint4d l, const VuoPoint4d r)
267{
268 return (VuoPoint4d){
269 fmaxf(l.x, r.x),
270 fmaxf(l.y, r.y),
271 fmaxf(l.z, r.z),
272 fmaxf(l.w, r.w)};
273}
274
278static inline VuoPoint4d VuoPoint4d_snap(VuoPoint4d a, VuoPoint4d center, VuoPoint4d snap) __attribute__((const));
279static inline VuoPoint4d VuoPoint4d_snap(VuoPoint4d a, VuoPoint4d center, VuoPoint4d snap)
280{
281 VuoPoint4d nonzeroSnap = VuoPoint4d_makeNonzero(snap);
282 return (VuoPoint4d) {
283 center.x + nonzeroSnap.x * (int)round((a.x-center.x) / nonzeroSnap.x),
284 center.y + nonzeroSnap.y * (int)round((a.y-center.y) / nonzeroSnap.y),
285 center.z + nonzeroSnap.z * (int)round((a.z-center.z) / nonzeroSnap.z),
286 center.w + nonzeroSnap.w * (int)round((a.w-center.w) / nonzeroSnap.w)
287 };
288}
289
290
294static inline VuoPoint4d VuoPoint4d_clampn(VuoPoint4d point, VuoPoint4d limitA, VuoPoint4d limitB)
295{
296 return (VuoPoint4d){
297 (float)VuoReal_clamp(point.x, limitA.x, limitB.x),
298 (float)VuoReal_clamp(point.y, limitA.y, limitB.y),
299 (float)VuoReal_clamp(point.z, limitA.z, limitB.z),
300 (float)VuoReal_clamp(point.w, limitA.w, limitB.w)
301 };
302}
303
308#ifdef __cplusplus
309}
310#endif
311
312#endif