Vuo 2.4.2
Loading...
Searching...
No Matches
VuoPoint2d.h
Go to the documentation of this file.
1
10#pragma once
11
12#include "VuoReal.h"
13#include <math.h>
14#include <stdbool.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
31typedef float __attribute__((ext_vector_type(2))) VuoPoint2d;
32
34typedef const struct VuoList_VuoPoint2d_struct { void *l; } * VuoList_VuoPoint2d;
35#define VuoList_VuoPoint2d_TYPE_DEFINED
37
38VuoPoint2d VuoPoint2d_makeFromJson(struct json_object * js);
39struct json_object * VuoPoint2d_getJson(const VuoPoint2d value);
40char * VuoPoint2d_getSummary(const VuoPoint2d value);
41
42#define VuoPoint2d_SUPPORTS_COMPARISON
43bool VuoPoint2d_areEqual(const VuoPoint2d value1, const VuoPoint2d value2);
44bool VuoPoint2d_areEqualListWithinTolerance(VuoList_VuoPoint2d values, VuoPoint2d tolerance);
45bool VuoPoint2d_isLessThan(const VuoPoint2d a, const VuoPoint2d b);
46bool VuoPoint2d_isWithinRange(VuoPoint2d value, VuoPoint2d minimum, VuoPoint2d maximum);
47
48VuoPoint2d VuoPoint2d_minList(VuoList_VuoPoint2d values, VuoInteger *outputPosition);
49VuoPoint2d VuoPoint2d_maxList(VuoList_VuoPoint2d values, VuoInteger *outputPosition);
50VuoPoint2d VuoPoint2d_average(VuoList_VuoPoint2d values);
51
52VuoPoint2d VuoPoint2d_random(const VuoPoint2d minimum, const VuoPoint2d maximum);
53VuoPoint2d VuoPoint2d_randomWithState(unsigned short state[3], const VuoPoint2d minimum, const VuoPoint2d maximum);
54
56
59char * VuoPoint2d_getString(const VuoPoint2d value);
60void VuoPoint2d_retain(VuoPoint2d value);
61void VuoPoint2d_release(VuoPoint2d value);
63
69static inline VuoPoint2d VuoPoint2d_make(float x, float y) __attribute__((const));
70static inline VuoPoint2d VuoPoint2d_make(float x, float y)
71{
72 return (VuoPoint2d){x, y};
73}
74
80static inline VuoPoint2d VuoPoint2d_makeFromArray(float *f)
81{
82 return (VuoPoint2d){ f[0], f[1] };
83}
84
88static inline void VuoPoint2d_setArray(float *f, VuoPoint2d p)
89{
90 f[0] = p.x;
91 f[1] = p.y;
92}
93
97static inline VuoPoint2d VuoPoint2d_add(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
98static inline VuoPoint2d VuoPoint2d_add(VuoPoint2d a, VuoPoint2d b)
99{
100 return a + b;
101}
102
106static inline VuoPoint2d VuoPoint2d_subtract(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
107static inline VuoPoint2d VuoPoint2d_subtract(VuoPoint2d a, VuoPoint2d b)
108{
109 return a - b;
110}
111
112
116static inline float VuoPoint2d_squaredMagnitude(VuoPoint2d a) __attribute__((const));
117static inline float VuoPoint2d_squaredMagnitude(VuoPoint2d a)
118{
119 return (a.x*a.x + a.y*a.y);
120}
121
125static inline VuoPoint2d VuoPoint2d_divide(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
126static inline VuoPoint2d VuoPoint2d_divide(VuoPoint2d a, VuoPoint2d b)
127{
128 return a / b;
129}
130
134static inline VuoPoint2d VuoPoint2d_makeNonzero(VuoPoint2d a) __attribute__((const));
135static inline VuoPoint2d VuoPoint2d_makeNonzero(VuoPoint2d a)
136{
137 if (fabs(a.x) < 0.000001)
138 a.x = copysign(0.000001, a.x);
139 if (fabs(a.y) < 0.000001)
140 a.y = copysign(0.000001, a.y);
141 return a;
142}
143
147static inline float VuoPoint2d_magnitude(VuoPoint2d a) __attribute__((const));
148static inline float VuoPoint2d_magnitude(VuoPoint2d a)
149{
150 return sqrtf(a.x*a.x + a.y*a.y);
151}
152
156static inline VuoPoint2d VuoPoint2d_normalize(VuoPoint2d a) __attribute__((const));
157static inline VuoPoint2d VuoPoint2d_normalize(VuoPoint2d a)
158{
159 return a / sqrtf(a.x * a.x + a.y * a.y);
160}
161
165static inline VuoPoint2d VuoPoint2d_multiply(VuoPoint2d a, float b) __attribute__((const));
166static inline VuoPoint2d VuoPoint2d_multiply(VuoPoint2d a, float b)
167{
168 return a * b;
169}
170
174static inline float VuoPoint2d_dotProduct(VuoPoint2d u, VuoPoint2d v) __attribute__((const));
175static inline float VuoPoint2d_dotProduct(VuoPoint2d u, VuoPoint2d v)
176{
177 return u.x*v.x+u.y*v.y;
178}
179
183static inline float VuoPoint2d_distance(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
184static inline float VuoPoint2d_distance(VuoPoint2d a, VuoPoint2d b)
185{
186 return sqrtf( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );
187}
188
192static inline VuoPoint2d VuoPoint2d_min(const VuoPoint2d l, const VuoPoint2d r) __attribute__((const));
193static inline VuoPoint2d VuoPoint2d_min(const VuoPoint2d l, const VuoPoint2d r)
194{
195 return (VuoPoint2d){
196 fminf(l.x, r.x),
197 fminf(l.y, r.y)};
198}
199
203static inline VuoPoint2d VuoPoint2d_max(const VuoPoint2d l, const VuoPoint2d r) __attribute__((const));
204static inline VuoPoint2d VuoPoint2d_max(const VuoPoint2d l, const VuoPoint2d r)
205{
206 return (VuoPoint2d){
207 fmaxf(l.x, r.x),
208 fmaxf(l.y, r.y)};
209}
210
214static inline VuoPoint2d VuoPoint2d_lerp(VuoPoint2d a, VuoPoint2d b, float t) __attribute__((const));
215static inline VuoPoint2d VuoPoint2d_lerp(VuoPoint2d a, VuoPoint2d b, float t)
216{
217 return a * (1 - t) + b * t;
218}
219
223static inline VuoPoint2d VuoPoint2d_scale(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
224static inline VuoPoint2d VuoPoint2d_scale(VuoPoint2d a, VuoPoint2d b)
225{
226 return a * b;
227}
228
232static inline VuoPoint2d VuoPoint2d_spring(VuoReal timeSinceDrop, VuoPoint2d dropPosition, VuoPoint2d restingPosition, VuoReal period, VuoReal damping)
233{
234 return (VuoPoint2d){
235 (float)VuoReal_spring(timeSinceDrop, dropPosition.x, restingPosition.x, period, damping),
236 (float)VuoReal_spring(timeSinceDrop, dropPosition.y, restingPosition.y, period, damping)
237 };
238}
239
243static inline VuoPoint2d VuoPoint2d_clamp(VuoPoint2d point, VuoReal limitA, VuoReal limitB)
244{
245 return (VuoPoint2d){
246 (float)VuoReal_clamp(point.x, limitA, limitB),
247 (float)VuoReal_clamp(point.y, limitA, limitB)
248 };
249}
250
254static inline VuoPoint2d VuoPoint2d_clampn(VuoPoint2d point, VuoPoint2d limitA, VuoPoint2d limitB)
255{
256 return (VuoPoint2d){
257 (float)VuoReal_clamp(point.x, limitA.x, limitB.x),
258 (float)VuoReal_clamp(point.y, limitA.y, limitB.y)
259 };
260}
261
271static inline VuoPoint2d VuoPoint2d_bezier3(VuoPoint2d p0, VuoPoint2d p1, VuoPoint2d p2, VuoPoint2d p3, VuoReal time)
272{
273 return (VuoPoint2d) {
274 (float)VuoReal_bezier3(p0.x,p1.x,p2.x,p3.x,time),
275 (float)VuoReal_bezier3(p0.y,p1.y,p2.y,p3.y,time)
276 };
277}
278
282static inline VuoPoint2d VuoPoint2d_snap(VuoPoint2d a, VuoPoint2d center, VuoPoint2d snap)
283{
284 VuoPoint2d nonzeroSnap = VuoPoint2d_makeNonzero(snap);
285 return (VuoPoint2d) {
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 };
289}
290
295#ifdef __cplusplus
296}
297#endif