51#define MATH_GRAVITY_M_S2 (9.8066)
59#define MIN(A, B) ((A) < (B) ? (A) : (B))
68#define MAX(A, B) ((A) > (B) ? (A) : (B))
76#define CLAMP(X, A, B) (MIN(MAX((X), (A)), (B)))
314 return l->x * r->x + l->y * r->y + l->z * r->z + l->w * r->w;
813math_map_ranges(
double value,
double from_low,
double from_high,
double to_low,
double to_high)
815 return (value - from_low) * (to_high - to_low) / (from_high - from_low) + to_low;
819math_lerp(
double from,
double to,
double amount)
821 return (from * (1.0 - amount)) + (to * (amount));
875 double horizfov_total,
878 double vertfov_total,
void math_quat_rotate_derivative(const struct xrt_quat *quat, const struct xrt_vec3 *deriv, struct xrt_vec3 *result)
Used to rotate a derivative like a angular velocity.
Definition: m_base.cpp:405
void math_vec3_normalize(struct xrt_vec3 *in)
Normalize a vec3 in place.
Definition: m_base.cpp:173
void math_matrix_4x4_projection_vulkan_infinite_reverse(const struct xrt_fov *fov, float near_plane, struct xrt_matrix_4x4 *result)
Compute a projection matrix with settings for Vulkan, it will also have it's far plane at infinite an...
Definition: m_matrix_projection.cpp:76
void math_matrix_4x4_isometry_from_pose(const struct xrt_pose *pose, struct xrt_matrix_4x4 *result)
Get a col-major isometry matrix —in SE(3)— from a pose.
Definition: m_base.cpp:808
void math_vec3_f64_normalize(struct xrt_vec3_f64 *in)
Normalize a vec3_f64 in place.
Definition: m_base.cpp:199
void math_quat_from_swing(const struct xrt_vec2 *swing, struct xrt_quat *result)
Converts a 2D vector to a quaternion.
Definition: m_base.cpp:435
void math_quat_from_vec_a_to_vec_b(const struct xrt_vec3 *vec_a, const struct xrt_vec3 *vec_b, struct xrt_quat *result)
Create a rotation from two vectors vec_a and vec_b that would rotate vec_a into vec_b.
Definition: m_base.cpp:268
void math_quat_decompose_swing_twist(const struct xrt_quat *in, const struct xrt_vec3 *twist_axis, struct xrt_quat *swing, struct xrt_quat *twist)
Decompose a quaternion to swing and twist component rotations around a target axis.
Definition: m_base.cpp:565
void math_matrix_4x4_isometry_inverse(const struct xrt_matrix_4x4 *in, struct xrt_matrix_4x4 *result)
Invert a homogeneous isometry 4x4 (col-major) matrix in SE(3).
Definition: m_base.cpp:778
void math_pose_transform_point(const struct xrt_pose *transform, const struct xrt_vec3 *point, struct xrt_vec3 *out_point)
Apply a rigid-body transformation to a point.
Definition: m_base.cpp:987
void math_matrix_3x3_multiply(const struct xrt_matrix_3x3 *left, const struct xrt_matrix_3x3 *right, struct xrt_matrix_3x3 *result_out)
Multiply Matrix3x3.
Definition: m_base.cpp:713
void math_vec3_subtract(const struct xrt_vec3 *subtrahend, struct xrt_vec3 *inAndOut)
Subtract from a vector in-place.
Definition: m_base.cpp:150
void math_matrix_3x3_f64_identity(struct xrt_matrix_3x3_f64 *mat)
Initialize a double 3x3 matrix to the identity matrix.
Definition: m_base.cpp:637
void math_matrix_3x3_transpose(const struct xrt_matrix_3x3 *in, struct xrt_matrix_3x3 *result)
Transpose Matrix3x3.
Definition: m_base.cpp:743
void math_vec3_f64_cross(const struct xrt_vec3_f64 *l, const struct xrt_vec3_f64 *r, struct xrt_vec3_f64 *result)
Cross product of a vec3_f64.
Definition: m_base.cpp:193
void math_quat_from_plus_x_z(const struct xrt_vec3 *plus_x, const struct xrt_vec3 *plus_z, struct xrt_quat *result)
Create a rotation from two vectors plus x and z, by creating a rotation matrix by crossing z and x to...
Definition: m_base.cpp:247
bool math_vec3_validate(const struct xrt_vec3 *vec3)
Check if this vec3 is valid for math operations.
Definition: m_base.cpp:133
void math_pose_transform(const struct xrt_pose *transform, const struct xrt_pose *pose, struct xrt_pose *outPose)
Apply a rigid-body transformation to a pose.
Definition: m_base.cpp:976
bool math_compute_fovs(double w_total, double w_1, double horizfov_total, double h_total, double h_1, double vertfov_total, struct xrt_fov *fov)
Perform the computations from "Computing Half-Fields-Of-View from Simpler Display Models",...
Definition: m_optics.c:118
void math_matrix_4x4_identity(struct xrt_matrix_4x4 *result)
Initialize Matrix4x4 with identity.
Definition: m_base.cpp:750
void math_quat_to_swing_twist(const struct xrt_quat *in, struct xrt_vec2 *out_swing, float *out_twist)
Converts a quaternion to XY-swing and Z-twist.
Definition: m_base.cpp:543
void math_quat_to_euler_angles(const struct xrt_quat *quat, struct xrt_vec3 *euler_angles)
Create a rotation from a quaternion to euler angles.
Definition: m_base.cpp:226
void math_vec3_cross(const struct xrt_vec3 *l, const struct xrt_vec3 *r, struct xrt_vec3 *result)
Cross product of a vector.
Definition: m_base.cpp:167
void math_matrix_3x3_identity(struct xrt_matrix_3x3 *mat)
Initialize a 3x3 matrix to the identity matrix.
Definition: m_base.cpp:611
void math_matrix_4x4_inverse_view_projection(const struct xrt_matrix_4x4 *view, const struct xrt_matrix_4x4 *projection, struct xrt_matrix_4x4 *result)
Compute inverse view projection matrix, using only the starting 3x3 block of the view.
Definition: m_base.cpp:829
void math_matrix_4x4_transpose(const struct xrt_matrix_4x4 *in, struct xrt_matrix_4x4 *result)
Transpose Matrix4x4.
Definition: m_base.cpp:771
void math_quat_rotate_vec3(const struct xrt_quat *left, const struct xrt_vec3 *right, struct xrt_vec3 *result)
Rotate a vector.
Definition: m_base.cpp:390
void math_matrix_4x4_view_from_pose(const struct xrt_pose *pose, struct xrt_matrix_4x4 *result)
Compute view matrix from xrt_pose.
Definition: m_base.cpp:785
void math_vec3_scalar_mul(float scalar, struct xrt_vec3 *inAndOut)
Multiply a vector in-place.
Definition: m_base.cpp:159
void math_quat_finite_difference(const struct xrt_quat *quat0, const struct xrt_quat *quat1, float dt, struct xrt_vec3 *out_ang_vel)
Compute a global angular velocity vector (exponential map format) by taking the finite difference of ...
Definition: m_quatexpmap.cpp:158
void math_quat_exp(const struct xrt_vec3 *axis_angle, struct xrt_quat *out_quat)
Takes a rotation vector equal to half of a Rodrigues rotation vector and returns its corresponding un...
Definition: m_quatexpmap.cpp:174
size_t math_hash_string(const char *str_c, size_t length)
Generate a hash value from the given string, trailing zero not included.
Definition: m_hash.cpp:15
void math_matrix_3x3_inverse(const struct xrt_matrix_3x3 *in, struct xrt_matrix_3x3 *result)
Invert Matrix3x3.
Definition: m_base.cpp:736
bool math_quat_validate_within_1_percent(const struct xrt_quat *quat)
Check if this quat is within 1% of unit length.
Definition: m_base.cpp:313
void math_matrix_3x3_f64_transform_vec3_f64(const struct xrt_matrix_3x3_f64 *left, const struct xrt_vec3_f64 *right, struct xrt_vec3_f64 *result_out)
Transform a double vec3 by a 3x3 double matrix.
Definition: m_base.cpp:643
void math_quat_from_swing_twist(const struct xrt_vec2 *swing, const float twist, struct xrt_quat *result)
Converts a 2D vector and a float to a quaternion.
Definition: m_base.cpp:463
void math_matrix_4x4_transform_vec3(const struct xrt_matrix_4x4 *left, const struct xrt_vec3 *right, struct xrt_vec3 *result_out)
Transform a vec3 by a 4x4 matrix, extending the vector with w = 1.0.
Definition: m_base.cpp:695
void math_pose_from_isometry(const struct xrt_matrix_4x4 *transform, struct xrt_pose *result)
Converts a (col-major) isometry into a pose.
Definition: m_base.cpp:928
static float math_quat_dot(const struct xrt_quat *l, const struct xrt_quat *r)
The dot product of 2 quaternions.
Definition: m_api.h:312
void math_quat_from_euler_angles(const struct xrt_vec3 *angles, struct xrt_quat *result)
Create a rotation from euler angles to a quaternion.
Definition: m_base.cpp:218
float math_quat_len(const struct xrt_quat *quat)
The euclidean norm or length of a quaternion.
Definition: m_base.cpp:325
void math_pose_invert(const struct xrt_pose *pose, struct xrt_pose *outPose)
Invert pose.
Definition: m_base.cpp:919
void math_quat_ln(const struct xrt_quat *quat, struct xrt_vec3 *out_axis_angle)
Takes a unit quaternion and returns a rotation vector equal to half of its corresponding Rodrigues ro...
Definition: m_quatexpmap.cpp:180
void math_quat_normalize(struct xrt_quat *inout)
Normalize a quaternion.
Definition: m_base.cpp:331
void math_quat_rotate(const struct xrt_quat *left, const struct xrt_quat *right, struct xrt_quat *result)
Rotate a quaternion (compose rotations).
Definition: m_base.cpp:360
void math_quat_from_angle_vector(float angle_rads, const struct xrt_vec3 *vector, struct xrt_quat *result)
Create a rotation from an angle in radians and a unit vector.
Definition: m_base.cpp:212
bool math_pose_validate(const struct xrt_pose *pose)
Check if this pose can be used in transformation operations.
Definition: m_base.cpp:911
void math_matrix_4x4_inverse(const struct xrt_matrix_4x4 *in, struct xrt_matrix_4x4 *result)
Invert Matrix4x4.
Definition: m_base.cpp:764
void math_pose_interpolate(const struct xrt_pose *a, const struct xrt_pose *b, float t, struct xrt_pose *outPose)
Interpolated pose between poses a and b by lerping position and slerping orientation by t.
Definition: m_base.cpp:936
void math_matrix_3x3_transform_vec3(const struct xrt_matrix_3x3 *left, const struct xrt_vec3 *right, struct xrt_vec3 *result_out)
Transform a vec3 by a 3x3 matrix.
Definition: m_base.cpp:682
void math_matrix_4x4_isometry_from_rt(const struct xrt_matrix_3x3 *rotation, const struct xrt_vec3 *translation, struct xrt_matrix_4x4 *result)
Get an isometry matrix —in SE(3)— from a rotation matrix —SO(3)— and a translation vector.
Definition: m_base.cpp:797
bool math_quat_validate(const struct xrt_quat *quat)
Check if this quat can be used in transformation operations.
Definition: m_base.cpp:306
void math_quat_integrate_velocity(const struct xrt_quat *quat, const struct xrt_vec3 *ang_vel, float dt, struct xrt_quat *result)
Integrate a local angular velocity vector (exponential map) and apply to a quaternion.
Definition: m_quatexpmap.cpp:141
void math_quat_from_matrix_3x3(const struct xrt_matrix_3x3 *mat, struct xrt_quat *result)
Create a rotation from a 3x3 rotation (row major) matrix.
Definition: m_base.cpp:237
void math_matrix_3x3_rotation_from_isometry(const struct xrt_matrix_4x4 *isometry, struct xrt_matrix_3x3 *result)
Get the rotation matrix from an isomertry matrix (col-major).
Definition: m_base.cpp:675
void math_matrix_4x4_multiply(const struct xrt_matrix_4x4 *left, const struct xrt_matrix_4x4 *right, struct xrt_matrix_4x4 *result)
Multiply Matrix4x4.
Definition: m_base.cpp:756
void math_quat_invert(const struct xrt_quat *quat, struct xrt_quat *out_quat)
Invert a quaternion.
Definition: m_base.cpp:319
void math_quat_unrotate(const struct xrt_quat *left, const struct xrt_quat *right, struct xrt_quat *result)
Inverse of math_quat_rotate.
Definition: m_base.cpp:375
bool math_quat_ensure_normalized(struct xrt_quat *inout)
Normalizes a quaternion if it has accumulated float precision errors.
Definition: m_base.cpp:338
void math_matrix_3x3_from_quat(const struct xrt_quat *q, struct xrt_matrix_3x3 *result_out)
Initialize a 3x3 matrix from a quaternion.
Definition: m_base.cpp:617
void math_quat_slerp(const struct xrt_quat *left, const struct xrt_quat *right, float t, struct xrt_quat *result)
Slerp (spherical linear interpolation) between two quaternions.
Definition: m_base.cpp:422
void math_matrix_3x3_f64_from_plus_x_z(const struct xrt_vec3_f64 *plus_x, const struct xrt_vec3_f64 *plus_z, struct xrt_matrix_3x3_f64 *result)
Create a rotation from two vectors plus x and z, by creating a rotation matrix by crossing z and x to...
Definition: m_base.cpp:656
void math_pose_identity(struct xrt_pose *pose)
Somewhat laboriously make an xrt_pose identity.
Definition: m_base.cpp:943
void math_vec3_translation_from_isometry(const struct xrt_matrix_4x4 *isometry, struct xrt_vec3 *result)
Get translation vector from isometry matrix (col-major).
Definition: m_base.cpp:179
void math_matrix_4x4_model(const struct xrt_pose *pose, const struct xrt_vec3 *size, struct xrt_matrix_4x4 *result)
Compute quad layer model matrix from xrt_pose and xrt_vec2 size.
Definition: m_base.cpp:815
void math_vec3_accum(const struct xrt_vec3 *additional, struct xrt_vec3 *inAndOut)
Accumulate a vector by adding in-place.
Definition: m_base.cpp:141
static double math_map_ranges(double value, double from_low, double from_high, double to_low, double to_high)
Map a number from one range to another range.
Definition: m_api.h:813
Describes a projection matrix fov.
Definition: xrt_defines.h:486
A tightly packed 3x3 matrix of doubles.
Definition: xrt_defines.h:543
A tightly packed 3x3 matrix of floats.
Definition: xrt_defines.h:533
A tightly packed 4x4 matrix of floats.
Definition: xrt_defines.h:560
A pose composed of a position and orientation.
Definition: xrt_defines.h:465
A quaternion with single floats.
Definition: xrt_defines.h:216
A 2 element vector with single floats.
Definition: xrt_defines.h:250
A 3 element vector with single doubles.
Definition: xrt_defines.h:283
A 3 element vector with single floats.
Definition: xrt_defines.h:271
Common defines and enums for XRT.