Functions.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #ifndef ANKI_MATH_FUNCTIONS_H
  2. #define ANKI_MATH_FUNCTIONS_H
  3. #include "anki/util/StdTypes.h"
  4. #include <cmath>
  5. namespace anki {
  6. template<typename Scalar>
  7. constexpr Scalar getPi();
  8. template<>
  9. inline constexpr F32 getPi<F32>()
  10. {
  11. return 3.14159265358979323846f;
  12. }
  13. template<>
  14. inline constexpr F64 getPi<F64>()
  15. {
  16. return 3.14159265358979323846;
  17. }
  18. template<typename Scalar>
  19. constexpr Scalar getEpsilon();
  20. template<>
  21. constexpr F32 getEpsilon<F32>()
  22. {
  23. return 1.0e-6f;
  24. }
  25. template<>
  26. constexpr F64 getEpsilon<F64>()
  27. {
  28. return 1.0e-6;
  29. }
  30. inline Bool isZero(const F32 f)
  31. {
  32. return fabs(f) < getEpsilon<F32>();
  33. }
  34. inline Bool isZero(const F64 f)
  35. {
  36. return fabs(f) < getEpsilon<F64>();
  37. }
  38. inline F32 toRad(const F32 degrees)
  39. {
  40. return degrees * (getPi<F32>() / 180.0f);
  41. }
  42. inline F64 toRad(const F64 degrees)
  43. {
  44. return degrees * (getPi<F64>() / 180.0);
  45. }
  46. inline F32 toDegrees(const F32 rad)
  47. {
  48. return rad * (180.0f / getPi<F32>());
  49. }
  50. inline F64 toDegrees(const F64 rad)
  51. {
  52. return rad * (180.0 / getPi<F64>());
  53. }
  54. inline F32 sin(const F32 rad)
  55. {
  56. return ::sin(rad);
  57. }
  58. inline F64 sin(const F64 rad)
  59. {
  60. return ::sin(rad);
  61. }
  62. inline F32 cos(const F32 rad)
  63. {
  64. return ::cos(rad);
  65. }
  66. inline F64 cos(const F64 rad)
  67. {
  68. return ::cos(rad);
  69. }
  70. void sinCos(const F32 a, F32& sina, F32& cosa);
  71. void sinCos(const F64 a, F64& sina, F64& cosa);
  72. } // end namespace anki
  73. #endif