37 #define VuoPoint4d_SUPPORTS_COMPARISON
60 return (VuoPoint4d){x, y, z, w};
71 return (VuoPoint3d){p.x, p.y, p.z};
82 return (VuoPoint4d){p.x, p.y, p.z, 1};
105 return u.x*v.x + u.y*v.y + u.z*v.z + u.w*v.w;
115 return sqrtf(a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w);
124 VuoPoint3d p = a.xyz / sqrtf(a.x * a.x + a.y * a.y + a.z * a.z);
125 return (VuoPoint4d){p.x, p.y, p.z, a.w};
134 return a / sqrtf(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w);
161 return (a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w);
198 if (fabs(a.x) < 0.000001)
199 a.x = copysign(0.000001, a.x);
200 if (fabs(a.y) < 0.000001)
201 a.y = copysign(0.000001, a.y);
202 if (fabs(a.z) < 0.000001)
203 a.z = copysign(0.000001, a.z);
204 if (fabs(a.w) < 0.000001)
205 a.w = copysign(0.000001, a.w);
215 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));
222 static inline VuoPoint4d
VuoPoint4d_snap(VuoPoint4d a, VuoPoint4d center, VuoPoint4d snap)
225 return (VuoPoint4d) {
226 center.x + nonzeroSnap.x * (int)round((a.x-center.x) / nonzeroSnap.x),
227 center.y + nonzeroSnap.y * (
int)round((a.y-center.y) / nonzeroSnap.y),
228 center.z + nonzeroSnap.z * (int)round((a.z-center.z) / nonzeroSnap.z),
229 center.w + nonzeroSnap.w * (
int)round((a.w-center.w) / nonzeroSnap.w)
237 static inline VuoPoint4d
VuoPoint4d_clampn(VuoPoint4d point, VuoPoint4d limitA, VuoPoint4d limitB)