37 #define VuoPoint4d_SUPPORTS_COMPARISON
60 return (VuoPoint4d){x, y, z, w};
70 return (VuoPoint4d){ f[0], f[1], f[2], f[3] };
94 return (VuoPoint3d){p.x, p.y, p.z};
105 return (VuoPoint4d){p.x, p.y, p.z, 1};
128 return u.x*v.x + u.y*v.y + u.z*v.z + u.w*v.w;
138 return sqrtf(a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w);
147 VuoPoint3d p = a.xyz / sqrtf(a.x * a.x + a.y * a.y + a.z * a.z);
148 return (VuoPoint4d){p.x, p.y, p.z, a.w};
157 return a / sqrtf(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w);
184 return (a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w);
221 if (fabs(a.x) < 0.000001)
222 a.x = copysign(0.000001, a.x);
223 if (fabs(a.y) < 0.000001)
224 a.y = copysign(0.000001, a.y);
225 if (fabs(a.z) < 0.000001)
226 a.z = copysign(0.000001, a.z);
227 if (fabs(a.w) < 0.000001)
228 a.w = copysign(0.000001, a.w);
238 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));
245 static inline VuoPoint4d
VuoPoint4d_snap(VuoPoint4d a, VuoPoint4d center, VuoPoint4d snap)
248 return (VuoPoint4d) {
249 center.x + nonzeroSnap.x * (int)round((a.x-center.x) / nonzeroSnap.x),
250 center.y + nonzeroSnap.y * (
int)round((a.y-center.y) / nonzeroSnap.y),
251 center.z + nonzeroSnap.z * (int)round((a.z-center.z) / nonzeroSnap.z),
252 center.w + nonzeroSnap.w * (
int)round((a.w-center.w) / nonzeroSnap.w)
260 static inline VuoPoint4d
VuoPoint4d_clampn(VuoPoint4d point, VuoPoint4d limitA, VuoPoint4d limitB)