31 typedef float __attribute__((ext_vector_type(2))) VuoPoint2d;
35 #define VuoList_VuoPoint2d_TYPE_DEFINED
42 #define VuoPoint2d_SUPPORTS_COMPARISON
70 static inline VuoPoint2d
VuoPoint2d_make(
float x,
float y) __attribute__((
const));
73 return (VuoPoint2d){x, y};
83 return (VuoPoint2d){ f[0], f[1] };
98 static inline VuoPoint2d
VuoPoint2d_add(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
107 static inline VuoPoint2d
VuoPoint2d_subtract(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
120 return (a.x*a.x + a.y*a.y);
126 static inline VuoPoint2d
VuoPoint2d_divide(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
138 if (fabs(a.x) < 0.000001)
139 a.x = copysign(0.000001, a.x);
140 if (fabs(a.y) < 0.000001)
141 a.y = copysign(0.000001, a.y);
151 return sqrtf(a.x*a.x + a.y*a.y);
160 return a / sqrtf(a.x * a.x + a.y * a.y);
166 static inline VuoPoint2d
VuoPoint2d_multiply(VuoPoint2d a,
float b) __attribute__((
const));
178 return u.x*v.x+u.y*v.y;
184 static inline float VuoPoint2d_distance(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
187 return sqrtf( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );
193 static inline VuoPoint2d
VuoPoint2d_min(
const VuoPoint2d l,
const VuoPoint2d r) __attribute__((
const));
204 static inline VuoPoint2d
VuoPoint2d_max(
const VuoPoint2d l,
const VuoPoint2d r) __attribute__((
const));
215 static inline VuoPoint2d
VuoPoint2d_lerp(VuoPoint2d a, VuoPoint2d b,
float t) __attribute__((
const));
218 return a * (1 - t) + b * t;
224 static inline VuoPoint2d
VuoPoint2d_scale(VuoPoint2d a, VuoPoint2d b) __attribute__((
const));
236 (float)
VuoReal_spring(timeSinceDrop, dropPosition.x, restingPosition.x, period, damping),
237 (float)
VuoReal_spring(timeSinceDrop, dropPosition.y, restingPosition.y, period, damping)
255 static inline VuoPoint2d
VuoPoint2d_clampn(VuoPoint2d point, VuoPoint2d limitA, VuoPoint2d limitB)
274 return (VuoPoint2d) {
283 static inline VuoPoint2d
VuoPoint2d_snap(VuoPoint2d a, VuoPoint2d center, VuoPoint2d snap)
286 return (VuoPoint2d) {
287 center.x + nonzeroSnap.x * (int)round( (a.x-center.x) / nonzeroSnap.x ),
288 center.y + nonzeroSnap.y * (
int)round( (a.y-center.y) / nonzeroSnap.y )