31 struct xrt_vec3 ret = {l.x * r.x, l.y * r.y, l.z * r.z};
36 m_vec3_mul_scalar(struct
xrt_vec3 l, float r)
38 struct xrt_vec3 ret = {l.x * r, l.y * r, l.z * r};
45 struct xrt_vec3 ret = {l.x + r.x, l.y + r.y, l.z + r.z};
52 struct xrt_vec3 ret = {l.x - r.x, l.y - r.y, l.z - r.z};
59 struct xrt_vec3 ret = {l.x / r.x, l.y / r.y, l.z / r.z};
64 m_vec3_div_scalar(struct
xrt_vec3 l, float r)
66 struct xrt_vec3 ret = {l.x / r, l.y / r, l.z / r};
73 return l.x * r.x + l.y * r.y + l.z * r.z;
79 return m_vec3_dot(l, l);
85 return sqrtf(m_vec3_len_sqrd(l));
91 float len = m_vec3_len(l);
92 if (len <= FLT_EPSILON) {
107 float dot = m_vec3_dot(l, r);
108 float lengths = m_vec3_len_sqrd(l) * m_vec3_len_sqrd(r);
113 lengths = sqrtf(lengths);
115 return acosf(dot / lengths);
122 float amnt = (m_vec3_dot(project_this, onto_this) / m_vec3_len_sqrd(onto_this));
124 return m_vec3_mul_scalar(onto_this, amnt);
128 m_vec3_orthonormalize(struct
xrt_vec3 leave_this_alone, struct
xrt_vec3 change_this_one)
130 return m_vec3_normalize(m_vec3_sub(change_this_one, m_vec3_project(change_this_one, leave_this_alone)));
137 return m_vec3_add(m_vec3_mul_scalar(from, 1.0f - amount), m_vec3_mul_scalar(to, amount));
143 return l.x == r.x && l.y == r.y && l.z == r.z;
146 typedef float m_vec3_float_arr[3];
148 static inline m_vec3_float_arr *
149 m_vec3_ptr_to_float_arr_ptr(
struct xrt_vec3 *ptr)
151 return (m_vec3_float_arr *)ptr;
162 return m_vec3_add(a, b);
168 return m_vec3_sub(a, b);
172 operator*(
const struct xrt_vec3 &a,
const float &b)
174 return m_vec3_mul_scalar(a, b);
180 return m_vec3_mul(a, b);
186 return m_vec3_div(a, b);
190 operator/(const struct
xrt_vec3 &a,
const float &b)
192 return m_vec3_div_scalar(a, b);
214 operator*=(
struct xrt_vec3 &a,
const float &b)
Wrapper header for <math.h> to ensure pi-related math constants are defined.
A 3 element vector with single floats.
Definition: xrt_defines.h:271
Common defines and enums for XRT.