LibJuno 1.0.1
LibJuno is a lightweight C11 library designed specifically for embedded systems.
Loading...
Searching...
No Matches
juno_vec.h File Reference

Inline vector and quaternion operations for Juno math types. More...

#include "juno/math/juno_vec_types.h"
#include <stdint.h>
Include dependency graph for juno_vec.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define Juno_Pow2(d)   (d*d)
 Square of a value.
 
#define Juno_Pow3(d)   (d*d*d)
 Cube of a value.
 
#define Juno_Pow4(d)   (d*d*d*d)
 Fourth power of a value.
 

Functions

static JUNO_VEC2_F64_T Juno_Vec2_F64_Add (JUNO_VEC2_F64_T tVec0, JUNO_VEC2_F64_T tVec1)
 Add two 2D vectors (double).
 
static JUNO_VEC2_F64_T Juno_Vec2_F64_Sub (JUNO_VEC2_F64_T tVec0, JUNO_VEC2_F64_T tVec1)
 Subtract two 2D vectors (double).
 
static JUNO_VEC2_F64_T Juno_Vec2_F64_Mult (JUNO_VEC2_F64_T tVec0, double dScalar)
 Scale a 2D vector by a scalar (double).
 
static double Juno_Vec2_F64_Dot (JUNO_VEC2_F64_T tVec0, JUNO_VEC2_F64_T tVec1)
 Dot product of two 2D vectors (double).
 
static double Juno_Vec2_F64_Cross (JUNO_VEC2_F64_T tVec0, JUNO_VEC2_F64_T tVec1)
 2D cross product (double).
 
static double Juno_Vec2_F64_L2Norm2 (JUNO_VEC2_F64_T tVec0)
 Squared L2 norm of a 2D vector (double).
 
static JUNO_VEC2_F32_T Juno_Vec2_F32_Add (JUNO_VEC2_F32_T tVec0, JUNO_VEC2_F32_T tVec1)
 Add two 2D vectors (float).
 
static JUNO_VEC2_F32_T Juno_Vec2_F32_Sub (JUNO_VEC2_F32_T tVec0, JUNO_VEC2_F32_T tVec1)
 Subtract two 2D vectors (float).
 
static JUNO_VEC2_F32_T Juno_Vec2_F32_Mult (JUNO_VEC2_F32_T tVec0, float dScalar)
 Scale a 2D vector by a scalar (float).
 
static float Juno_Vec2_F32_Dot (JUNO_VEC2_F32_T tVec0, JUNO_VEC2_F32_T tVec1)
 Dot product of two 2D vectors (float).
 
static float Juno_Vec2_F32_Cross (JUNO_VEC2_F32_T tVec0, JUNO_VEC2_F32_T tVec1)
 2D cross product (float); returns pseudoscalar z-component.
 
static float Juno_Vec2_F32_L2Norm2 (JUNO_VEC2_F32_T tVec0)
 Squared L2 norm of a 2D vector (float).
 
static JUNO_VEC2_I32_T Juno_Vec2_I32_Add (JUNO_VEC2_I32_T tVec0, JUNO_VEC2_I32_T tVec1)
 Add two 2D vectors (int32).
 
static JUNO_VEC2_I32_T Juno_Vec2_I32_Sub (JUNO_VEC2_I32_T tVec0, JUNO_VEC2_I32_T tVec1)
 Subtract two 2D vectors (int32).
 
static JUNO_VEC2_I32_T Juno_Vec2_I32_Mult (JUNO_VEC2_I32_T tVec0, int32_t dScalar)
 Scale a 2D vector by a scalar (int32).
 
static int32_t Juno_Vec2_I32_Dot (JUNO_VEC2_I32_T tVec0, JUNO_VEC2_I32_T tVec1)
 Dot product of two 2D vectors (int32).
 
static int32_t Juno_Vec2_I32_Cross (JUNO_VEC2_I32_T tVec0, JUNO_VEC2_I32_T tVec1)
 2D cross product (int32); returns pseudoscalar z-component.
 
static float Juno_Vec2_I32_L2Norm2 (JUNO_VEC2_I32_T tVec0)
 Squared L2 norm of a 2D vector (int32 inputs; float return).
 
static JUNO_VEC3_F64_T Juno_Vec3_F64_Add (JUNO_VEC3_F64_T tVec0, JUNO_VEC3_F64_T tVec1)
 Add two 3D vectors (double).
 
static JUNO_VEC3_F64_T Juno_Vec3_F64_Sub (JUNO_VEC3_F64_T tVec0, JUNO_VEC3_F64_T tVec1)
 Subtract two 3D vectors (double).
 
static JUNO_VEC3_F64_T Juno_Vec3_F64_Mult (JUNO_VEC3_F64_T tVec0, double dScalar)
 Scale a 3D vector by a scalar (double).
 
static double Juno_Vec3_F64_Dot (JUNO_VEC3_F64_T tVec0, JUNO_VEC3_F64_T tVec1)
 Dot product of two 3D vectors (double).
 
static JUNO_VEC3_F64_T Juno_Vec3_F64_Cross (JUNO_VEC3_F64_T tVec0, JUNO_VEC3_F64_T tVec1)
 3D cross product (double).
 
static double Juno_Vec3_F64_L2Norm2 (JUNO_VEC3_F64_T tVec0)
 Squared L2 norm of a 3D vector (double).
 
static JUNO_VEC3_F32_T Juno_Vec3_F32_Add (JUNO_VEC3_F32_T tVec0, JUNO_VEC3_F32_T tVec1)
 Add two 3D vectors (float).
 
static JUNO_VEC3_F32_T Juno_Vec3_F32_Sub (JUNO_VEC3_F32_T tVec0, JUNO_VEC3_F32_T tVec1)
 Subtract two 3D vectors (float).
 
static JUNO_VEC3_F32_T Juno_Vec3_F32_Mult (JUNO_VEC3_F32_T tVec0, float dScalar)
 Scale a 3D vector by a scalar (float).
 
static float Juno_Vec3_F32_Dot (JUNO_VEC3_F32_T tVec0, JUNO_VEC3_F32_T tVec1)
 Dot product of two 3D vectors (float).
 
static JUNO_VEC3_F32_T Juno_Vec3_F32_Cross (JUNO_VEC3_F32_T tVec0, JUNO_VEC3_F32_T tVec1)
 3D cross product (float).
 
static float Juno_Vec3_F32_L2Norm2 (JUNO_VEC3_F32_T tVec0)
 Squared L2 norm of a 3D vector (float).
 
static JUNO_VEC3_I32_T Juno_Vec3_I32_Add (JUNO_VEC3_I32_T tVec0, JUNO_VEC3_I32_T tVec1)
 Add two 3D vectors (int32).
 
static JUNO_VEC3_I32_T Juno_Vec3_I32_Sub (JUNO_VEC3_I32_T tVec0, JUNO_VEC3_I32_T tVec1)
 Subtract two 3D vectors (int32).
 
static JUNO_VEC3_I32_T Juno_Vec3_I32_Mult (JUNO_VEC3_I32_T tVec0, int32_t dScalar)
 Scale a 3D vector by a scalar (int32).
 
static int32_t Juno_Vec3_I32_Dot (JUNO_VEC3_I32_T tVec0, JUNO_VEC3_I32_T tVec1)
 Dot product of two 3D vectors (int32).
 
static JUNO_VEC3_I32_T Juno_Vec3_I32_Cross (JUNO_VEC3_I32_T tVec0, JUNO_VEC3_I32_T tVec1)
 3D cross product (int32).
 
static float Juno_Vec3_I32_L2Norm2 (JUNO_VEC3_I32_T tVec0)
 Squared L2 norm of a 3D vector (int32 inputs; float return).
 
static JUNO_RQUAT_F64_T Juno_RQuat_F64_Add (JUNO_RQUAT_F64_T q0, JUNO_RQUAT_F64_T q1)
 Add two real quaternions (double).
 
static JUNO_RQUAT_F64_T Juno_RQuat_F64_Sub (JUNO_RQUAT_F64_T q0, JUNO_RQUAT_F64_T q1)
 Subtract two real quaternions (double).
 
static JUNO_RQUAT_F64_T Juno_RQuat_F64_Mult (JUNO_RQUAT_F64_T q0, double dScalar)
 Scale a real quaternion by a scalar (double).
 
static JUNO_RQUAT_F64_T Juno_RQuat_F64_HamProd (JUNO_RQUAT_F64_T q0, JUNO_RQUAT_F64_T q1)
 Hamilton product of two right-handed real quaternions (double).
 
static JUNO_RQUAT_F64_T Juno_RQuat_F64_Conj (JUNO_RQUAT_F64_T q0)
 Conjugate of a right-handed real quaternion (double).
 
static double Juno_RQuat_F64_L2Norm2 (JUNO_RQUAT_F64_T q0)
 Squared L2 norm of a quaternion (double).
 
static JUNO_RQUAT_F64_T Juno_RQuat_F64_Recip (JUNO_RQUAT_F64_T q0)
 Multiplicative inverse (reciprocal) of a quaternion (double).
 

Detailed Description

Inline vector and quaternion operations for Juno math types.

Provides basic arithmetic (add/sub/scale), dot/cross products, and L2 norms (often squared) for 2D and 3D vectors across double/float/int32 precisions, plus quaternion operations (add/sub/scale, Hamilton product, conjugate, reciprocal). See function comments for squared vs true norm.

Macro Definition Documentation

◆ Juno_Pow2

#define Juno_Pow2 (   d)    (d*d)

Square of a value.

Parameters
dInput value.
Returns
d*d

◆ Juno_Pow3

#define Juno_Pow3 (   d)    (d*d*d)

Cube of a value.

Parameters
dInput value.
Returns
d*d*d

◆ Juno_Pow4

#define Juno_Pow4 (   d)    (d*d*d*d)

Fourth power of a value.

Parameters
dInput value.
Returns
d*d*d*d

Function Documentation

◆ Juno_RQuat_F64_Add()

static JUNO_RQUAT_F64_T Juno_RQuat_F64_Add ( JUNO_RQUAT_F64_T  q0,
JUNO_RQUAT_F64_T  q1 
)
inlinestatic

Add two real quaternions (double).

Component-wise addition using [s, i, j, k] order.

◆ Juno_RQuat_F64_Conj()

static JUNO_RQUAT_F64_T Juno_RQuat_F64_Conj ( JUNO_RQUAT_F64_T  q0)
inlinestatic

Conjugate of a right-handed real quaternion (double).

Negates the vector part: (s, i, j, k) -> (s, -i, -j, -k).

◆ Juno_RQuat_F64_HamProd()

static JUNO_RQUAT_F64_T Juno_RQuat_F64_HamProd ( JUNO_RQUAT_F64_T  q0,
JUNO_RQUAT_F64_T  q1 
)
inlinestatic

Hamilton product of two right-handed real quaternions (double).

Given q0 = (s0, i0, j0, k0) and q1 = (s1, i1, j1, k1) with i^2 = j^2 = k^2 = ijk = -1 and component order [s, i, j, k], the product q = q0 ⊗ q1 is:

  • s' = s0*s1 − i0*i1 − j0*j1 − k0*k1
  • i' = s0*i1 + i0*s1 + j0*k1 − k0*j1
  • j' = s0*j1 − i0*k1 + j0*s1 + k0*i1
  • k' = s0*k1 + i0*j1 − j0*i1 + k0*s1

◆ Juno_RQuat_F64_L2Norm2()

static double Juno_RQuat_F64_L2Norm2 ( JUNO_RQUAT_F64_T  q0)
inlinestatic

Squared L2 norm of a quaternion (double).

◆ Juno_RQuat_F64_Mult()

static JUNO_RQUAT_F64_T Juno_RQuat_F64_Mult ( JUNO_RQUAT_F64_T  q0,
double  dScalar 
)
inlinestatic

Scale a real quaternion by a scalar (double).

◆ Juno_RQuat_F64_Recip()

static JUNO_RQUAT_F64_T Juno_RQuat_F64_Recip ( JUNO_RQUAT_F64_T  q0)
inlinestatic

Multiplicative inverse (reciprocal) of a quaternion (double).

Returns conj(q) / ||q||^2. Caller must ensure non-zero norm.

◆ Juno_RQuat_F64_Sub()

static JUNO_RQUAT_F64_T Juno_RQuat_F64_Sub ( JUNO_RQUAT_F64_T  q0,
JUNO_RQUAT_F64_T  q1 
)
inlinestatic

Subtract two real quaternions (double).

◆ Juno_Vec2_F32_Add()

static JUNO_VEC2_F32_T Juno_Vec2_F32_Add ( JUNO_VEC2_F32_T  tVec0,
JUNO_VEC2_F32_T  tVec1 
)
inlinestatic

Add two 2D vectors (float).

◆ Juno_Vec2_F32_Cross()

static float Juno_Vec2_F32_Cross ( JUNO_VEC2_F32_T  tVec0,
JUNO_VEC2_F32_T  tVec1 
)
inlinestatic

2D cross product (float); returns pseudoscalar z-component.

◆ Juno_Vec2_F32_Dot()

static float Juno_Vec2_F32_Dot ( JUNO_VEC2_F32_T  tVec0,
JUNO_VEC2_F32_T  tVec1 
)
inlinestatic

Dot product of two 2D vectors (float).

◆ Juno_Vec2_F32_L2Norm2()

static float Juno_Vec2_F32_L2Norm2 ( JUNO_VEC2_F32_T  tVec0)
inlinestatic

Squared L2 norm of a 2D vector (float).

◆ Juno_Vec2_F32_Mult()

static JUNO_VEC2_F32_T Juno_Vec2_F32_Mult ( JUNO_VEC2_F32_T  tVec0,
float  dScalar 
)
inlinestatic

Scale a 2D vector by a scalar (float).

◆ Juno_Vec2_F32_Sub()

static JUNO_VEC2_F32_T Juno_Vec2_F32_Sub ( JUNO_VEC2_F32_T  tVec0,
JUNO_VEC2_F32_T  tVec1 
)
inlinestatic

Subtract two 2D vectors (float).

◆ Juno_Vec2_F64_Add()

static JUNO_VEC2_F64_T Juno_Vec2_F64_Add ( JUNO_VEC2_F64_T  tVec0,
JUNO_VEC2_F64_T  tVec1 
)
inlinestatic

Add two 2D vectors (double).

Parameters
tVec0First vector (augend).
tVec1Second vector (addend).
Returns
Component-wise sum tVec0 + tVec1.

◆ Juno_Vec2_F64_Cross()

static double Juno_Vec2_F64_Cross ( JUNO_VEC2_F64_T  tVec0,
JUNO_VEC2_F64_T  tVec1 
)
inlinestatic

2D cross product (double).

Returns the pseudoscalar z-component of the 3D cross product of (x0, y0, 0) × (x1, y1, 0): x0*y1 - y0*x1.

◆ Juno_Vec2_F64_Dot()

static double Juno_Vec2_F64_Dot ( JUNO_VEC2_F64_T  tVec0,
JUNO_VEC2_F64_T  tVec1 
)
inlinestatic

Dot product of two 2D vectors (double).

Returns
tVec0.x*tVec1.x + tVec0.y*tVec1.y

◆ Juno_Vec2_F64_L2Norm2()

static double Juno_Vec2_F64_L2Norm2 ( JUNO_VEC2_F64_T  tVec0)
inlinestatic

Squared L2 norm of a 2D vector (double).

Returns
x^2 + y^2

◆ Juno_Vec2_F64_Mult()

static JUNO_VEC2_F64_T Juno_Vec2_F64_Mult ( JUNO_VEC2_F64_T  tVec0,
double  dScalar 
)
inlinestatic

Scale a 2D vector by a scalar (double).

Parameters
tVec0Input vector.
dScalarScalar multiplier.
Returns
Component-wise product tVec0 * dScalar.

◆ Juno_Vec2_F64_Sub()

static JUNO_VEC2_F64_T Juno_Vec2_F64_Sub ( JUNO_VEC2_F64_T  tVec0,
JUNO_VEC2_F64_T  tVec1 
)
inlinestatic

Subtract two 2D vectors (double).

Parameters
tVec0Minuend vector (from which tVec1 is subtracted).
tVec1Subtrahend vector.
Returns
Component-wise difference tVec0 - tVec1.

◆ Juno_Vec2_I32_Add()

static JUNO_VEC2_I32_T Juno_Vec2_I32_Add ( JUNO_VEC2_I32_T  tVec0,
JUNO_VEC2_I32_T  tVec1 
)
inlinestatic

Add two 2D vectors (int32).

◆ Juno_Vec2_I32_Cross()

static int32_t Juno_Vec2_I32_Cross ( JUNO_VEC2_I32_T  tVec0,
JUNO_VEC2_I32_T  tVec1 
)
inlinestatic

2D cross product (int32); returns pseudoscalar z-component.

◆ Juno_Vec2_I32_Dot()

static int32_t Juno_Vec2_I32_Dot ( JUNO_VEC2_I32_T  tVec0,
JUNO_VEC2_I32_T  tVec1 
)
inlinestatic

Dot product of two 2D vectors (int32).

◆ Juno_Vec2_I32_L2Norm2()

static float Juno_Vec2_I32_L2Norm2 ( JUNO_VEC2_I32_T  tVec0)
inlinestatic

Squared L2 norm of a 2D vector (int32 inputs; float return).

Returns
(float)(x^2 + y^2)

◆ Juno_Vec2_I32_Mult()

static JUNO_VEC2_I32_T Juno_Vec2_I32_Mult ( JUNO_VEC2_I32_T  tVec0,
int32_t  dScalar 
)
inlinestatic

Scale a 2D vector by a scalar (int32).

◆ Juno_Vec2_I32_Sub()

static JUNO_VEC2_I32_T Juno_Vec2_I32_Sub ( JUNO_VEC2_I32_T  tVec0,
JUNO_VEC2_I32_T  tVec1 
)
inlinestatic

Subtract two 2D vectors (int32).

◆ Juno_Vec3_F32_Add()

static JUNO_VEC3_F32_T Juno_Vec3_F32_Add ( JUNO_VEC3_F32_T  tVec0,
JUNO_VEC3_F32_T  tVec1 
)
inlinestatic

Add two 3D vectors (float).

◆ Juno_Vec3_F32_Cross()

static JUNO_VEC3_F32_T Juno_Vec3_F32_Cross ( JUNO_VEC3_F32_T  tVec0,
JUNO_VEC3_F32_T  tVec1 
)
inlinestatic

3D cross product (float).

◆ Juno_Vec3_F32_Dot()

static float Juno_Vec3_F32_Dot ( JUNO_VEC3_F32_T  tVec0,
JUNO_VEC3_F32_T  tVec1 
)
inlinestatic

Dot product of two 3D vectors (float).

◆ Juno_Vec3_F32_L2Norm2()

static float Juno_Vec3_F32_L2Norm2 ( JUNO_VEC3_F32_T  tVec0)
inlinestatic

Squared L2 norm of a 3D vector (float).

◆ Juno_Vec3_F32_Mult()

static JUNO_VEC3_F32_T Juno_Vec3_F32_Mult ( JUNO_VEC3_F32_T  tVec0,
float  dScalar 
)
inlinestatic

Scale a 3D vector by a scalar (float).

◆ Juno_Vec3_F32_Sub()

static JUNO_VEC3_F32_T Juno_Vec3_F32_Sub ( JUNO_VEC3_F32_T  tVec0,
JUNO_VEC3_F32_T  tVec1 
)
inlinestatic

Subtract two 3D vectors (float).

◆ Juno_Vec3_F64_Add()

static JUNO_VEC3_F64_T Juno_Vec3_F64_Add ( JUNO_VEC3_F64_T  tVec0,
JUNO_VEC3_F64_T  tVec1 
)
inlinestatic

Add two 3D vectors (double).

◆ Juno_Vec3_F64_Cross()

static JUNO_VEC3_F64_T Juno_Vec3_F64_Cross ( JUNO_VEC3_F64_T  tVec0,
JUNO_VEC3_F64_T  tVec1 
)
inlinestatic

3D cross product (double).

Returns a vector orthogonal to inputs: (x0,y0,z0)×(x1,y1,z1).

◆ Juno_Vec3_F64_Dot()

static double Juno_Vec3_F64_Dot ( JUNO_VEC3_F64_T  tVec0,
JUNO_VEC3_F64_T  tVec1 
)
inlinestatic

Dot product of two 3D vectors (double).

◆ Juno_Vec3_F64_L2Norm2()

static double Juno_Vec3_F64_L2Norm2 ( JUNO_VEC3_F64_T  tVec0)
inlinestatic

Squared L2 norm of a 3D vector (double).

◆ Juno_Vec3_F64_Mult()

static JUNO_VEC3_F64_T Juno_Vec3_F64_Mult ( JUNO_VEC3_F64_T  tVec0,
double  dScalar 
)
inlinestatic

Scale a 3D vector by a scalar (double).

◆ Juno_Vec3_F64_Sub()

static JUNO_VEC3_F64_T Juno_Vec3_F64_Sub ( JUNO_VEC3_F64_T  tVec0,
JUNO_VEC3_F64_T  tVec1 
)
inlinestatic

Subtract two 3D vectors (double).

◆ Juno_Vec3_I32_Add()

static JUNO_VEC3_I32_T Juno_Vec3_I32_Add ( JUNO_VEC3_I32_T  tVec0,
JUNO_VEC3_I32_T  tVec1 
)
inlinestatic

Add two 3D vectors (int32).

◆ Juno_Vec3_I32_Cross()

static JUNO_VEC3_I32_T Juno_Vec3_I32_Cross ( JUNO_VEC3_I32_T  tVec0,
JUNO_VEC3_I32_T  tVec1 
)
inlinestatic

3D cross product (int32).

◆ Juno_Vec3_I32_Dot()

static int32_t Juno_Vec3_I32_Dot ( JUNO_VEC3_I32_T  tVec0,
JUNO_VEC3_I32_T  tVec1 
)
inlinestatic

Dot product of two 3D vectors (int32).

◆ Juno_Vec3_I32_L2Norm2()

static float Juno_Vec3_I32_L2Norm2 ( JUNO_VEC3_I32_T  tVec0)
inlinestatic

Squared L2 norm of a 3D vector (int32 inputs; float return).

◆ Juno_Vec3_I32_Mult()

static JUNO_VEC3_I32_T Juno_Vec3_I32_Mult ( JUNO_VEC3_I32_T  tVec0,
int32_t  dScalar 
)
inlinestatic

Scale a 3D vector by a scalar (int32).

◆ Juno_Vec3_I32_Sub()

static JUNO_VEC3_I32_T Juno_Vec3_I32_Sub ( JUNO_VEC3_I32_T  tVec0,
JUNO_VEC3_I32_T  tVec1 
)
inlinestatic

Subtract two 3D vectors (int32).