math_helper.cpp 969 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * DoRayMe - a quick and dirty Raytracer
  3. * Math helping functions
  4. *
  5. * Created by Manoël Trapier
  6. * Copyright (c) 2020 986-Studio.
  7. *
  8. */
  9. #include <math.h>
  10. #include <float.h>
  11. #include <math_helper.h>
  12. static double current_precision = FLT_EPSILON;
  13. void set_equal_precision(double v)
  14. {
  15. current_precision = v;
  16. }
  17. double getEpsilon()
  18. {
  19. return current_precision;
  20. }
  21. bool double_equal(double a, double b)
  22. {
  23. if (isinf(a) && isinf(b))
  24. return true;
  25. return fabs(a - b) < current_precision;
  26. }
  27. double deg_to_rad(double deg)
  28. {
  29. return deg * M_PI / 180.;
  30. }
  31. double min3(double a, double b, double c)
  32. {
  33. if (a <= b)
  34. {
  35. if (c < a) return c;
  36. return a;
  37. }
  38. if (b <= a)
  39. {
  40. if (c < b) return c;
  41. }
  42. return b;
  43. }
  44. double max3(double a, double b, double c)
  45. {
  46. if (a >= b)
  47. {
  48. if (c > a) return c;
  49. return a;
  50. }
  51. if (b >= a)
  52. {
  53. if (c > b) return c;
  54. }
  55. return b;
  56. }