return vec_new2(x, y, z, S(1.0));
}
-#define VEC_ZERO vec_new(S(0.0), S(0.0), S(0.0))
-#define VEC_ORTHO_X vec_new(S(1.0), S(0.0), S(0.0))
-#define VEC_ORTHO_Y vec_new(S(0.0), S(1.0), S(0.0))
-#define VEC_ORTHO_Z vec_new(S(0.0), S(0.0), S(1.0))
+#define VEC_ZERO vec_new(S(0.0), S(0.0), S(0.0))
+#define VEC_ORTHO_X vec_new(S(1.0), S(0.0), S(0.0))
+#define VEC_ORTHO_Y vec_new(S(0.0), S(1.0), S(0.0))
+#define VEC_ORTHO_Z vec_new(S(0.0), S(0.0), S(1.0))
+#define VEC_ZERO_FREE vec_new2(S(0.0), S(0.0), S(0.0), S(0.0))
/*
return (a.x == b.x && a.y == b.y && a.z == b.z && a.w == b.w);
}
+/*
+ * Determine whether or not two vectors are mostly equal.
+ */
+INLINE_MAYBE
+bool vec_isequal2(vec_t a, vec_t b, scal_t epsilon)
+{
+ return scal_isequal2(a.x, b.x, epsilon) &&
+ scal_isequal2(a.y, b.y, epsilon) &&
+ scal_isequal2(a.z, b.z, epsilon) &&
+ scal_isequal2(a.w, b.w, epsilon);
+}
+
+/*
+ * Determine if one vector is "less than" another, for purposes of sorting.
+ */
INLINE_MAYBE
int vec_compare(vec_t a, vec_t b)
{
return a;
}
+/*
+ * Add three vectors together.
+ */
+INLINE_MAYBE
+vec_t vec_add2(vec_t a, vec_t b, vec_t c)
+{
+ return vec_add(vec_add(a, b), c);
+}
+
/*
* Subtract a vector from another vector.
*/
}
+/*
+ * Interpolate smoothly between three vectors with barycentric coordinates.
+ */
+INLINE_MAYBE
+vec_t vec_interp(vec_t v1, vec_t v2, vec_t v3, scal_t b[3])
+{
+ return vec_new(v1.x * b[0] + v2.x * b[1] + v3.x * b[2],
+ v1.y * b[0] + v2.y * b[1] + v3.y * b[2],
+ v1.z * b[0] + v2.z * b[1] + v3.z * b[2]);
+}
+
+
+
#endif // _VEC_H_