-
Notifications
You must be signed in to change notification settings - Fork 0
vector specifics
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.
These are the essential geometric operations needed for lighting calculations, physics, camera systems, collision detection, and spatial queries.
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).
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).
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).
Returns the cross product of vectors (b-a) and (c-a). Useful for turn detection:
-
> 0: Left turn (counterclockwise) -
< 0: Right turn (clockwise) -
= 0: Collinear
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).
| 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 |
| 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 |
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 |
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 |
Rotate a 2D vector by an angle (radians).
Signature: lm2_v2_f32 lm2_v2_rotate_f32(lm2_v2_f32 v, float angle)
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)
| 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.
Reflect a vector across a normal.
| Function | Description |
|---|---|
lm2_v2_reflect_f32(v, normal) |
2D reflection |
lm2_v3_reflect_f32(v, normal) |
3D reflection |
Project vector a onto vector b.
| Function | Description |
|---|---|
lm2_v2_project_f32(a, b) |
2D projection |
lm2_v3_project_f32(a, b) |
3D projection |
See also the vector conversion functions in lm2_vector_conversions.h:
-
Type conversions:
lm2_v2_f32_to_i32(v),lm2_v3_f64_to_f32(v), etc. -
Upcast:
lm2_v2_upcast_f32(v, z)— v2 to v3 by adding z component -
Downcast:
lm2_v3_downcast_f32(v)— v3 to v2 by dropping z component
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)