master
ブランチ master
VulkanExample / dep / include / glm / ext / vector_reciprocal.inl
4.2 KB、105行 生 Blame 履歴
1/// @ref ext_vector_reciprocal
2
3#include "../trigonometric.hpp"
4#include <limits>
5
6namespace glm
7{
8 // sec
9 template<length_t L, typename T, qualifier Q>
10 GLM_FUNC_QUALIFIER vec<L, T, Q> sec(vec<L, T, Q> const& x)
11 {
12 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'sec' only accept floating-point inputs");
13 return static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(cos, x);
14 }
15
16 // csc
17 template<length_t L, typename T, qualifier Q>
18 GLM_FUNC_QUALIFIER vec<L, T, Q> csc(vec<L, T, Q> const& x)
19 {
20 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'csc' only accept floating-point inputs");
21 return static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(sin, x);
22 }
23
24 // cot
25 template<length_t L, typename T, qualifier Q>
26 GLM_FUNC_QUALIFIER vec<L, T, Q> cot(vec<L, T, Q> const& x)
27 {
28 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'cot' only accept floating-point inputs");
29 T const pi_over_2 = static_cast<T>(3.1415926535897932384626433832795 / 2.0);
30 return detail::functor1<vec, L, T, T, Q>::call(tan, pi_over_2 - x);
31 }
32
33 // asec
34 template<length_t L, typename T, qualifier Q>
35 GLM_FUNC_QUALIFIER vec<L, T, Q> asec(vec<L, T, Q> const& x)
36 {
37 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'asec' only accept floating-point inputs");
38 return detail::functor1<vec, L, T, T, Q>::call(acos, static_cast<T>(1) / x);
39 }
40
41 // acsc
42 template<length_t L, typename T, qualifier Q>
43 GLM_FUNC_QUALIFIER vec<L, T, Q> acsc(vec<L, T, Q> const& x)
44 {
45 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'acsc' only accept floating-point inputs");
46 return detail::functor1<vec, L, T, T, Q>::call(asin, static_cast<T>(1) / x);
47 }
48
49 // acot
50 template<length_t L, typename T, qualifier Q>
51 GLM_FUNC_QUALIFIER vec<L, T, Q> acot(vec<L, T, Q> const& x)
52 {
53 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'acot' only accept floating-point inputs");
54 T const pi_over_2 = static_cast<T>(3.1415926535897932384626433832795 / 2.0);
55 return pi_over_2 - detail::functor1<vec, L, T, T, Q>::call(atan, x);
56 }
57
58 // sech
59 template<length_t L, typename T, qualifier Q>
60 GLM_FUNC_QUALIFIER vec<L, T, Q> sech(vec<L, T, Q> const& x)
61 {
62 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'sech' only accept floating-point inputs");
63 return static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(cosh, x);
64 }
65
66 // csch
67 template<length_t L, typename T, qualifier Q>
68 GLM_FUNC_QUALIFIER vec<L, T, Q> csch(vec<L, T, Q> const& x)
69 {
70 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'csch' only accept floating-point inputs");
71 return static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(sinh, x);
72 }
73
74 // coth
75 template<length_t L, typename T, qualifier Q>
76 GLM_FUNC_QUALIFIER vec<L, T, Q> coth(vec<L, T, Q> const& x)
77 {
78 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'coth' only accept floating-point inputs");
79 return glm::cosh(x) / glm::sinh(x);
80 }
81
82 // asech
83 template<length_t L, typename T, qualifier Q>
84 GLM_FUNC_QUALIFIER vec<L, T, Q> asech(vec<L, T, Q> const& x)
85 {
86 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'asech' only accept floating-point inputs");
87 return detail::functor1<vec, L, T, T, Q>::call(acosh, static_cast<T>(1) / x);
88 }
89
90 // acsch
91 template<length_t L, typename T, qualifier Q>
92 GLM_FUNC_QUALIFIER vec<L, T, Q> acsch(vec<L, T, Q> const& x)
93 {
94 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'acsch' only accept floating-point inputs");
95 return detail::functor1<vec, L, T, T, Q>::call(asinh, static_cast<T>(1) / x);
96 }
97
98 // acoth
99 template<length_t L, typename T, qualifier Q>
100 GLM_FUNC_QUALIFIER vec<L, T, Q> acoth(vec<L, T, Q> const& x)
101 {
102 static_assert(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'acoth' only accept floating-point inputs");
103 return detail::functor1<vec, L, T, T, Q>::call(atanh, static_cast<T>(1) / x);
104 }
105}//namespace glm