Skip to the content.

Vector Specifics

Overview

Higher-level vector operations including dot product, cross product, length, distance, normalization, angle computation, rotation, reflection, and projection. These operate on floating-point vector types.

Why Use This?

These are the essential geometric operations needed for lighting calculations, physics, camera systems, collision detection, and spatial queries.

Functions

Dot Product

Returns the scalar dot product of two vectors.

Function Description
lm2_v2_dot_f32(a, b) 2D dot product (float)
lm2_v3_dot_f32(a, b) 3D dot product (float)
lm2_v4_dot_f32(a, b) 4D dot product (float)

Also available for _f64 and integer types (_i64, _i32, _i16, _i8).

Cross Product

3D Cross Product

Returns the cross product vector, perpendicular to both inputs.

Signature: lm2_v3_f32 lm2_v3_cross_f32(lm2_v3_f32 a, lm2_v3_f32 b)

Also available for _f64 and integer types (_i64, _i32, _i16, _i8).

2D Cross Product

Returns the scalar z-component of the cross product (a.x * b.y - a.y * b.x).

Signature: float lm2_v2_cross_f32(lm2_v2_f32 a, lm2_v2_f32 b)

Also available for _f64 and integer types (_i64, _i32, _i16, _i8).

2D Cross Product (3-point)

Returns the cross product of vectors (b-a) and (c-a). Useful for turn detection:

Signature: float lm2_v2_cross3_f32(lm2_v2_f32 a, lm2_v2_f32 b, lm2_v2_f32 c)

Also available for _f64 and integer types (_i64, _i32, _i16, _i8).

Length / Magnitude

Function Description
lm2_v2_length_f32(v) 2D vector length
lm2_v3_length_f32(v) 3D vector length
lm2_v4_length_f32(v) 4D vector length
lm2_v2_length_sq_f32(v) 2D squared length (no sqrt, faster)
lm2_v3_length_sq_f32(v) 3D squared length
lm2_v4_length_sq_f32(v) 4D squared length

Distance

Function Description
lm2_v2_distance_f32(a, b) 2D distance between points
lm2_v3_distance_f32(a, b) 3D distance between points
lm2_v4_distance_f32(a, b) 4D distance between points
lm2_v2_distance_sq_f32(a, b) 2D squared distance (no sqrt, faster)
lm2_v3_distance_sq_f32(a, b) 3D squared distance
lm2_v4_distance_sq_f32(a, b) 4D squared distance

Normalize

Returns a unit vector in the same direction.

Function Description
lm2_v2_norm_f32(v) Normalize 2D vector
lm2_v3_norm_f32(v) Normalize 3D vector
lm2_v4_norm_f32(v) Normalize 4D vector

Angle

Returns the angle between two vectors in radians.

Function Description
lm2_v2_angle_f32(a, b) Angle between 2D vectors
lm2_v3_angle_f32(a, b) Angle between 3D vectors

2D Rotation

lm2_v2_rotate_f32

Rotate a 2D vector by an angle (radians).

Signature: lm2_v2_f32 lm2_v2_rotate_f32(lm2_v2_f32 v, float angle)

lm2_v2_rotate_around_f32

Rotate a 2D vector around a pivot point by an angle (radians).

Signature: lm2_v2_f32 lm2_v2_rotate_around_f32(lm2_v2_f32 v, lm2_v2_f32 point, float angle)

Perpendicular Vectors (2D)

Function Description
lm2_v2_perp_ccw_f32(v) 90-degree counter-clockwise rotation
lm2_v2_perp_cw_f32(v) 90-degree clockwise rotation

Available for all signed types.

Reflection

Reflect a vector across a normal.

Function Description
lm2_v2_reflect_f32(v, normal) 2D reflection
lm2_v3_reflect_f32(v, normal) 3D reflection

Projection

Project vector a onto vector b.

Function Description
lm2_v2_project_f32(a, b) 2D projection
lm2_v3_project_f32(a, b) 3D projection

Conversions

See also the vector conversion functions in lm2_vector_conversions.h:

Example

lm2_v3_f32 forward = lm2_v3_make_f32(0, 0, -1);
lm2_v3_f32 normal  = lm2_v3_make_f32(0, 1, 0);

// Reflect off a surface
lm2_v3_f32 bounce = lm2_v3_reflect_f32(forward, normal);

// Project onto a plane normal
lm2_v3_f32 projected = lm2_v3_project_f32(forward, normal);

// Angle between vectors
float angle = lm2_v3_angle_f32(forward, normal); // ~1.5708 (PI/2)