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)))
761 math_map_ranges(
double value,
double from_low,
double from_high,
double to_low,
double to_high)
763 return (value - from_low) * (to_high - to_low) / (from_high - from_low) + to_low;
767 math_lerp(
double from,
double to,
double amount)
769 return (from * (1.0 - amount)) + (to * (amount));
823 double horizfov_total,
826 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:388
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:753
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:418
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:723
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:932
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:658
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:582
void math_matrix_3x3_transpose(const struct xrt_matrix_3x3 *in, struct xrt_matrix_3x3 *result)
Transpose Matrix3x3.
Definition: m_base.cpp:688
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:236
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:921
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:695
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:526
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:556
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:774
void math_matrix_4x4_transpose(const struct xrt_matrix_4x4 *in, struct xrt_matrix_4x4 *result)
Transpose Matrix4x4.
Definition: m_base.cpp:716
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:373
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:730
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:681
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:296
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:588
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:446
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:640
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:873
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:308
void math_pose_invert(const struct xrt_pose *pose, struct xrt_pose *outPose)
Invert pose.
Definition: m_base.cpp:864
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:314
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:343
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:856
void math_matrix_4x4_inverse(const struct xrt_matrix_4x4 *in, struct xrt_matrix_4x4 *result)
Invert Matrix4x4.
Definition: m_base.cpp:709
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:881
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:627
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:742
bool math_quat_validate(const struct xrt_quat *quat)
Check if this quat can be used in transformation operations.
Definition: m_base.cpp:289
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:226
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:620
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:701
void math_quat_invert(const struct xrt_quat *quat, struct xrt_quat *out_quat)
Invert a quaternion.
Definition: m_base.cpp:302
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:358
bool math_quat_ensure_normalized(struct xrt_quat *inout)
Normalizes a quaternion if it has accumulated float precision errors.
Definition: m_base.cpp:321
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:562
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:405
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:601
void math_pose_identity(struct xrt_pose *pose)
Somewhat laboriously make an xrt_pose identity.
Definition: m_base.cpp:888
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:760
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:761
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.