Vuo 2.4.4
Loading...
Searching...
No Matches
VuoPoint2d.h
Go to the documentation of this file.
1
10#ifndef VuoPoint2d_h
11#define VuoPoint2d_h
12
13#include "VuoReal.h"
14#include <math.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
31typedef float __attribute__((ext_vector_type(2))) VuoPoint2d;
32
33#define VuoPoint2d_SUPPORTS_COMPARISON
34#include "VuoList_VuoPoint2d.h"
35
36VuoPoint2d VuoPoint2d_makeFromJson(struct json_object * js);
37struct json_object * VuoPoint2d_getJson(const VuoPoint2d value);
38char * VuoPoint2d_getSummary(const VuoPoint2d value);
39
40bool VuoPoint2d_areEqual(const VuoPoint2d value1, const VuoPoint2d value2);
41bool VuoPoint2d_areEqualListWithinTolerance(VuoList_VuoPoint2d values, VuoPoint2d tolerance);
42bool VuoPoint2d_isLessThan(const VuoPoint2d a, const VuoPoint2d b);
43bool VuoPoint2d_isWithinRange(VuoPoint2d value, VuoPoint2d minimum, VuoPoint2d maximum);
44
45VuoPoint2d VuoPoint2d_minList(VuoList_VuoPoint2d values, VuoInteger *outputPosition);
46VuoPoint2d VuoPoint2d_maxList(VuoList_VuoPoint2d values, VuoInteger *outputPosition);
47VuoPoint2d VuoPoint2d_average(VuoList_VuoPoint2d values);
48
49VuoPoint2d VuoPoint2d_random(const VuoPoint2d minimum, const VuoPoint2d maximum);
50VuoPoint2d VuoPoint2d_randomWithState(unsigned short state[3], const VuoPoint2d minimum, const VuoPoint2d maximum);
51
53
56char * VuoPoint2d_getString(const VuoPoint2d value);
57void VuoPoint2d_retain(VuoPoint2d value);
58void VuoPoint2d_release(VuoPoint2d value);
60
66static inline VuoPoint2d VuoPoint2d_make(float x, float y) __attribute__((const));
67static inline VuoPoint2d VuoPoint2d_make(float x, float y)
68{
69 return (VuoPoint2d){x, y};
70}
71
77static inline VuoPoint2d VuoPoint2d_makeFromArray(float *f)
78{
79 return (VuoPoint2d){ f[0], f[1] };
80}
81
85static inline void VuoPoint2d_setArray(float *f, VuoPoint2d p)
86{
87 f[0] = p.x;
88 f[1] = p.y;
89}
90
94static inline VuoPoint2d VuoPoint2d_add(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
95static inline VuoPoint2d VuoPoint2d_add(VuoPoint2d a, VuoPoint2d b)
96{
97 return a + b;
98}
99
103static inline VuoPoint2d VuoPoint2d_subtract(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
104static inline VuoPoint2d VuoPoint2d_subtract(VuoPoint2d a, VuoPoint2d b)
105{
106 return a - b;
107}
108
109
113static inline float VuoPoint2d_squaredMagnitude(VuoPoint2d a) __attribute__((const));
114static inline float VuoPoint2d_squaredMagnitude(VuoPoint2d a)
115{
116 return (a.x*a.x + a.y*a.y);
117}
118
122static inline VuoPoint2d VuoPoint2d_divide(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
123static inline VuoPoint2d VuoPoint2d_divide(VuoPoint2d a, VuoPoint2d b)
124{
125 return a / b;
126}
127
131static inline VuoPoint2d VuoPoint2d_makeNonzero(VuoPoint2d a) __attribute__((const));
132static inline VuoPoint2d VuoPoint2d_makeNonzero(VuoPoint2d a)
133{
134 if (fabs(a.x) < 0.000001)
135 a.x = copysign(0.000001, a.x);
136 if (fabs(a.y) < 0.000001)
137 a.y = copysign(0.000001, a.y);
138 return a;
139}
140
144static inline float VuoPoint2d_magnitude(VuoPoint2d a) __attribute__((const));
145static inline float VuoPoint2d_magnitude(VuoPoint2d a)
146{
147 return sqrtf(a.x*a.x + a.y*a.y);
148}
149
153static inline VuoPoint2d VuoPoint2d_normalize(VuoPoint2d a) __attribute__((const));
154static inline VuoPoint2d VuoPoint2d_normalize(VuoPoint2d a)
155{
156 return a / sqrtf(a.x * a.x + a.y * a.y);
157}
158
162static inline VuoPoint2d VuoPoint2d_multiply(VuoPoint2d a, float b) __attribute__((const));
163static inline VuoPoint2d VuoPoint2d_multiply(VuoPoint2d a, float b)
164{
165 return a * b;
166}
167
171static inline float VuoPoint2d_dotProduct(VuoPoint2d u, VuoPoint2d v) __attribute__((const));
172static inline float VuoPoint2d_dotProduct(VuoPoint2d u, VuoPoint2d v)
173{
174 return u.x*v.x+u.y*v.y;
175}
176
180static inline float VuoPoint2d_distance(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
181static inline float VuoPoint2d_distance(VuoPoint2d a, VuoPoint2d b)
182{
183 return sqrtf( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );
184}
185
189static inline VuoPoint2d VuoPoint2d_min(const VuoPoint2d l, const VuoPoint2d r) __attribute__((const));
190static inline VuoPoint2d VuoPoint2d_min(const VuoPoint2d l, const VuoPoint2d r)
191{
192 return (VuoPoint2d){
193 fminf(l.x, r.x),
194 fminf(l.y, r.y)};
195}
196
200static inline VuoPoint2d VuoPoint2d_max(const VuoPoint2d l, const VuoPoint2d r) __attribute__((const));
201static inline VuoPoint2d VuoPoint2d_max(const VuoPoint2d l, const VuoPoint2d r)
202{
203 return (VuoPoint2d){
204 fmaxf(l.x, r.x),
205 fmaxf(l.y, r.y)};
206}
207
211static inline VuoPoint2d VuoPoint2d_lerp(VuoPoint2d a, VuoPoint2d b, float t) __attribute__((const));
212static inline VuoPoint2d VuoPoint2d_lerp(VuoPoint2d a, VuoPoint2d b, float t)
213{
214 return a * (1 - t) + b * t;
215}
216
220static inline VuoPoint2d VuoPoint2d_scale(VuoPoint2d a, VuoPoint2d b) __attribute__((const));
221static inline VuoPoint2d VuoPoint2d_scale(VuoPoint2d a, VuoPoint2d b)
222{
223 return a * b;
224}
225
229static inline VuoPoint2d VuoPoint2d_spring(VuoReal timeSinceDrop, VuoPoint2d dropPosition, VuoPoint2d restingPosition, VuoReal period, VuoReal damping)
230{
231 return (VuoPoint2d){
232 (float)VuoReal_spring(timeSinceDrop, dropPosition.x, restingPosition.x, period, damping),
233 (float)VuoReal_spring(timeSinceDrop, dropPosition.y, restingPosition.y, period, damping)
234 };
235}
236
240static inline VuoPoint2d VuoPoint2d_clamp(VuoPoint2d point, VuoReal limitA, VuoReal limitB)
241{
242 return (VuoPoint2d){
243 (float)VuoReal_clamp(point.x, limitA, limitB),
244 (float)VuoReal_clamp(point.y, limitA, limitB)
245 };
246}
247
251static inline VuoPoint2d VuoPoint2d_clampn(VuoPoint2d point, VuoPoint2d limitA, VuoPoint2d limitB)
252{
253 return (VuoPoint2d){
254 (float)VuoReal_clamp(point.x, limitA.x, limitB.x),
255 (float)VuoReal_clamp(point.y, limitA.y, limitB.y)
256 };
257}
258
268static inline VuoPoint2d VuoPoint2d_bezier3(VuoPoint2d p0, VuoPoint2d p1, VuoPoint2d p2, VuoPoint2d p3, VuoReal time)
269{
270 return (VuoPoint2d) {
271 (float)VuoReal_bezier3(p0.x,p1.x,p2.x,p3.x,time),
272 (float)VuoReal_bezier3(p0.y,p1.y,p2.y,p3.y,time)
273 };
274}
275
279static inline VuoPoint2d VuoPoint2d_snap(VuoPoint2d a, VuoPoint2d center, VuoPoint2d snap)
280{
281 VuoPoint2d nonzeroSnap = VuoPoint2d_makeNonzero(snap);
282 return (VuoPoint2d) {
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 };
286}
287
292#ifdef __cplusplus
293}
294#endif
295
296#endif