Scalar.hpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. Copyright (c) 2009 Christopher A. Taylor. All rights reserved.
  3. Redistribution and use in source and binary forms, with or without
  4. modification, are permitted provided that the following conditions are met:
  5. * Redistributions of source code must retain the above copyright notice,
  6. this list of conditions and the following disclaimer.
  7. * Redistributions in binary form must reproduce the above copyright notice,
  8. this list of conditions and the following disclaimer in the documentation
  9. and/or other materials provided with the distribution.
  10. * Neither the name of LibCat nor the names of its contributors may be used
  11. to endorse or promote products derived from this software without
  12. specific prior written permission.
  13. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  14. AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  16. ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  17. LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  18. CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  19. SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  20. INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  21. CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  22. ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  23. POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. #ifndef CAT_SCALAR_HPP
  26. #define CAT_SCALAR_HPP
  27. #include <cat/Platform.hpp>
  28. #include <cmath>
  29. namespace cat {
  30. // PI
  31. #define CAT_TWO_PI_64 6.283185307179586476925286766559
  32. #define CAT_TWO_PI_32 6.28318531f
  33. #define CAT_PI_64 3.1415926535897932384626433832795
  34. #define CAT_PI_32 3.14159265f
  35. #define CAT_HALF_PI_64 1.5707963267948966192313216916398
  36. #define CAT_HALF_PI_32 1.5707963268f
  37. #define CAT_QUARTER_PI_64 0.78539816339744830961566084581988
  38. #define CAT_QUARTER_PI_32 0.7853981634f
  39. #define CAT_INV_PI_64 0.31830988618379067153776752674503
  40. #define CAT_INV_PI_32 0.3183098862f
  41. // Angle conversion
  42. inline f64 Deg2Rad(f64 angle)
  43. {
  44. return angle * CAT_TWO_PI_64 / 360.0;
  45. }
  46. inline f32 Deg2Rad(f32 angle)
  47. {
  48. return angle * CAT_TWO_PI_32 / 360.0f;
  49. }
  50. inline f64 Rad2Deg(f64 angle)
  51. {
  52. return angle * 360.0 / CAT_TWO_PI_64;
  53. }
  54. inline f32 Rad2Deg(f32 angle)
  55. {
  56. return angle * 360.0f / CAT_TWO_PI_32;
  57. }
  58. // Generic clamp() function
  59. template<class Scalar>
  60. void Clamp(Scalar &x, Scalar low, Scalar high)
  61. {
  62. if (x < low) x = low;
  63. else if (x > high) x = high;
  64. }
  65. // Fast inverse square root
  66. f32 InvSqrt(f32 x);
  67. } // namespace cat
  68. #endif // CAT_SCALAR_HPP
粤ICP备19079148号