-
Notifications
You must be signed in to change notification settings - Fork 0
trigonometry
github-actions[bot] edited this page Feb 12, 2026
·
1 revision
Trigonometric functions, angle conversions, angle wrapping, and angular interpolation. All angle parameters are in radians unless noted.
Game and graphics code constantly works with angles for rotation, field of view, arc calculations, and smooth angular interpolation.
| Function | Description |
|---|---|
lm2_cos_f32(angle_rad) |
Cosine |
lm2_sin_f32(angle_rad) |
Sine |
lm2_tan_f32(angle_rad) |
Tangent |
lm2_acos_f32(value) |
Inverse cosine |
lm2_asin_f32(value) |
Inverse sine |
lm2_atan_f32(value) |
Inverse tangent |
lm2_atan2_f32(y, x) |
Two-argument inverse tangent |
| Function | Description |
|---|---|
lm2_deg_to_rad_f32(degrees) |
Degrees to radians |
lm2_rad_to_deg_f32(radians) |
Radians to degrees |
| Function | Description |
|---|---|
lm2_wrap_rad_f32(angle) |
Wrap angle to [-PI, PI] |
lm2_shortest_rad_f32(from, to) |
Shortest angular distance in [-PI, PI] |
lm2_lerp_rad_f32(a, t, b) |
Interpolate angles using shortest path |
| Function | Description |
|---|---|
lm2_wrap_deg_f32(angle) |
Wrap angle to [-180, 180] |
lm2_shortest_deg_f32(from, to) |
Shortest angular distance in [-180, 180] |
lm2_lerp_deg_f32(a, t, b) |
Interpolate angles using shortest path |
All functions are available in _f64 and _f32 variants.
| Constant | Value | Description |
|---|---|---|
LM2_PI_F32 |
3.14159... | PI |
LM2_2PI_F32 |
6.28318... | 2 * PI |
LM2_HPI_F32 |
1.57079... | PI / 2 |
LM2_RAD_TO_DEG_F32 |
57.2957... | Radians-to-degrees multiplier |
LM2_DEG_TO_RAD_F32 |
0.01745... | Degrees-to-radians multiplier |
LM2_EULER_F32 |
0.57721... | Euler-Mascheroni constant |
LM2_SQRT2_F32 |
1.41421... | Square root of 2 |
LM2_E_F32 |
2.71828... | Euler's number |
All constants also available with _F64 suffix.
float angle_deg = 270.0f;
float angle_rad = lm2_deg_to_rad_f32(angle_deg);
float wrapped = lm2_wrap_deg_f32(angle_deg); // -90
// Smoothly interpolate between two angles
float from = lm2_deg_to_rad_f32(350.0f);
float to = lm2_deg_to_rad_f32(10.0f);
float mid = lm2_lerp_rad_f32(from, 0.5f, to); // goes through 0, not 180