mirror of
https://github.com/Karaka-Management/cOMS.git
synced 2026-01-25 17:28:39 +00:00
49 lines
1.1 KiB
C
Executable File
49 lines
1.1 KiB
C
Executable File
/**
|
|
* Jingga
|
|
*
|
|
* @package Utils
|
|
* @copyright Dennis Eichhorn
|
|
* @license OMS License 1.0
|
|
* @version 1.0.0
|
|
* @link https://jingga.app
|
|
*/
|
|
#ifndef UTILS_MATH_UTILS_H
|
|
#define UTILS_MATH_UTILS_H
|
|
|
|
#include "../Stdlib/Intrinsics.h"
|
|
|
|
#define OMS_PI 3.14159265358979323846f
|
|
#define OMS_PI_OVER_TWO OMS_PI / 2.0f
|
|
#define OMS_TWO_PI 2 * OMS_PI
|
|
|
|
#define OMS_MAX(a, b) ((a) > (b) ? (a) : (b))
|
|
#define OMS_MIN(a, b) ((a) > (b) ? (b) : (a))
|
|
#define OMS_ABS(a) ((a) > 0 ? (a) : -(a))
|
|
#define OMS_DEG2RAD(angle) ((angle) * OMS_PI / 180.0f)
|
|
#define OMS_RAD2DEG(angle) ((angle) * 180.0f / OMS_PI)
|
|
#define ROUND_TO_NEAREST(a, b) (((a) + ((b) - 1)) & ~((b) - 1))
|
|
|
|
// @todo implement table based sine wave + approximation if necessary
|
|
// [-PI/2, PI/2]
|
|
inline
|
|
float sin_approx_pih_pih(float x)
|
|
{
|
|
return x - (x * x * x / 6.0f);
|
|
}
|
|
|
|
inline
|
|
float sinf_approx(float x)
|
|
{
|
|
x = x - OMS_TWO_PI * Stdlib::Intrinsics::floor((x + OMS_PI) / OMS_TWO_PI);
|
|
|
|
if (x > OMS_PI_OVER_TWO) {
|
|
x = OMS_PI - x;
|
|
} else if (x < -OMS_PI_OVER_TWO) {
|
|
x = -OMS_PI - x;
|
|
}
|
|
|
|
return x - (x * x * x / 6.0f);
|
|
}
|
|
|
|
#endif
|