31typedef float __attribute__((ext_vector_type(2))) VuoPoint2d;
33#define VuoPoint2d_SUPPORTS_COMPARISON
66static inline VuoPoint2d
VuoPoint2d_make(
float x,
float y) __attribute__((
const));
69 return (VuoPoint2d){x, y};
79 return (VuoPoint2d){ f[0], f[1] };
94static inline VuoPoint2d
VuoPoint2d_add(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
103static inline VuoPoint2d
VuoPoint2d_subtract(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
116 return (a.x*a.x + a.y*a.y);
122static inline VuoPoint2d
VuoPoint2d_divide(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
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);
147 return sqrtf(a.x*a.x + a.y*a.y);
156 return a / sqrtf(a.x * a.x + a.y * a.y);
174 return u.x*v.x+u.y*v.y;
183 return sqrtf( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );
189static inline VuoPoint2d
VuoPoint2d_min(
const VuoPoint2d l,
const VuoPoint2d r) __attribute__((
const));
200static inline VuoPoint2d
VuoPoint2d_max(
const VuoPoint2d l,
const VuoPoint2d r) __attribute__((
const));
211static inline VuoPoint2d
VuoPoint2d_lerp(VuoPoint2d a, VuoPoint2d b,
float t) __attribute__((
const));
214 return a * (1 - t) + b * t;
220static inline VuoPoint2d
VuoPoint2d_scale(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
232 (float)
VuoReal_spring(timeSinceDrop, dropPosition.x, restingPosition.x, period, damping),
233 (float)
VuoReal_spring(timeSinceDrop, dropPosition.y, restingPosition.y, period, damping)
251static inline VuoPoint2d
VuoPoint2d_clampn(VuoPoint2d point, VuoPoint2d limitA, VuoPoint2d limitB)
270 return (VuoPoint2d) {
279static inline VuoPoint2d
VuoPoint2d_snap(VuoPoint2d a, VuoPoint2d center, VuoPoint2d 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 )