Vuo  2.4.0
VuoPoint4d.h
Go to the documentation of this file.
1
10#pragma once
11
12#include <math.h>
13#include "VuoPoint3d.h"
14#include "VuoReal.h"
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
31typedef float __attribute__((ext_vector_type(4))) VuoPoint4d;
32
34typedef const struct VuoList_VuoPoint4d_struct { void *l; } * VuoList_VuoPoint4d;
35#define VuoList_VuoPoint4d_TYPE_DEFINED
37
38VuoPoint4d VuoPoint4d_makeFromJson(struct json_object * js);
39struct json_object * VuoPoint4d_getJson(const VuoPoint4d value);
40char * VuoPoint4d_getSummary(const VuoPoint4d value);
41
42#define VuoPoint4d_SUPPORTS_COMPARISON
43bool VuoPoint4d_areEqual(const VuoPoint4d value1, const VuoPoint4d value2);
44bool VuoPoint4d_areEqualListWithinTolerance(VuoList_VuoPoint4d values, VuoPoint4d tolerance);
45bool VuoPoint4d_isLessThan(const VuoPoint4d a, const VuoPoint4d b);
46bool VuoPoint4d_isWithinRange(VuoPoint4d value, VuoPoint4d minimum, VuoPoint4d maximum);
47
48VuoPoint4d VuoPoint4d_minList(VuoList_VuoPoint4d values, VuoInteger *outputPosition);
49VuoPoint4d VuoPoint4d_maxList(VuoList_VuoPoint4d values, VuoInteger *outputPosition);
50VuoPoint4d VuoPoint4d_average(VuoList_VuoPoint4d values);
51
52VuoPoint4d VuoPoint4d_random(const VuoPoint4d minimum, const VuoPoint4d maximum);
53VuoPoint4d VuoPoint4d_randomWithState(unsigned short state[3], const VuoPoint4d minimum, const VuoPoint4d maximum);
54
56
59VuoPoint4d VuoPoint4d_makeFromString(const char *str);
60char * VuoPoint4d_getString(const VuoPoint4d value);
61void VuoPoint4d_retain(VuoPoint4d value);
62void VuoPoint4d_release(VuoPoint4d value);
64
68static inline VuoPoint4d VuoPoint4d_make(float x, float y, float z, float w) __attribute__((const));
69static inline VuoPoint4d VuoPoint4d_make(float x, float y, float z, float w)
70{
71 return (VuoPoint4d){x, y, z, w};
72}
73
79static inline VuoPoint4d VuoPoint4d_makeFromArray(float *f)
80{
81 return (VuoPoint4d){ f[0], f[1], f[2], f[3] };
82}
83
89static inline void VuoPoint4d_setArray(float *f, VuoPoint4d p)
90{
91 f[0] = p.x;
92 f[1] = p.y;
93 f[2] = p.z;
94 f[3] = p.w;
95}
96
102static inline VuoPoint3d VuoPoint4d_to3d(VuoPoint4d p) __attribute__((const));
103static inline VuoPoint3d VuoPoint4d_to3d(VuoPoint4d p)
104{
105 return (VuoPoint3d){p.x, p.y, p.z};
106}
107
113static inline VuoPoint4d VuoPoint3d_to4d1(VuoPoint3d p) __attribute__((const));
114static inline VuoPoint4d VuoPoint3d_to4d1(VuoPoint3d p)
115{
116 return (VuoPoint4d){p.x, p.y, p.z, 1};
117}
118
122static inline VuoPoint4d VuoPoint4d_crossProduct(VuoPoint4d u, VuoPoint4d v) __attribute__((const));
123static inline VuoPoint4d VuoPoint4d_crossProduct(VuoPoint4d u, VuoPoint4d v)
124{
125 return (VuoPoint4d){
126 u.y*v.z - u.z*v.y,
127 u.z*v.x - u.x*v.z,
128 u.x*v.y - u.y*v.x,
129 1.
130 };
131}
132
136static inline float VuoPoint4d_dotProduct(VuoPoint4d u, VuoPoint4d v) __attribute__((const));
137static inline float VuoPoint4d_dotProduct(VuoPoint4d u, VuoPoint4d v)
138{
139 return u.x*v.x + u.y*v.y + u.z*v.z + u.w*v.w;
140}
141
142
146static inline float VuoPoint4d_magnitude(VuoPoint4d a) __attribute__((const));
147static inline float VuoPoint4d_magnitude(VuoPoint4d a)
148{
149 return sqrtf(a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w);
150}
151
155static inline VuoPoint4d VuoPoint4d_normalize3d(VuoPoint4d a) __attribute__((const));
156static inline VuoPoint4d VuoPoint4d_normalize3d(VuoPoint4d a)
157{
158 VuoPoint3d p = a.xyz / sqrtf(a.x * a.x + a.y * a.y + a.z * a.z);
159 return (VuoPoint4d){p.x, p.y, p.z, a.w};
160}
161
165static inline VuoPoint4d VuoPoint4d_normalize(VuoPoint4d a) __attribute__((const));
166static inline VuoPoint4d VuoPoint4d_normalize(VuoPoint4d a)
167{
168 return a / sqrtf(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w);
169}
170
174static inline VuoPoint4d VuoPoint4d_add(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
175static inline VuoPoint4d VuoPoint4d_add(VuoPoint4d a, VuoPoint4d b)
176{
177 return a + b;
178}
179
183static inline VuoPoint4d VuoPoint4d_subtract(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
184static inline VuoPoint4d VuoPoint4d_subtract(VuoPoint4d a, VuoPoint4d b)
185{
186 return a - b;
187}
188
192static inline float VuoPoint4d_squaredMagnitude(VuoPoint4d a) __attribute__((const));
193static inline float VuoPoint4d_squaredMagnitude(VuoPoint4d a)
194{
195 return (a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w);
196}
197
198
202static inline VuoPoint4d VuoPoint4d_divide(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
203static inline VuoPoint4d VuoPoint4d_divide(VuoPoint4d a, VuoPoint4d b)
204{
205 return a / b;
206}
207
211static inline VuoPoint4d VuoPoint4d_multiply(VuoPoint4d a, float b) __attribute__((const));
212static inline VuoPoint4d VuoPoint4d_multiply(VuoPoint4d a, float b)
213{
214 return a * b;
215}
216
220static inline VuoPoint4d VuoPoint4d_scale(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
221static inline VuoPoint4d VuoPoint4d_scale(VuoPoint4d a, VuoPoint4d b)
222{
223 return a * b;
224}
225
229static inline VuoPoint4d VuoPoint4d_makeNonzero(VuoPoint4d a) __attribute__((const));
230static inline VuoPoint4d VuoPoint4d_makeNonzero(VuoPoint4d a)
231{
232 if (fabs(a.x) < 0.000001)
233 a.x = copysign(0.000001, a.x);
234 if (fabs(a.y) < 0.000001)
235 a.y = copysign(0.000001, a.y);
236 if (fabs(a.z) < 0.000001)
237 a.z = copysign(0.000001, a.z);
238 if (fabs(a.w) < 0.000001)
239 a.w = copysign(0.000001, a.w);
240 return a;
241}
242
246static inline float VuoPoint4d_distance(VuoPoint4d a, VuoPoint4d b) __attribute__((const));
247static inline float VuoPoint4d_distance(VuoPoint4d a, VuoPoint4d b)
248{
249 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));
250}
251
255static inline VuoPoint4d VuoPoint4d_min(const VuoPoint4d l, const VuoPoint4d r) __attribute__((const));
256static inline VuoPoint4d VuoPoint4d_min(const VuoPoint4d l, const VuoPoint4d r)
257{
258 return (VuoPoint4d){
259 fminf(l.x, r.x),
260 fminf(l.y, r.y),
261 fminf(l.z, r.z),
262 fminf(l.w, r.w)};
263}
264
268static inline VuoPoint4d VuoPoint4d_max(const VuoPoint4d l, const VuoPoint4d r) __attribute__((const));
269static inline VuoPoint4d VuoPoint4d_max(const VuoPoint4d l, const VuoPoint4d r)
270{
271 return (VuoPoint4d){
272 fmaxf(l.x, r.x),
273 fmaxf(l.y, r.y),
274 fmaxf(l.z, r.z),
275 fmaxf(l.w, r.w)};
276}
277
281static inline VuoPoint4d VuoPoint4d_snap(VuoPoint4d a, VuoPoint4d center, VuoPoint4d snap) __attribute__((const));
282static inline VuoPoint4d VuoPoint4d_snap(VuoPoint4d a, VuoPoint4d center, VuoPoint4d snap)
283{
284 VuoPoint4d nonzeroSnap = VuoPoint4d_makeNonzero(snap);
285 return (VuoPoint4d) {
286 center.x + nonzeroSnap.x * (int)round((a.x-center.x) / nonzeroSnap.x),
287 center.y + nonzeroSnap.y * (int)round((a.y-center.y) / nonzeroSnap.y),
288 center.z + nonzeroSnap.z * (int)round((a.z-center.z) / nonzeroSnap.z),
289 center.w + nonzeroSnap.w * (int)round((a.w-center.w) / nonzeroSnap.w)
290 };
291}
292
293
297static inline VuoPoint4d VuoPoint4d_clampn(VuoPoint4d point, VuoPoint4d limitA, VuoPoint4d limitB)
298{
299 return (VuoPoint4d){
300 (float)VuoReal_clamp(point.x, limitA.x, limitB.x),
301 (float)VuoReal_clamp(point.y, limitA.y, limitB.y),
302 (float)VuoReal_clamp(point.z, limitA.z, limitB.z),
303 (float)VuoReal_clamp(point.w, limitA.w, limitB.w)
304 };
305}
306
311#ifdef __cplusplus
312}
313#endif