SH4ZAM! 0.9.1
Fast math library for the Sega Dreamcast's SH4 CPU
Loading...
Searching...
No Matches
shz_vector.h File Reference
#include <math.h>
#include <float.h>
#include "shz_scalar.h"
#include "shz_trig.h"
#include "inline/shz_vector.inl.h"
Include dependency graph for shz_vector.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  shz_vec2_t
 
struct  shz_vec3_t
 
struct  shz_vec4_t
 

Macros

Adapters

Macros for converting between SH4ZAM and other compatible formats.

#define shz_vec2_deref(ptr)
 
#define shz_vec3_deref(ptr)
 
#define shz_vec4_deref(ptr)
 
#define shz_vec2_from(value)
 
#define shz_vec3_from(value)
 
#define shz_vec4_from(value)
 
#define shz_vec2_to(type, vector)
 
#define shz_vec3_to(type, vector)
 
#define shz_vec4_to(type, vector)
 
Type-Generic Routines

Generalized vector routines for C and C++.

#define shz_vec_abs(vec)
 
#define shz_vec_neg(vec)
 
#define shz_vec_inv(vec)
 
#define shz_vec_max(vec)
 
#define shz_vec_min(vec)
 
#define shz_vec_clamp(vec, min, max)
 
#define shz_vec_equal(vec1, vec2)
 
#define shz_vec_add(vec1, vec2)
 
#define shz_vec_sub(vec1, vec2)
 
#define shz_vec_mul(vec1, vec2)
 
#define shz_vec_div(vec1, vec2)
 
#define shz_vec_scale(vec, factor)
 
#define shz_vec_dot(vec1, vec2)
 
#define shz_vec_dot2(l, r1, r2)
 
#define shz_vec_dot3(l, r1, r2, r3)
 
#define shz_vec_magnitude_sqr(vec)
 
#define shz_vec_magnitude(vec)
 
#define shz_vec_magnitude_inv(vec)
 
#define shz_vec_normalize(vec)
 
#define shz_vec_normalize_safe(vec)
 
#define shz_vec_distance(vec1, vec2)
 
#define shz_vec_move(vec, target, maxdist)
 
#define shz_vec_distance_sqr(vec1, vec2)
 
#define shz_vec_lerp(vec1, vec2, t)
 
#define shz_vec_reflect(incidence, normal)
 
#define shz_vec_refract(incidence, normal, eta)
 
#define shz_vec_cross(vec1, vec2)
 
#define shz_vec_project(vec1, vec2)
 
#define shz_vec_project_safe(vec1, vec2)
 
#define shz_vec_angles(vec)
 
#define shz_vec_angle_between(vec1, vec2)
 
#define shz_vec_swizzle(vec, ...)
 
#define shz_vec_floor(vec)
 
#define shz_vec_ceil(vec)
 
#define shz_vec_round(vec)
 
#define shz_vec_fract(vec)
 
#define shz_vec_sign(vec)
 
#define shz_vec_saturate(vec)
 
#define shz_vec_minv(a, b)
 
#define shz_vec_maxv(a, b)
 
#define shz_vec_inv_sqrtf(vec)
 
#define shz_vec_sqrtf(vec)
 
#define shz_vec_stepv(vec, edge)
 
#define shz_vec_step(vec, edge)
 
#define shz_vec_smoothstepv(vec, edge0, edge1)
 
#define shz_vec_smoothstep(vec, edge0, edge1)
 
#define shz_vec_smoothstepv_safe(vec, edge0, edge1)
 
#define shz_vec_smoothstep_safe(vec, edge0, edge1)
 

Typedefs

typedef shz_vec2_t shz_vec2
 
typedef shz_vec3_t shz_vec3
 
typedef shz_vec4_t shz_vec4
 

Functions

Initializers

Component-based initialization routines.

shz_vec2_t shz_vec2_init (float x, float y) noexcept
 
shz_vec3_t shz_vec3_init (float x, float y, float z) noexcept
 
shz_vec4_t shz_vec4_init (float x, float y, float z, float w) noexcept
 
shz_vec2_t shz_vec2_fill (float v) noexcept
 
shz_vec3_t shz_vec3_fill (float v) noexcept
 
shz_vec4_t shz_vec4_fill (float v) noexcept
 
Component-wise Operations

Routines which apply to each vector component.

shz_vec2_t shz_vec2_abs (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_abs (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_abs (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_neg (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_neg (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_neg (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_inv (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_inv (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_inv (shz_vec4_t vec) noexcept
 
float shz_vec2_max (shz_vec2_t vec) noexcept
 
float shz_vec3_max (shz_vec3_t vec) noexcept
 
float shz_vec4_max (shz_vec4_t vec) noexcept
 
float shz_vec2_min (shz_vec2_t vec) noexcept
 
float shz_vec3_min (shz_vec3_t vec) noexcept
 
float shz_vec4_min (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_clamp (shz_vec2_t vec, float min, float max) noexcept
 
shz_vec3_t shz_vec3_clamp (shz_vec3_t vec, float min, float max) noexcept
 
shz_vec4_t shz_vec4_clamp (shz_vec4_t vec, float min, float max) noexcept
 
shz_vec2_t shz_vec2_floor (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_floor (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_floor (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_ceil (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_ceil (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_ceil (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_round (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_round (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_round (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_fract (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_fract (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_fract (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_sign (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_sign (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_sign (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_saturate (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_saturate (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_saturate (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_minv (shz_vec2_t a, shz_vec2_t b) noexcept
 
shz_vec3_t shz_vec3_minv (shz_vec3_t a, shz_vec3_t b) noexcept
 
shz_vec4_t shz_vec4_minv (shz_vec4_t a, shz_vec4_t b) noexcept
 
shz_vec2_t shz_vec2_maxv (shz_vec2_t a, shz_vec2_t b) noexcept
 
shz_vec3_t shz_vec3_maxv (shz_vec3_t a, shz_vec3_t b) noexcept
 
shz_vec4_t shz_vec4_maxv (shz_vec4_t a, shz_vec4_t b) noexcept
 
bool shz_vec2_equal (shz_vec2_t a, shz_vec2_t b) noexcept
 
bool shz_vec3_equal (shz_vec3_t a, shz_vec3_t b) noexcept
 
bool shz_vec4_equal (shz_vec4_t a, shz_vec4_t b) noexcept
 
shz_vec2_t shz_vec2_stepv (shz_vec2_t vec, shz_vec2_t edge) noexcept
 
shz_vec3_t shz_vec3_stepv (shz_vec3_t vec, shz_vec3_t edge) noexcept
 
shz_vec4_t shz_vec4_stepv (shz_vec4_t vec, shz_vec4_t edge) noexcept
 
shz_vec2_t shz_vec2_step (shz_vec2_t vec, float edge) noexcept
 
shz_vec3_t shz_vec3_step (shz_vec3_t vec, float edge) noexcept
 
shz_vec4_t shz_vec4_step (shz_vec4_t vec, float edge) noexcept
 
shz_vec2_t shz_vec2_smoothstep (shz_vec2_t vec, float edge0, float edge1) noexcept
 
shz_vec3_t shz_vec3_smoothstep (shz_vec3_t vec, float edge0, float edge1) noexcept
 
shz_vec4_t shz_vec4_smoothstep (shz_vec4_t vec, float edge0, float edge1) noexcept
 
shz_vec2_t shz_vec2_smoothstepv (shz_vec2_t vec, shz_vec2_t edge0, shz_vec2_t edge1) noexcept
 
shz_vec3_t shz_vec3_smoothstepv (shz_vec3_t vec, shz_vec3_t edge0, shz_vec3_t edge1) noexcept
 
shz_vec4_t shz_vec4_smoothstepv (shz_vec4_t vec, shz_vec4_t edge0, shz_vec4_t edge1) noexcept
 
shz_vec2_t shz_vec2_smoothstep_safe (shz_vec2_t vec, float edge0, float edge1) noexcept
 
shz_vec3_t shz_vec3_smoothstep_safe (shz_vec3_t vec, float edge0, float edge1) noexcept
 
shz_vec4_t shz_vec4_smoothstep_safe (shz_vec4_t vec, float edge0, float edge1) noexcept
 
shz_vec2_t shz_vec2_smoothstepv_safe (shz_vec2_t vec, shz_vec2_t edge0, shz_vec2_t edge1) noexcept
 
shz_vec3_t shz_vec3_smoothstepv_safe (shz_vec3_t vec, shz_vec3_t edge0, shz_vec3_t edge1) noexcept
 
shz_vec4_t shz_vec4_smoothstepv_safe (shz_vec4_t vec, shz_vec4_t edge0, shz_vec4_t edge1) noexcept
 
shz_vec2_t shz_vec2_inv_sqrtf (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_inv_sqrtf (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_inv_sqrtf (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_sqrtf (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_sqrtf (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_sqrtf (shz_vec4_t vec) noexcept
 
Arithmetic

Routines for basic vector arithmetic operations.

shz_vec2_t shz_vec2_add (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
shz_vec3_t shz_vec3_add (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
shz_vec4_t shz_vec4_add (shz_vec4_t vec1, shz_vec4_t vec2) noexcept
 
shz_vec2_t shz_vec2_sub (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
shz_vec3_t shz_vec3_sub (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
shz_vec4_t shz_vec4_sub (shz_vec4_t vec1, shz_vec4_t vec2) noexcept
 
shz_vec2_t shz_vec2_mul (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
shz_vec3_t shz_vec3_mul (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
shz_vec4_t shz_vec4_mul (shz_vec4_t vec1, shz_vec4_t vec2) noexcept
 
shz_vec2_t shz_vec2_div (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
shz_vec3_t shz_vec3_div (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
shz_vec4_t shz_vec4_div (shz_vec4_t vec1, shz_vec4_t vec2) noexcept
 
shz_vec2_t shz_vec2_scale (shz_vec2_t vec, float factor) noexcept
 
shz_vec3_t shz_vec3_scale (shz_vec3_t vec, float factor) noexcept
 
shz_vec4_t shz_vec4_scale (shz_vec4_t vec, float factor) noexcept
 
Magnitude

Math routines for vector length and normalization.

float shz_vec2_magnitude_sqr (shz_vec2_t vec) noexcept
 
float shz_vec4_magnitude_sqr (shz_vec4_t vec) noexcept
 
float shz_vec3_magnitude_sqr (shz_vec3_t vec) noexcept
 
float shz_vec2_magnitude (shz_vec2_t vec) noexcept
 
float shz_vec3_magnitude (shz_vec3_t vec) noexcept
 
float shz_vec4_magnitude (shz_vec4_t vec) noexcept
 
float shz_vec2_magnitude_inv (shz_vec2_t vec) noexcept
 
float shz_vec3_magnitude_inv (shz_vec3_t vec) noexcept
 
float shz_vec4_magnitude_inv (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_normalize (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_normalize (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_normalize (shz_vec4_t vec) noexcept
 
shz_vec2_t shz_vec2_normalize_safe (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_normalize_safe (shz_vec3_t vec) noexcept
 
shz_vec4_t shz_vec4_normalize_safe (shz_vec4_t vec) noexcept
 
Binary Operations

Linear algebra operations performed with multiple vectors.

float shz_vec2_dot (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
shz_vec2_t shz_vec2_dot2 (shz_vec2_t l, shz_vec2_t r1, shz_vec2_t r2) noexcept
 
shz_vec3_t shz_vec2_dot3 (shz_vec2_t l, shz_vec2_t r1, shz_vec2_t r2, shz_vec2_t r3) noexcept
 
float shz_vec3_dot (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
shz_vec2_t shz_vec3_dot2 (shz_vec3_t l, shz_vec3_t r1, shz_vec3_t r2) noexcept
 
shz_vec3_t shz_vec3_dot3 (shz_vec3_t l, shz_vec3_t r1, shz_vec3_t r2, shz_vec3_t r3) noexcept
 
float shz_vec4_dot (shz_vec4_t vec1, shz_vec4_t vec2) noexcept
 
shz_vec2_t shz_vec4_dot2 (shz_vec4_t l, shz_vec4_t r1, shz_vec4_t r2) noexcept
 
shz_vec3_t shz_vec4_dot3 (shz_vec4_t l, shz_vec4_t r1, shz_vec4_t r2, shz_vec4_t r3) noexcept
 
float shz_vec2_distance (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
float shz_vec3_distance (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
float shz_vec4_distance (shz_vec4_t vec1, shz_vec4_t vec2) noexcept
 
float shz_vec2_distance_sqr (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
float shz_vec3_distance_sqr (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
float shz_vec4_distance_sqr (shz_vec4_t vec1, shz_vec4_t vec2) noexcept
 
shz_vec2_t shz_vec2_move (shz_vec2_t vec, shz_vec2_t target, float max_distance) noexcept
 
shz_vec3_t shz_vec3_move (shz_vec3_t vec, shz_vec3_t target, float max_distance) noexcept
 
shz_vec4_t shz_vec4_move (shz_vec4_t vec, shz_vec4_t target, float max_distance) noexcept
 
shz_vec2_t shz_vec2_lerp (shz_vec2_t a, shz_vec2_t b, float t) noexcept
 
shz_vec3_t shz_vec3_lerp (shz_vec3_t a, shz_vec3_t b, float t) noexcept
 
shz_vec4_t shz_vec4_lerp (shz_vec4_t a, shz_vec4_t b, float t) noexcept
 
shz_vec2_t shz_vec2_reflect (shz_vec2_t incidence, shz_vec2_t normal) noexcept
 
shz_vec3_t shz_vec3_reflect (shz_vec3_t incidence, shz_vec3_t normal) noexcept
 
shz_vec4_t shz_vec4_reflect (shz_vec4_t incidence, shz_vec4_t normal) noexcept
 
shz_vec2_t shz_vec2_refract (shz_vec2_t incidence, shz_vec2_t normal, float eta) noexcept
 
shz_vec3_t shz_vec3_refract (shz_vec3_t incidence, shz_vec3_t normal, float eta) noexcept
 
shz_vec4_t shz_vec4_refract (shz_vec4_t incidence, shz_vec4_t normal, float eta) noexcept
 
float shz_vec2_cross (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
shz_vec3_t shz_vec3_cross (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
shz_vec2_t shz_vec2_project (shz_vec2_t vec, shz_vec2_t onto) noexcept
 
shz_vec3_t shz_vec3_project (shz_vec3_t vec, shz_vec3_t onto) noexcept
 
shz_vec4_t shz_vec4_project (shz_vec4_t vec, shz_vec4_t onto) noexcept
 
shz_vec2_t shz_vec2_project_safe (shz_vec2_t vec, shz_vec2_t onto) noexcept
 
shz_vec3_t shz_vec3_project_safe (shz_vec3_t vec, shz_vec3_t onto) noexcept
 
shz_vec4_t shz_vec4_project_safe (shz_vec4_t vec, shz_vec4_t onto) noexcept
 
shz_vec3_t shz_vec3_reject (shz_vec3_t vec, shz_vec3_t onto) noexcept
 
Miscellaneous

Other specialized vector routines.

float shz_vec3_triple (shz_vec3_t a, shz_vec3_t b, shz_vec3_t c) noexcept
 
shz_vec3_t shz_vec3_perp (shz_vec3_t vec) noexcept
 
shz_vec3_t shz_vec3_barycenter (shz_vec3_t p, shz_vec3_t a, shz_vec3_t b, shz_vec3_t c) noexcept
 
void shz_vec3_orthonormalize (shz_vec3_t in1, shz_vec3_t in2, shz_vec3_t *out1, shz_vec3_t *out2) noexcept
 
shz_vec3_t shz_vec3_cubic_hermite (shz_vec3_t vec, shz_vec3_t tangent1, shz_vec3_t vec2, shz_vec3_t tangent2, float amounht) noexcept
 
Angles

Routines for working with vectors and angles.

float shz_vec2_angle_between (shz_vec2_t vec1, shz_vec2_t vec2) noexcept
 
float shz_vec3_angle_between (shz_vec3_t vec1, shz_vec3_t vec2) noexcept
 
float shz_vec2_angle (shz_vec2_t vec) noexcept
 
shz_vec3_t shz_vec3_angles (shz_vec3_t vec) noexcept
 
shz_vec2_t shz_vec2_from_sincos (shz_sincos_t sincos) noexcept
 
shz_vec3_t shz_vec3_from_sincos (shz_sincos_t azimuth, shz_sincos_t elevation) noexcept
 
shz_vec2_t shz_vec2_from_angle (float radians) noexcept
 
shz_vec3_t shz_vec3_from_angles (float azimuth, float elevation) noexcept
 
shz_vec2_t shz_vec2_from_angle_deg (float degrees) noexcept
 
shz_vec3_t shz_vec3_from_angles_deg (float azimuth, float elevation) noexcept
 
shz_vec2_t shz_vec2_rotate (shz_vec2_t vec, float radians) noexcept
 
shz_vec3_t shz_vec3_rotate_x (shz_vec3_t vec, float radians) noexcept
 
shz_vec3_t shz_vec3_rotate_y (shz_vec3_t vec, float radians) noexcept
 
shz_vec3_t shz_vec3_rotate_z (shz_vec3_t vec, float radians) noexcept
 
Extending

Routines for extending vectors into other dimensions.

shz_vec3_t shz_vec2_vec3 (shz_vec2_t vec, float z) noexcept
 
shz_vec4_t shz_vec2_vec4 (shz_vec2_t vec, float z, float w) noexcept
 
shz_vec4_t shz_vec3_vec4 (shz_vec3_t vec, float w) noexcept
 
Swizzling

Routines for swizzling the order of a vector's components.

shz_vec2_t shz_vec2_swizzle (shz_vec2_t vec, unsigned x_idx, unsigned y_idx) noexcept
 
shz_vec3_t shz_vec3_swizzle (shz_vec3_t vec, unsigned x_idx, unsigned y_idx, unsigned z_idx) noexcept
 
shz_vec4_t shz_vec4_swizzle (shz_vec4_t vec, unsigned x_idx, unsigned y_idx, unsigned z_idx, unsigned w_idx) noexcept
 

Detailed Description

Vector types and operations.

This file provides types and mathematical routines for representing and operating on vectors.

Author
2025, 2026 Falco Girgis
2025 Paul Cercueil

Definition in file shz_vector.h.

Macro Definition Documentation

◆ shz_vec2_deref

#define shz_vec2_deref ( ptr)

Dereferences the given pointer to a sequence of 2 floats as a shz_vec2_t.

Definition at line 725 of file shz_vector.h.

◆ shz_vec3_deref

#define shz_vec3_deref ( ptr)

Dereferences the given pointer to a sequence of 3 floats as a shz_vec3_t.

Definition at line 728 of file shz_vector.h.

◆ shz_vec4_deref

#define shz_vec4_deref ( ptr)

Dereferences the given pointer to a sequence of 4 floats as a shz_vec4_t.

Definition at line 731 of file shz_vector.h.

◆ shz_vec2_from

#define shz_vec2_from ( value)

Converts the given value or expression to the equivalent 2D SH4ZAM vector value.

Definition at line 734 of file shz_vector.h.

◆ shz_vec3_from

#define shz_vec3_from ( value)

Converts the given value or expression to the equivalent 3D SH4ZAM vector value.

Definition at line 737 of file shz_vector.h.

◆ shz_vec4_from

#define shz_vec4_from ( value)

Converts the given value or expression to the equivalent 4D SH4ZAM vector value.

Definition at line 740 of file shz_vector.h.

◆ shz_vec2_to

#define shz_vec2_to ( type,
vector )

Converts the given 2D vector into a value of the given type.

Definition at line 743 of file shz_vector.h.

◆ shz_vec3_to

#define shz_vec3_to ( type,
vector )

Converts the given 3D vector into a value of the given type.

Definition at line 746 of file shz_vector.h.

◆ shz_vec4_to

#define shz_vec4_to ( type,
vector )

Converts the given 4D vector into a value of the given type.

Definition at line 749 of file shz_vector.h.

◆ shz_vec_abs

#define shz_vec_abs ( vec)

C type-generic vector absolute value.

Definition at line 761 of file shz_vector.h.

761# define shz_vec_abs(vec) \
762 _Generic((vec), \
763 shz_vec2_t: shz_vec2_abs, \
764 shz_vec3_t: shz_vec3_abs, \
765 shz_vec4_t: shz_vec4_abs)(vec)

◆ shz_vec_neg

#define shz_vec_neg ( vec)

C type-generic vector negation.

Definition at line 768 of file shz_vector.h.

768# define shz_vec_neg(vec) \
769 _Generic((vec), \
770 shz_vec2_t: shz_vec2_neg, \
771 shz_vec3_t: shz_vec3_neg, \
772 shz_vec4_t: shz_vec4_neg)(vec)

◆ shz_vec_inv

#define shz_vec_inv ( vec)

C type-generic vector inversion.

Definition at line 775 of file shz_vector.h.

775# define shz_vec_inv(vec) \
776 _Generic((vec), \
777 shz_vec2_t: shz_vec2_inv, \
778 shz_vec3_t: shz_vec3_inv, \
779 shz_vec4_t: shz_vec4_inv)(vec)

◆ shz_vec_max

#define shz_vec_max ( vec)

C type-generic vector maximum value.

Definition at line 782 of file shz_vector.h.

782# define shz_vec_max(vec) \
783 _Generic((vec), \
784 shz_vec2_t: shz_vec2_max, \
785 shz_vec3_t: shz_vec3_max, \
786 shz_vec4_t: shz_vec4_max)(vec)

◆ shz_vec_min

#define shz_vec_min ( vec)

C type-generic vector minimum value.

Definition at line 789 of file shz_vector.h.

789# define shz_vec_min(vec) \
790 _Generic((vec), \
791 shz_vec2_t: shz_vec2_min, \
792 shz_vec3_t: shz_vec3_min, \
793 shz_vec4_t: shz_vec4_min)(vec)

◆ shz_vec_clamp

#define shz_vec_clamp ( vec,
min,
max )

C type-generic vector minimum value.

Definition at line 796 of file shz_vector.h.

796# define shz_vec_clamp(vec, min, max) \
797 _Generic((vec), \
798 shz_vec2_t: shz_vec2_clamp, \
799 shz_vec3_t: shz_vec3_clamp, \
800 shz_vec4_t: shz_vec4_clamp)(vec, min, max)

◆ shz_vec_equal

#define shz_vec_equal ( vec1,
vec2 )

C type-generic vector equals.

Definition at line 803 of file shz_vector.h.

803# define shz_vec_equal(vec1, vec2) \
804 _Generic((vec1), \
805 shz_vec2_t: shz_vec2_equal, \
806 shz_vec3_t: shz_vec3_equal, \
807 shz_vec4_t: shz_vec4_equal)(vec1, vec2)

◆ shz_vec_add

#define shz_vec_add ( vec1,
vec2 )

C type-generic vector addition.

Definition at line 810 of file shz_vector.h.

810# define shz_vec_add(vec1, vec2) \
811 _Generic((vec1), \
812 shz_vec2_t: shz_vec2_add, \
813 shz_vec3_t: shz_vec3_add, \
814 shz_vec4_t: shz_vec4_add)(vec1, vec2)

◆ shz_vec_sub

#define shz_vec_sub ( vec1,
vec2 )

C type-generic vector subtraction.

Definition at line 817 of file shz_vector.h.

817# define shz_vec_sub(vec1, vec2) \
818 _Generic((vec1), \
819 shz_vec2_t: shz_vec2_sub, \
820 shz_vec3_t: shz_vec3_sub, \
821 shz_vec4_t: shz_vec4_sub)(vec1, vec2)

◆ shz_vec_mul

#define shz_vec_mul ( vec1,
vec2 )

C type-generic vector multiplication.

Definition at line 824 of file shz_vector.h.

824# define shz_vec_mul(vec1, vec2) \
825 _Generic((vec1), \
826 shz_vec2_t: shz_vec2_mul, \
827 shz_vec3_t: shz_vec3_mul, \
828 shz_vec4_t: shz_vec4_mul)(vec1, vec2)

◆ shz_vec_div

#define shz_vec_div ( vec1,
vec2 )

C type-generic vector division.

Definition at line 831 of file shz_vector.h.

831# define shz_vec_div(vec1, vec2) \
832 _Generic((vec1), \
833 shz_vec2_t: shz_vec2_div, \
834 shz_vec3_t: shz_vec3_div, \
835 shz_vec4_t: shz_vec4_div)(vec1, vec2)

◆ shz_vec_scale

#define shz_vec_scale ( vec,
factor )

C type-generic vector scaling.

Definition at line 838 of file shz_vector.h.

838# define shz_vec_scale(vec, factor) \
839 _Generic((vec), \
840 shz_vec2_t: shz_vec2_scale, \
841 shz_vec3_t: shz_vec3_scale, \
842 shz_vec4_t: shz_vec4_scale)(vec, factor)

◆ shz_vec_dot

#define shz_vec_dot ( vec1,
vec2 )

C type-generic vector dot product.

Definition at line 845 of file shz_vector.h.

845# define shz_vec_dot(vec1, vec2) \
846 _Generic((vec1), \
847 shz_vec2_t: shz_vec2_dot, \
848 shz_vec3_t: shz_vec3_dot, \
849 shz_vec4_t: shz_vec4_dot)(vec1, vec2)

◆ shz_vec_dot2

#define shz_vec_dot2 ( l,
r1,
r2 )

C type-generic vector chained double dot product.

Definition at line 852 of file shz_vector.h.

852# define shz_vec_dot2(l, r1, r2) \
853 _Generic((l), \
854 shz_vec2_t: shz_vec2_dot2, \
855 shz_vec3_t: shz_vec3_dot2, \
856 shz_vec4_t: shz_vec4_dot2)(l, r1, r2)

◆ shz_vec_dot3

#define shz_vec_dot3 ( l,
r1,
r2,
r3 )

C type-generic vector chained triple dot product.

Definition at line 859 of file shz_vector.h.

859# define shz_vec_dot3(l, r1, r2, r3) \
860 _Generic((l), \
861 shz_vec2_t: shz_vec2_dot3, \
862 shz_vec3_t: shz_vec3_dot3, \
863 shz_vec4_t: shz_vec4_dot3)(l, r1, r2, r3)

◆ shz_vec_magnitude_sqr

#define shz_vec_magnitude_sqr ( vec)

C type-generic vector squared magnitude.

Definition at line 866 of file shz_vector.h.

866# define shz_vec_magnitude_sqr(vec) \
867 _Generic((vec), \
868 shz_vec2_t: shz_vec2_magnitude_sqr, \
869 shz_vec3_t: shz_vec3_magnitude_sqr, \
870 shz_vec4_t: shz_vec4_magnitude_sqr)(vec)

◆ shz_vec_magnitude

#define shz_vec_magnitude ( vec)

C type-generic vector magnitude.

Definition at line 873 of file shz_vector.h.

873# define shz_vec_magnitude(vec) \
874 _Generic((vec), \
875 shz_vec2_t: shz_vec2_magnitude, \
876 shz_vec3_t: shz_vec3_magnitude, \
877 shz_vec4_t: shz_vec4_magnitude)(vec)

◆ shz_vec_magnitude_inv

#define shz_vec_magnitude_inv ( vec)

C type-generic vector inverse magnitude.

Definition at line 880 of file shz_vector.h.

880# define shz_vec_magnitude_inv(vec) \
881 _Generic((vec), \
882 shz_vec2_t: shz_vec2_magnitude_inv, \
883 shz_vec3_t: shz_vec3_magnitude_inv, \
884 shz_vec4_t: shz_vec4_magnitude_inv)(vec)

◆ shz_vec_normalize

#define shz_vec_normalize ( vec)

C type-generic vector normalization.

Definition at line 887 of file shz_vector.h.

887# define shz_vec_normalize(vec) \
888 _Generic((vec), \
889 shz_vec2_t: shz_vec2_normalize, \
890 shz_vec3_t: shz_vec3_normalize, \
891 shz_vec4_t: shz_vec4_normalize)(vec)

◆ shz_vec_normalize_safe

#define shz_vec_normalize_safe ( vec)

C type-generic safe vector normalization.

Definition at line 894 of file shz_vector.h.

894# define shz_vec_normalize_safe(vec) \
895 _Generic((vec), \
896 shz_vec2_t: shz_vec2_normalize_safe, \
897 shz_vec3_t: shz_vec3_normalize_safe, \
898 shz_vec4_t: shz_vec4_normalize_safe)(vec)

◆ shz_vec_distance

#define shz_vec_distance ( vec1,
vec2 )

C type-generic vector distance.

Definition at line 901 of file shz_vector.h.

901# define shz_vec_distance(vec1, vec2) \
902 _Generic((vec1), \
903 shz_vec2_t: shz_vec2_distance, \
904 shz_vec3_t: shz_vec3_distance, \
905 shz_vec4_t: shz_vec4_distance)(vec1, vec2)

◆ shz_vec_move

#define shz_vec_move ( vec,
target,
maxdist )

C type-generic vector move.

Definition at line 908 of file shz_vector.h.

908# define shz_vec_move(vec, target, maxdist) \
909 _Generic((vec), \
910 shz_vec2_t: shz_vec2_move, \
911 shz_vec3_t: shz_vec3_move, \
912 shz_vec4_t: shz_vec4_move)(vec, target, maxdist)

◆ shz_vec_distance_sqr

#define shz_vec_distance_sqr ( vec1,
vec2 )

C type-generic vector squared distance.

Definition at line 915 of file shz_vector.h.

915# define shz_vec_distance_sqr(vec1, vec2) \
916 _Generic((vec1), \
917 shz_vec2_t: shz_vec2_distance_sqr, \
918 shz_vec3_t: shz_vec3_distance_sqr, \
919 shz_vec4_t: shz_vec4_distance_sqr)(vec1, vec2)

◆ shz_vec_lerp

#define shz_vec_lerp ( vec1,
vec2,
t )

C type-generic linear interpolation between two vectors.

Definition at line 922 of file shz_vector.h.

922# define shz_vec_lerp(vec1, vec2, t) \
923 _Generic((vec1), \
924 shz_vec2_t: shz_vec2_lerp, \
925 shz_vec3_t: shz_vec3_lerp, \
926 shz_vec4_t: shz_vec4_lerp)(vec1, vec2, t)

◆ shz_vec_reflect

#define shz_vec_reflect ( incidence,
normal )

C type-generic vector reflection.

Definition at line 929 of file shz_vector.h.

929# define shz_vec_reflect(incidence, normal) \
930 _Generic((incidence), \
931 shz_vec2_t: shz_vec2_reflect, \
932 shz_vec3_t: shz_vec3_reflect, \
933 shz_vec4_t: shz_vec4_reflect)(incidence, normal)

◆ shz_vec_refract

#define shz_vec_refract ( incidence,
normal,
eta )

C type-generic vector refraction.

Definition at line 936 of file shz_vector.h.

936# define shz_vec_refract(incidence, normal, eta) \
937 _Generic((incidence), \
938 shz_vec2_t: shz_vec2_refract, \
939 shz_vec3_t: shz_vec3_refract, \
940 shz_vec4_t: shz_vec4_refract)(incidence, normal, eta)

◆ shz_vec_cross

#define shz_vec_cross ( vec1,
vec2 )

C type-generic vector cross-product.

Definition at line 943 of file shz_vector.h.

943# define shz_vec_cross(vec1, vec2) \
944 _Generic((vec1), \
945 shz_vec2_t: shz_vec2_cross, \
946 shz_vec3_t: shz_vec3_cross)(vec1, vec2)

◆ shz_vec_project

#define shz_vec_project ( vec1,
vec2 )

C type-generic vector projection.

Definition at line 949 of file shz_vector.h.

949# define shz_vec_project(vec1, vec2) \
950 _Generic((vec1), \
951 shz_vec2_t: shz_vec2_project, \
952 shz_vec3_t: shz_vec3_project, \
953 shz_vec4_t: shz_vec4_project)(vec1, vec2)

◆ shz_vec_project_safe

#define shz_vec_project_safe ( vec1,
vec2 )

C type-generic safe vector projection.

Definition at line 956 of file shz_vector.h.

956# define shz_vec_project_safe(vec1, vec2) \
957 _Generic((vec1), \
958 shz_vec2_t: shz_vec2_project_safe, \
959 shz_vec3_t: shz_vec3_project_safe, \
960 shz_vec4_t: shz_vec4_project_safe)(vec1, vec2)

◆ shz_vec_angles

#define shz_vec_angles ( vec)

C type-generic angle-from-vector extraction.

Definition at line 963 of file shz_vector.h.

963# define shz_vec_angles(vec) \
964 _Generic((vec), \
965 shz_vec2_t: shz_vec2_angle, \
966 shz_vec3_t: shz_vec3_angles)(vec)

◆ shz_vec_angle_between

#define shz_vec_angle_between ( vec1,
vec2 )

C type-generic angle between two vectors.

Definition at line 969 of file shz_vector.h.

969# define shz_vec_angle_between(vec1, vec2) \
970 _Generic((vec1), \
971 shz_vec2_t: shz_vec2_angle_between, \
972 shz_vec3_t: shz_vec3_angle_between)(vec1, vec2)

◆ shz_vec_swizzle

#define shz_vec_swizzle ( vec,
... )

C type-generic vector swizzling.

Definition at line 975 of file shz_vector.h.

975# define shz_vec_swizzle(vec, ...) \
976 _Generic((vec), \
977 shz_vec2_t: shz_vec2_swizzle, \
978 shz_vec3_t: shz_vec3_swizzle, \
979 shz_vec4_t: shz_vec4_swizzle)(vec, __VA_ARGS__)

◆ shz_vec_floor

#define shz_vec_floor ( vec)

C type-generic component-wise floor.

Definition at line 982 of file shz_vector.h.

982# define shz_vec_floor(vec) \
983 _Generic((vec), \
984 shz_vec2_t: shz_vec2_floor, \
985 shz_vec3_t: shz_vec3_floor, \
986 shz_vec4_t: shz_vec4_floor)(vec)

◆ shz_vec_ceil

#define shz_vec_ceil ( vec)

C type-generic component-wise ceil.

Definition at line 989 of file shz_vector.h.

989# define shz_vec_ceil(vec) \
990 _Generic((vec), \
991 shz_vec2_t: shz_vec2_ceil, \
992 shz_vec3_t: shz_vec3_ceil, \
993 shz_vec4_t: shz_vec4_ceil)(vec)

◆ shz_vec_round

#define shz_vec_round ( vec)

C type-generic component-wise round.

Definition at line 996 of file shz_vector.h.

996# define shz_vec_round(vec) \
997 _Generic((vec), \
998 shz_vec2_t: shz_vec2_round, \
999 shz_vec3_t: shz_vec3_round, \
1000 shz_vec4_t: shz_vec4_round)(vec)

◆ shz_vec_fract

#define shz_vec_fract ( vec)

C type-generic component-wise fract.

Definition at line 1003 of file shz_vector.h.

1003# define shz_vec_fract(vec) \
1004 _Generic((vec), \
1005 shz_vec2_t: shz_vec2_fract, \
1006 shz_vec3_t: shz_vec3_fract, \
1007 shz_vec4_t: shz_vec4_fract)(vec)

◆ shz_vec_sign

#define shz_vec_sign ( vec)

C type-generic component-wise sign.

Definition at line 1010 of file shz_vector.h.

1010# define shz_vec_sign(vec) \
1011 _Generic((vec), \
1012 shz_vec2_t: shz_vec2_sign, \
1013 shz_vec3_t: shz_vec3_sign, \
1014 shz_vec4_t: shz_vec4_sign)(vec)

◆ shz_vec_saturate

#define shz_vec_saturate ( vec)

C type-generic component-wise saturate.

Definition at line 1017 of file shz_vector.h.

1017# define shz_vec_saturate(vec) \
1018 _Generic((vec), \
1019 shz_vec2_t: shz_vec2_saturate, \
1020 shz_vec3_t: shz_vec3_saturate, \
1021 shz_vec4_t: shz_vec4_saturate)(vec)

◆ shz_vec_minv

#define shz_vec_minv ( a,
b )

C type-generic pairwise minimum.

Definition at line 1024 of file shz_vector.h.

1024# define shz_vec_minv(a, b) \
1025 _Generic((a), \
1026 shz_vec2_t: shz_vec2_minv, \
1027 shz_vec3_t: shz_vec3_minv, \
1028 shz_vec4_t: shz_vec4_minv)(a, b)

◆ shz_vec_maxv

#define shz_vec_maxv ( a,
b )

C type-generic pairwise maximum.

Definition at line 1031 of file shz_vector.h.

1031# define shz_vec_maxv(a, b) \
1032 _Generic((a), \
1033 shz_vec2_t: shz_vec2_maxv, \
1034 shz_vec3_t: shz_vec3_maxv, \
1035 shz_vec4_t: shz_vec4_maxv)(a, b)

◆ shz_vec_inv_sqrtf

#define shz_vec_inv_sqrtf ( vec)

C type-generic inv_sqrtf.

Definition at line 1038 of file shz_vector.h.

1038# define shz_vec_inv_sqrtf(vec) \
1039 _Generic((vec), \
1040 shz_vec2_t: shz_vec2_inv_sqrtf, \
1041 shz_vec3_t: shz_vec3_inv_sqrtf, \
1042 shz_vec4_t: shz_vec4_inv_sqrtf)(vec)

◆ shz_vec_sqrtf

#define shz_vec_sqrtf ( vec)

C type-generic sqrtf.

Definition at line 1045 of file shz_vector.h.

1045# define shz_vec_sqrtf(vec) \
1046 _Generic((vec), \
1047 shz_vec2_t: shz_vec2_sqrtf, \
1048 shz_vec3_t: shz_vec3_sqrtf, \
1049 shz_vec4_t: shz_vec4_sqrtf)(vec)

◆ shz_vec_stepv

#define shz_vec_stepv ( vec,
edge )

C type-generic component-wise step.

Definition at line 1052 of file shz_vector.h.

1052# define shz_vec_stepv(vec, edge) \
1053 _Generic((vec), \
1054 shz_vec2_t: shz_vec2_stepv, \
1055 shz_vec3_t: shz_vec3_stepv, \
1056 shz_vec4_t: shz_vec4_stepv)(vec, edge)

◆ shz_vec_step

#define shz_vec_step ( vec,
edge )

C type-generic step.

Definition at line 1059 of file shz_vector.h.

1059# define shz_vec_step(vec, edge) \
1060 _Generic((vec), \
1061 shz_vec2_t: shz_vec2_step, \
1062 shz_vec3_t: shz_vec3_step, \
1063 shz_vec4_t: shz_vec4_step)(vec, edge)

◆ shz_vec_smoothstepv

#define shz_vec_smoothstepv ( vec,
edge0,
edge1 )

C type-generic component-wise smoothstep.

Definition at line 1066 of file shz_vector.h.

1066# define shz_vec_smoothstepv(vec, edge0, edge1) \
1067 _Generic((vec), \
1068 shz_vec2_t: shz_vec2_smoothstepv, \
1069 shz_vec3_t: shz_vec3_smoothstepv, \
1070 shz_vec4_t: shz_vec4_smoothstepv)(vec, edge0, edge1)

◆ shz_vec_smoothstep

#define shz_vec_smoothstep ( vec,
edge0,
edge1 )

C type-generic smoothstep.

Definition at line 1073 of file shz_vector.h.

1073# define shz_vec_smoothstep(vec, edge0, edge1) \
1074 _Generic((vec), \
1075 shz_vec2_t: shz_vec2_smoothstep, \
1076 shz_vec3_t: shz_vec3_smoothstep, \
1077 shz_vec4_t: shz_vec4_smoothstep)(vec, edge0, edge1)

◆ shz_vec_smoothstepv_safe

#define shz_vec_smoothstepv_safe ( vec,
edge0,
edge1 )

C type-generic component-wise smoothstep_safe.

Definition at line 1080 of file shz_vector.h.

1080# define shz_vec_smoothstepv_safe(vec, edge0, edge1) \
1081 _Generic((vec), \
1082 shz_vec2_t: shz_vec2_smoothstepv_safe, \
1083 shz_vec3_t: shz_vec3_smoothstepv_safe, \
1084 shz_vec4_t: shz_vec4_smoothstepv_safe)(vec, edge0, edge1)

◆ shz_vec_smoothstep_safe

#define shz_vec_smoothstep_safe ( vec,
edge0,
edge1 )

C type-generic smoothstep_safe.

Definition at line 1087 of file shz_vector.h.

1087# define shz_vec_smoothstep_safe(vec, edge0, edge1) \
1088 _Generic((vec), \
1089 shz_vec2_t: shz_vec2_smoothstep_safe, \
1090 shz_vec3_t: shz_vec3_smoothstep_safe, \
1091 shz_vec4_t: shz_vec4_smoothstep_safe)(vec, edge0, edge1)

Typedef Documentation

◆ shz_vec2

Alternate typedef for the shz_vec2 struct for those who hate POSIX-style.

Definition at line 49 of file shz_vector.h.

◆ shz_vec3

Alternate typedef for the shz_vec3 struct for those who hate POSIX-style.

Definition at line 74 of file shz_vector.h.

◆ shz_vec4

Alternate typedef for the shz_vec4 struct for those who hate POSIX-style.

Definition at line 105 of file shz_vector.h.

Function Documentation

◆ shz_vec2_init()

shz_vec2_t shz_vec2_init ( float x,
float y )
noexcept

Returns a 2D vector with the given x, and y coordinates.

◆ shz_vec3_init()

shz_vec3_t shz_vec3_init ( float x,
float y,
float z )
noexcept

Returns a 3D vector with the given x, y, and z coordinates.

◆ shz_vec4_init()

shz_vec4_t shz_vec4_init ( float x,
float y,
float z,
float w )
noexcept

Returns a 4D vector with the given x, y, z, and w coordinates.

◆ shz_vec2_fill()

shz_vec2_t shz_vec2_fill ( float v)
noexcept

Returns a 2D vector with the value of each component equal to v.

◆ shz_vec3_fill()

shz_vec3_t shz_vec3_fill ( float v)
noexcept

Returns a 3D vector with the value of each compoonent equal to v.

◆ shz_vec4_fill()

shz_vec4_t shz_vec4_fill ( float v)
noexcept

Returns a 4D vector with the value of each component equal to v.

◆ shz_vec2_abs()

shz_vec2_t shz_vec2_abs ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the absolute values of the given vector's components.

◆ shz_vec3_abs()

shz_vec3_t shz_vec3_abs ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the absolute values of the given vector's components.

◆ shz_vec4_abs()

shz_vec4_t shz_vec4_abs ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the absolute values of the given vector's components.

◆ shz_vec2_neg()

shz_vec2_t shz_vec2_neg ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the negative values of the given vector's components.

◆ shz_vec3_neg()

shz_vec3_t shz_vec3_neg ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the negative values of the given vector's components.

◆ shz_vec4_neg()

shz_vec4_t shz_vec4_neg ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the negative values of the given vector's components.

◆ shz_vec2_inv()

shz_vec2_t shz_vec2_inv ( shz_vec2_t vec)
noexcept

Returns the 2D vector whose components have been inverted or reciprocated.

◆ shz_vec3_inv()

shz_vec3_t shz_vec3_inv ( shz_vec3_t vec)
noexcept

Returns the 3D vector whose components have been inverted or reciprocated.

◆ shz_vec4_inv()

shz_vec4_t shz_vec4_inv ( shz_vec4_t vec)
noexcept

Returns the 4D vector whose components have been inverted or reciprocated.

◆ shz_vec2_max()

float shz_vec2_max ( shz_vec2_t vec)
noexcept

Returns the maximum value of both of the given vector's components.

◆ shz_vec3_max()

float shz_vec3_max ( shz_vec3_t vec)
noexcept

Returns the maximum value of the given vector's 3 components.

◆ shz_vec4_max()

float shz_vec4_max ( shz_vec4_t vec)
noexcept

Returns the maximum value of the given vector's 4 componetns.

◆ shz_vec2_min()

float shz_vec2_min ( shz_vec2_t vec)
noexcept

Retuns the minimum value of both of the given vector's components.

◆ shz_vec3_min()

float shz_vec3_min ( shz_vec3_t vec)
noexcept

Returns the minimum value of the given vector's 3 components.

◆ shz_vec4_min()

float shz_vec4_min ( shz_vec4_t vec)
noexcept

Returns the minimum value of the given vector's 4 components.

◆ shz_vec2_clamp()

shz_vec2_t shz_vec2_clamp ( shz_vec2_t vec,
float min,
float max )
noexcept

Clamps the values of the given 2D vec between min and max, returning a new vector.

◆ shz_vec3_clamp()

shz_vec3_t shz_vec3_clamp ( shz_vec3_t vec,
float min,
float max )
noexcept

Clamps the values of the given 3D vec between min and max, returning a new vector.

◆ shz_vec4_clamp()

shz_vec4_t shz_vec4_clamp ( shz_vec4_t vec,
float min,
float max )
noexcept

Clamps the values of the given 4D vec between min and max, returning a new vector.

◆ shz_vec2_floor()

shz_vec2_t shz_vec2_floor ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the floor of the given vector's components.

◆ shz_vec3_floor()

shz_vec3_t shz_vec3_floor ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the floor of the given vector's components.

◆ shz_vec4_floor()

shz_vec4_t shz_vec4_floor ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the floor of the given vector's components.

◆ shz_vec2_ceil()

shz_vec2_t shz_vec2_ceil ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the ceil of the given vector's components.

◆ shz_vec3_ceil()

shz_vec3_t shz_vec3_ceil ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the ceil of the given vector's components.

◆ shz_vec4_ceil()

shz_vec4_t shz_vec4_ceil ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the ceil of the given vector's components.

◆ shz_vec2_round()

shz_vec2_t shz_vec2_round ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the rounded values of the given vector's components.

◆ shz_vec3_round()

shz_vec3_t shz_vec3_round ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the rounded values of the given vector's components.

◆ shz_vec4_round()

shz_vec4_t shz_vec4_round ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the rounded values of the given vector's components.

◆ shz_vec2_fract()

shz_vec2_t shz_vec2_fract ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the fractional parts of the given vector's components.

◆ shz_vec3_fract()

shz_vec3_t shz_vec3_fract ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the fractional parts of the given vector's components.

◆ shz_vec4_fract()

shz_vec4_t shz_vec4_fract ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the fractional parts of the given vector's components.

◆ shz_vec2_sign()

shz_vec2_t shz_vec2_sign ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the signs (-1, 0, or 1) of the given vector's components.

◆ shz_vec3_sign()

shz_vec3_t shz_vec3_sign ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the signs (-1, 0, or 1) of the given vector's components.

◆ shz_vec4_sign()

shz_vec4_t shz_vec4_sign ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the signs (-1, 0, or 1) of the given vector's components.

◆ shz_vec2_saturate()

shz_vec2_t shz_vec2_saturate ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are saturated (clamped to [0, 1]) values of the given vector's components.

◆ shz_vec3_saturate()

shz_vec3_t shz_vec3_saturate ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are saturated (clamped to [0, 1]) values of the given vector's components.

◆ shz_vec4_saturate()

shz_vec4_t shz_vec4_saturate ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are saturated (clamped to [0, 1]) values of the given vector's components.

◆ shz_vec2_minv()

shz_vec2_t shz_vec2_minv ( shz_vec2_t a,
shz_vec2_t b )
noexcept

Returns a 2D vector whose components are the pairwise minimums of the two given vectors' components.

◆ shz_vec3_minv()

shz_vec3_t shz_vec3_minv ( shz_vec3_t a,
shz_vec3_t b )
noexcept

Returns a 3D vector whose components are the pairwise minimums of the two given vectors' components.

◆ shz_vec4_minv()

shz_vec4_t shz_vec4_minv ( shz_vec4_t a,
shz_vec4_t b )
noexcept

Returns a 4D vector whose components are the pairwise minimums of the two given vectors' components.

◆ shz_vec2_maxv()

shz_vec2_t shz_vec2_maxv ( shz_vec2_t a,
shz_vec2_t b )
noexcept

Returns a 2D vector whose components are the pairwise maximums of the two given vectors' components.

◆ shz_vec3_maxv()

shz_vec3_t shz_vec3_maxv ( shz_vec3_t a,
shz_vec3_t b )
noexcept

Returns a 3D vector whose components are the pairwise maximums of the two given vectors' components.

◆ shz_vec4_maxv()

shz_vec4_t shz_vec4_maxv ( shz_vec4_t a,
shz_vec4_t b )
noexcept

Returns a 4D vector whose components are the pairwise maximums of the two given vectors' components.

◆ shz_vec2_equal()

bool shz_vec2_equal ( shz_vec2_t a,
shz_vec2_t b )
noexcept

Returns true if the values of each element within the two 2D vectors are approximately equal based on relative or absolute tolerance.

◆ shz_vec3_equal()

bool shz_vec3_equal ( shz_vec3_t a,
shz_vec3_t b )
noexcept

Returns true if the values of each element within the two 3D vectors are approximately equal based on relative or absolute tolerance.

◆ shz_vec4_equal()

bool shz_vec4_equal ( shz_vec4_t a,
shz_vec4_t b )
noexcept

Returns true if the values of each element within the two 4D vectors are approximately equal based on relative or absolute tolerance.

◆ shz_vec2_stepv()

shz_vec2_t shz_vec2_stepv ( shz_vec2_t vec,
shz_vec2_t edge )
noexcept

For each component: returns 0.0f if vec[i] < edge[i], otherwise 1.0f.

◆ shz_vec3_stepv()

shz_vec3_t shz_vec3_stepv ( shz_vec3_t vec,
shz_vec3_t edge )
noexcept

For each component: returns 0.0f if vec[i] < edge[i], otherwise 1.0f.

◆ shz_vec4_stepv()

shz_vec4_t shz_vec4_stepv ( shz_vec4_t vec,
shz_vec4_t edge )
noexcept

For each component: returns 0.0f if vec[i] < edge[i], otherwise 1.0f.

◆ shz_vec2_step()

shz_vec2_t shz_vec2_step ( shz_vec2_t vec,
float edge )
noexcept

For each component: returns 0.0f if vec[i] < edge, otherwise 1.0f.

◆ shz_vec3_step()

shz_vec3_t shz_vec3_step ( shz_vec3_t vec,
float edge )
noexcept

For each component: returns 0.0f if vec[i] < edge, otherwise 1.0f.

◆ shz_vec4_step()

shz_vec4_t shz_vec4_step ( shz_vec4_t vec,
float edge )
noexcept

For each component: returns 0.0f if vec[i] < edge, otherwise 1.0f.

◆ shz_vec2_smoothstep()

shz_vec2_t shz_vec2_smoothstep ( shz_vec2_t vec,
float edge0,
float edge1 )
noexcept

For each component: returns 0.0f at/below edge0, 1.0f at/above edge1, smoothly varying in-between.

◆ shz_vec3_smoothstep()

shz_vec3_t shz_vec3_smoothstep ( shz_vec3_t vec,
float edge0,
float edge1 )
noexcept

For each component: returns 0.0f at/below edge0, 1.0f at/above edge1, smoothly varying in-between.

◆ shz_vec4_smoothstep()

shz_vec4_t shz_vec4_smoothstep ( shz_vec4_t vec,
float edge0,
float edge1 )
noexcept

For each component: returns 0.0f at/below edge0, 1.0f at/above edge1, smoothly varying in-between.

◆ shz_vec2_smoothstepv()

shz_vec2_t shz_vec2_smoothstepv ( shz_vec2_t vec,
shz_vec2_t edge0,
shz_vec2_t edge1 )
noexcept

For each component: returns 0.0f at/below edge0[i], 1.0f at/above edge1[i], smoothly varying in-between.

◆ shz_vec3_smoothstepv()

shz_vec3_t shz_vec3_smoothstepv ( shz_vec3_t vec,
shz_vec3_t edge0,
shz_vec3_t edge1 )
noexcept

For each component i: returns 0.0f at/below edge0[i], 1.0f at/above edge1[i], smoothly varying in-between.

◆ shz_vec4_smoothstepv()

shz_vec4_t shz_vec4_smoothstepv ( shz_vec4_t vec,
shz_vec4_t edge0,
shz_vec4_t edge1 )
noexcept

For each component i: returns 0.0f at/below edge0[i], 1.0f at/above edge1[i], smoothly varying in-between.

◆ shz_vec2_smoothstep_safe()

shz_vec2_t shz_vec2_smoothstep_safe ( shz_vec2_t vec,
float edge0,
float edge1 )
noexcept

For each component: returns 0.0f at/below edge0, 1.0f at/above edge1, smoothly varying in-between. Accepts inverse edges.

◆ shz_vec3_smoothstep_safe()

shz_vec3_t shz_vec3_smoothstep_safe ( shz_vec3_t vec,
float edge0,
float edge1 )
noexcept

For each component: returns 0.0f at/below edge0, 1.0f at/above edge1, smoothly varying in-between. Accepts inverse edges.

◆ shz_vec4_smoothstep_safe()

shz_vec4_t shz_vec4_smoothstep_safe ( shz_vec4_t vec,
float edge0,
float edge1 )
noexcept

For each component: returns 0.0f at/below edge0, 1.0f at/above edge1, smoothly varying in-between. Accepts inverse edges.

◆ shz_vec2_smoothstepv_safe()

shz_vec2_t shz_vec2_smoothstepv_safe ( shz_vec2_t vec,
shz_vec2_t edge0,
shz_vec2_t edge1 )
noexcept

For each component: returns 0.0f at/below edge0[i], 1.0f at/above edge1[i], smoothly varying in-between. Accepts inverse edges.

◆ shz_vec3_smoothstepv_safe()

shz_vec3_t shz_vec3_smoothstepv_safe ( shz_vec3_t vec,
shz_vec3_t edge0,
shz_vec3_t edge1 )
noexcept

For each component i: returns 0.0f at/below edge0[i], 1.0f at/above edge1[i], smoothly varying in-between. Accepts inverse edges.

◆ shz_vec4_smoothstepv_safe()

shz_vec4_t shz_vec4_smoothstepv_safe ( shz_vec4_t vec,
shz_vec4_t edge0,
shz_vec4_t edge1 )
noexcept

For each component i: returns 0.0f at/below edge0[i], 1.0f at/above edge1[i], smoothly varying in-between. Accepts inverse edges.

◆ shz_vec2_inv_sqrtf()

shz_vec2_t shz_vec2_inv_sqrtf ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the inverse square root of the given vector's components.

◆ shz_vec3_inv_sqrtf()

shz_vec3_t shz_vec3_inv_sqrtf ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the inverse square root of the given vector's components.

◆ shz_vec4_inv_sqrtf()

shz_vec4_t shz_vec4_inv_sqrtf ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the inverse square root of the given vector's components.

◆ shz_vec2_sqrtf()

shz_vec2_t shz_vec2_sqrtf ( shz_vec2_t vec)
noexcept

Returns a 2D vector whose components are the square root of the given vector's components.

◆ shz_vec3_sqrtf()

shz_vec3_t shz_vec3_sqrtf ( shz_vec3_t vec)
noexcept

Returns a 3D vector whose components are the square root of the given vector's components.

◆ shz_vec4_sqrtf()

shz_vec4_t shz_vec4_sqrtf ( shz_vec4_t vec)
noexcept

Returns a 4D vector whose components are the square root of the given vector's components.

◆ shz_vec2_add()

shz_vec2_t shz_vec2_add ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns a 2D vector whose components are the sums of the given vectors' components.

◆ shz_vec3_add()

shz_vec3_t shz_vec3_add ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns a 3D vector whose components are the sums of the given vectors' components.

◆ shz_vec4_add()

shz_vec4_t shz_vec4_add ( shz_vec4_t vec1,
shz_vec4_t vec2 )
noexcept

Returns a 4D vector whose components are the sums of the given vectors' components.

◆ shz_vec2_sub()

shz_vec2_t shz_vec2_sub ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns a 2D vector whose components are equal to the values of vec1 minus vec2.

◆ shz_vec3_sub()

shz_vec3_t shz_vec3_sub ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns a 3D vector whose components are equal to the values of vec1 minus vec2.

◆ shz_vec4_sub()

shz_vec4_t shz_vec4_sub ( shz_vec4_t vec1,
shz_vec4_t vec2 )
noexcept

Returns a 4D vector whose components are equal to the values of vec1 minus vec2.

◆ shz_vec2_mul()

shz_vec2_t shz_vec2_mul ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns a 2D vector whose component values are those of vec1 times vec2.

◆ shz_vec3_mul()

shz_vec3_t shz_vec3_mul ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns a 3D vector whose component values are those of vec1 times vec2.

◆ shz_vec4_mul()

shz_vec4_t shz_vec4_mul ( shz_vec4_t vec1,
shz_vec4_t vec2 )
noexcept

Returns a 4D vector whose component values are those of vec1 times vec2.

◆ shz_vec2_div()

shz_vec2_t shz_vec2_div ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns a 2D vector whose component values are those of vec1 divided by vec2.

◆ shz_vec3_div()

shz_vec3_t shz_vec3_div ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns a 3D vector whose component values are those of vec1 divided by vec2.

◆ shz_vec4_div()

shz_vec4_t shz_vec4_div ( shz_vec4_t vec1,
shz_vec4_t vec2 )
noexcept

Returns a 4D vector whose component values are those of vec1 divided by vec2.

◆ shz_vec2_scale()

shz_vec2_t shz_vec2_scale ( shz_vec2_t vec,
float factor )
noexcept

Returns a 2D vector whose component values are those of the given vector multiplied by a factor.

◆ shz_vec3_scale()

shz_vec3_t shz_vec3_scale ( shz_vec3_t vec,
float factor )
noexcept

Returns a 3D vector whose component values are those of the given vector multiplied by a factor.

◆ shz_vec4_scale()

shz_vec4_t shz_vec4_scale ( shz_vec4_t vec,
float factor )
noexcept

Returns a 4D vector whose component values are those of the given vector multiplied by a factor.

◆ shz_vec2_magnitude_sqr()

float shz_vec2_magnitude_sqr ( shz_vec2_t vec)
noexcept

Returns the squared magnitude of the given 2D vector.

◆ shz_vec4_magnitude_sqr()

float shz_vec4_magnitude_sqr ( shz_vec4_t vec)
noexcept

Returns the squared magnitude of the given 4D vector.

◆ shz_vec3_magnitude_sqr()

float shz_vec3_magnitude_sqr ( shz_vec3_t vec)
noexcept

Returns the squared magnitude of the given 3D vector.

◆ shz_vec2_magnitude()

float shz_vec2_magnitude ( shz_vec2_t vec)
noexcept

Returns the magnitude of the given 2D vector.

◆ shz_vec3_magnitude()

float shz_vec3_magnitude ( shz_vec3_t vec)
noexcept

Returns the magnitude of the given 3D vector.

◆ shz_vec4_magnitude()

float shz_vec4_magnitude ( shz_vec4_t vec)
noexcept

Returns the magnitude of the given 4D vector.

◆ shz_vec2_magnitude_inv()

float shz_vec2_magnitude_inv ( shz_vec2_t vec)
noexcept

Returns the inverse magnitude of the given 2D vector.

◆ shz_vec3_magnitude_inv()

float shz_vec3_magnitude_inv ( shz_vec3_t vec)
noexcept

Returns the inverse magnitude of the given 3D vector.

◆ shz_vec4_magnitude_inv()

float shz_vec4_magnitude_inv ( shz_vec4_t vec)
noexcept

Returns the inverse magnitude of the given 4D vector.

◆ shz_vec2_normalize()

shz_vec2_t shz_vec2_normalize ( shz_vec2_t vec)
noexcept

Returns a normalized unit vector from the given 2D vector.

◆ shz_vec3_normalize()

shz_vec3_t shz_vec3_normalize ( shz_vec3_t vec)
noexcept

Returns a normalized unit vector from the given 3D vector.

◆ shz_vec4_normalize()

shz_vec4_t shz_vec4_normalize ( shz_vec4_t vec)
noexcept

Returns a normalized unit vector from the given 4D vector.

◆ shz_vec2_normalize_safe()

shz_vec2_t shz_vec2_normalize_safe ( shz_vec2_t vec)
noexcept

SAFELY returns a normalized unit vector from the given 2D vector.

If the vector's magnitude is not > 0.0f, safely returns a zero vector.

◆ shz_vec3_normalize_safe()

shz_vec3_t shz_vec3_normalize_safe ( shz_vec3_t vec)
noexcept

SAFELY returns a normalized unit vector from the given 3D vector.

If the vector's magnitude is not > 0.0f, safely returns a zero vector.

◆ shz_vec4_normalize_safe()

shz_vec4_t shz_vec4_normalize_safe ( shz_vec4_t vec)
noexcept

SAFELY returns a normalized unit vector from the given 4D vector.

If the vector's magnitude is not > 0.0f, safely returns a zero vector.

◆ shz_vec2_dot()

float shz_vec2_dot ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns the dot product between the two given 2D vectors.

◆ shz_vec2_dot2()

shz_vec2_t shz_vec2_dot2 ( shz_vec2_t l,
shz_vec2_t r1,
shz_vec2_t r2 )
noexcept

Returns the two dot products taken between the 2D vector l and 2D vectors r1 and r2.

◆ shz_vec2_dot3()

shz_vec3_t shz_vec2_dot3 ( shz_vec2_t l,
shz_vec2_t r1,
shz_vec2_t r2,
shz_vec2_t r3 )
noexcept

Returns the three dot products taken between the 2D vector l and 2D vectors r1, r2, and r3.

◆ shz_vec3_dot()

float shz_vec3_dot ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns the dot product between the two given 3D vectors.

◆ shz_vec3_dot2()

shz_vec2_t shz_vec3_dot2 ( shz_vec3_t l,
shz_vec3_t r1,
shz_vec3_t r2 )
noexcept

Returns the two dot products taken between the 3D vector l and 3D vectors r1 and r2.

◆ shz_vec3_dot3()

shz_vec3_t shz_vec3_dot3 ( shz_vec3_t l,
shz_vec3_t r1,
shz_vec3_t r2,
shz_vec3_t r3 )
noexcept

Returns the three dot products taken between the 3D vector l and 3D vectors r1, r2, and r3.

◆ shz_vec4_dot()

float shz_vec4_dot ( shz_vec4_t vec1,
shz_vec4_t vec2 )
noexcept

Returns the dot product between the two given 4D vectors.

◆ shz_vec4_dot2()

shz_vec2_t shz_vec4_dot2 ( shz_vec4_t l,
shz_vec4_t r1,
shz_vec4_t r2 )
noexcept

Returns the two dot products taken between the 4D vector l and 4D vectors r1 and r2.

◆ shz_vec4_dot3()

shz_vec3_t shz_vec4_dot3 ( shz_vec4_t l,
shz_vec4_t r1,
shz_vec4_t r2,
shz_vec4_t r3 )
noexcept

Returns the three dot products taken between the 4D vector l and 4D vectors r1, r2, and r3.

◆ shz_vec2_distance()

float shz_vec2_distance ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns the distance between the two given 2D vectors.

◆ shz_vec3_distance()

float shz_vec3_distance ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns the distance between the two given 3D vectors.

◆ shz_vec4_distance()

float shz_vec4_distance ( shz_vec4_t vec1,
shz_vec4_t vec2 )
noexcept

Returns the distance between the two given 4D vectors.

◆ shz_vec2_distance_sqr()

float shz_vec2_distance_sqr ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns the squared-distance between the two given 2D vectors.

◆ shz_vec3_distance_sqr()

float shz_vec3_distance_sqr ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns the squared-distance between the two given 3D vectors.

◆ shz_vec4_distance_sqr()

float shz_vec4_distance_sqr ( shz_vec4_t vec1,
shz_vec4_t vec2 )
noexcept

Returns the squared-distance between the two given 4D vectors.

◆ shz_vec2_move()

shz_vec2_t shz_vec2_move ( shz_vec2_t vec,
shz_vec2_t target,
float max_distance )
noexcept

Returns the given 2D vector, translated towards the target by the given max_distance.

◆ shz_vec3_move()

shz_vec3_t shz_vec3_move ( shz_vec3_t vec,
shz_vec3_t target,
float max_distance )
noexcept

Returns the given 3D vector, translated towards the target by the given max_distance.

◆ shz_vec4_move()

shz_vec4_t shz_vec4_move ( shz_vec4_t vec,
shz_vec4_t target,
float max_distance )
noexcept

Returns the given 4D vector, translated towards the target by the given max_distance.

◆ shz_vec2_lerp()

shz_vec2_t shz_vec2_lerp ( shz_vec2_t a,
shz_vec2_t b,
float t )
noexcept

Returns a 2D vector that is linearly interpolated from a to b by the given 0.0f-1.0f factor, t.

◆ shz_vec3_lerp()

shz_vec3_t shz_vec3_lerp ( shz_vec3_t a,
shz_vec3_t b,
float t )
noexcept

Returns a 3D vector that is linearly interpolated from a to b by the given 0.0f-1.0f factor, t.

◆ shz_vec4_lerp()

shz_vec4_t shz_vec4_lerp ( shz_vec4_t a,
shz_vec4_t b,
float t )
noexcept

Returns a 4D vector that is linearly interpolated from a to b by the given 0.0f-1.0f factor, t.

◆ shz_vec2_reflect()

shz_vec2_t shz_vec2_reflect ( shz_vec2_t incidence,
shz_vec2_t normal )
noexcept

Reflects the given 2D incidence vector against a surface with the given normal, returning the result.

◆ shz_vec3_reflect()

shz_vec3_t shz_vec3_reflect ( shz_vec3_t incidence,
shz_vec3_t normal )
noexcept

Reflects the given 3D incidence vector against a surface with the given normal, returning the result.

◆ shz_vec4_reflect()

shz_vec4_t shz_vec4_reflect ( shz_vec4_t incidence,
shz_vec4_t normal )
noexcept

Reflects the given 4D incidence vector against a surface with the given normal, returning the result.

◆ shz_vec2_refract()

shz_vec2_t shz_vec2_refract ( shz_vec2_t incidence,
shz_vec2_t normal,
float eta )
noexcept

Refracts the given 2D incidence vector against a surface with the given normal using the given refraction index ratio, eta.

◆ shz_vec3_refract()

shz_vec3_t shz_vec3_refract ( shz_vec3_t incidence,
shz_vec3_t normal,
float eta )
noexcept

Refracts the given 3D incidence vector against a surface with the given normal using the given refraction index ratio, eta.

◆ shz_vec4_refract()

shz_vec4_t shz_vec4_refract ( shz_vec4_t incidence,
shz_vec4_t normal,
float eta )
noexcept

Refracts the given 4D incidence vector against a surface with the given normal using the given refraction index ratio, eta.

◆ shz_vec2_cross()

float shz_vec2_cross ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns the cross product, as a scalar, between two 2D vectors.

Note
The definition of the cross-product is ambiguous in 2D space, but the geometric interpretation here is that the result is the magnitude of the orthogonal vector created from the given two along the Z-axis.

◆ shz_vec3_cross()

shz_vec3_t shz_vec3_cross ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns the vector produced by taking the cross-product of the two given 3D vectors.

◆ shz_vec2_project()

shz_vec2_t shz_vec2_project ( shz_vec2_t vec,
shz_vec2_t onto )
noexcept

Returns the resulting vector from projecting the given 2D vector along the given (unit) axis.

◆ shz_vec3_project()

shz_vec3_t shz_vec3_project ( shz_vec3_t vec,
shz_vec3_t onto )
noexcept

Returns the resulting vector from projecting the given 3D vector along the given (unit) axis.

◆ shz_vec4_project()

shz_vec4_t shz_vec4_project ( shz_vec4_t vec,
shz_vec4_t onto )
noexcept

Returns the resulting vector from projecting the given 4D vector along the given (unit) axis.

◆ shz_vec2_project_safe()

shz_vec2_t shz_vec2_project_safe ( shz_vec2_t vec,
shz_vec2_t onto )
noexcept

Returns the resulting vector from projecting the given 2D vector along the given (unit) axis.

Note
This routine should safely return the zero vector when vec has a magnitude of 0.0f.

◆ shz_vec3_project_safe()

shz_vec3_t shz_vec3_project_safe ( shz_vec3_t vec,
shz_vec3_t onto )
noexcept

Returns the resulting vector from projecting the given 3D vector along the given (unit) axis.

Note
This routine should safely return the zero vector when vec has a magnitude of 0.0f.

◆ shz_vec4_project_safe()

shz_vec4_t shz_vec4_project_safe ( shz_vec4_t vec,
shz_vec4_t onto )
noexcept

Returns the resulting vector from projecting the given 4D vector along the given (unit) axis.

Note
This routine should safely return the zero vector when vec has a magnitude of 0.0f.

◆ shz_vec3_reject()

shz_vec3_t shz_vec3_reject ( shz_vec3_t vec,
shz_vec3_t onto )
noexcept

Returns the rejection of the given vector, vec, onto another vector, onto.

◆ shz_vec3_triple()

float shz_vec3_triple ( shz_vec3_t a,
shz_vec3_t b,
shz_vec3_t c )
noexcept

Returns the 3D vector "triple product" between vector's a, b, and c.

◆ shz_vec3_perp()

shz_vec3_t shz_vec3_perp ( shz_vec3_t vec)
noexcept

Returns a vector which is perpendicular to the given vector.

◆ shz_vec3_barycenter()

shz_vec3_t shz_vec3_barycenter ( shz_vec3_t p,
shz_vec3_t a,
shz_vec3_t b,
shz_vec3_t c )
noexcept

Computes barycentric coordinates <u, v, w> for point p, within the plane of the triangle with vertices a, b, and c.

◆ shz_vec3_orthonormalize()

void shz_vec3_orthonormalize ( shz_vec3_t in1,
shz_vec3_t in2,
shz_vec3_t * out1,
shz_vec3_t * out2 )
noexcept

Returns 2 3D vectors which are normalized and orthogonal to the two input vectors.

◆ shz_vec3_cubic_hermite()

shz_vec3_t shz_vec3_cubic_hermite ( shz_vec3_t vec,
shz_vec3_t tangent1,
shz_vec3_t vec2,
shz_vec3_t tangent2,
float amounht )
noexcept

Calculates the cubic hermite interpolation between two vectors and their tangents.

◆ shz_vec2_angle_between()

float shz_vec2_angle_between ( shz_vec2_t vec1,
shz_vec2_t vec2 )
noexcept

Returns the angle formed between the given 2D vectors in radians.

◆ shz_vec3_angle_between()

float shz_vec3_angle_between ( shz_vec3_t vec1,
shz_vec3_t vec2 )
noexcept

Returns the angle formed between the given 3D vectors in radians.

◆ shz_vec2_angle()

float shz_vec2_angle ( shz_vec2_t vec)
noexcept

Returns the angle formed between the positive X axis and the given 2D vector, in radians.

◆ shz_vec3_angles()

shz_vec3_t shz_vec3_angles ( shz_vec3_t vec)
noexcept

Returns the angles formed between the positive X axis and the given 3D vector, in radians.

◆ shz_vec2_from_sincos()

shz_vec2_t shz_vec2_from_sincos ( shz_sincos_t sincos)
noexcept

Returns the 2D unit vector representing a rotation from the positive X axis.

◆ shz_vec3_from_sincos()

shz_vec3_t shz_vec3_from_sincos ( shz_sincos_t azimuth,
shz_sincos_t elevation )
noexcept

Returns the 3D unit vector representing the given rotation angles relative to the positive X axis.

◆ shz_vec2_from_angle()

shz_vec2_t shz_vec2_from_angle ( float radians)
noexcept

Returns the 2D unit vector representing a rotation from the positive X axis in radians.

◆ shz_vec3_from_angles()

shz_vec3_t shz_vec3_from_angles ( float azimuth,
float elevation )
noexcept

Returns the 3D unit vector representing the given rotation angles relative to the positive X axis in radians.

◆ shz_vec2_from_angle_deg()

shz_vec2_t shz_vec2_from_angle_deg ( float degrees)
noexcept

Returns the 2D unit vector representing a rotation from the positive X axis in degrees.

◆ shz_vec3_from_angles_deg()

shz_vec3_t shz_vec3_from_angles_deg ( float azimuth,
float elevation )
noexcept

Returns the 3D unit vector representing the given rotation angles relative to the positive X axis in degrees.

◆ shz_vec2_rotate()

shz_vec2_t shz_vec2_rotate ( shz_vec2_t vec,
float radians )
noexcept

Rotates the given 2D vector about the Z axis by the given angle in radians.

◆ shz_vec3_rotate_x()

shz_vec3_t shz_vec3_rotate_x ( shz_vec3_t vec,
float radians )
noexcept

Rotates the given 3D vector about the X axis by the given angle in radians.

Warning
This routine should only be used for one-off rotations of a single vector. To rotate multiple vectors in a batch, use the XMTRX API.
See also
shz_xmtrx_apply_rotation_x()

◆ shz_vec3_rotate_y()

shz_vec3_t shz_vec3_rotate_y ( shz_vec3_t vec,
float radians )
noexcept

Rotates the given 3D vector about the Y axis by the given angle in radians.

Warning
This routine should only be used for one-off rotations of a single vector. To rotate multiple vectors in a batch, use the XMTRX API.
See also
shz_xmtrx_apply_rotation_y()

◆ shz_vec3_rotate_z()

shz_vec3_t shz_vec3_rotate_z ( shz_vec3_t vec,
float radians )
noexcept

Rotates the given 3D vector about the Z axis by the given angle in radians.

Warning
This routine should only be used for one-off rotations of a single vector. To rotate multiple vectors in a batch, use the XMTRX API.
See also
shz_xmtrx_apply_rotation_z()

◆ shz_vec2_vec3()

shz_vec3_t shz_vec2_vec3 ( shz_vec2_t vec,
float z )
noexcept

Extends a 2D vector to 3D, using z as the value of the Z component.

◆ shz_vec2_vec4()

shz_vec4_t shz_vec2_vec4 ( shz_vec2_t vec,
float z,
float w )
noexcept

Extends a 2D vector to 4D, using z and w as the values of the Z and W components.

◆ shz_vec3_vec4()

shz_vec4_t shz_vec3_vec4 ( shz_vec3_t vec,
float w )
noexcept

Extends a 3D vector to 4D, using w as the value of the W component.

◆ shz_vec2_swizzle()

shz_vec2_t shz_vec2_swizzle ( shz_vec2_t vec,
unsigned x_idx,
unsigned y_idx )
noexcept

Returns a 2D vector whose elements are equal to the source vector's values at the given indices.

◆ shz_vec3_swizzle()

shz_vec3_t shz_vec3_swizzle ( shz_vec3_t vec,
unsigned x_idx,
unsigned y_idx,
unsigned z_idx )
noexcept

Returns a 3D vector whose elements are equal to the source vector's values at the given indices.

◆ shz_vec4_swizzle()

shz_vec4_t shz_vec4_swizzle ( shz_vec4_t vec,
unsigned x_idx,
unsigned y_idx,
unsigned z_idx,
unsigned w_idx )
noexcept

Returns a new 2D vector whose elements are equal to the source vector's values at the given indices.