Clutter Engine 0.0.1
Loading...
Searching...
No Matches
vector_query.inl
1
2
3#include <cassert>
4
5namespace glm{
6namespace detail
7{
8 template<length_t L, typename T, qualifier Q>
10
11 template<typename T, qualifier Q>
12 struct compute_areCollinear<2, T, Q>
13 {
14 GLM_FUNC_QUALIFIER static bool call(vec<2, T, Q> const& v0, vec<2, T, Q> const& v1, T const& epsilon)
15 {
16 return length(cross(vec<3, T, Q>(v0, static_cast<T>(0)), vec<3, T, Q>(v1, static_cast<T>(0)))) < epsilon;
17 }
18 };
19
20 template<typename T, qualifier Q>
21 struct compute_areCollinear<3, T, Q>
22 {
23 GLM_FUNC_QUALIFIER static bool call(vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, T const& epsilon)
24 {
25 return length(cross(v0, v1)) < epsilon;
26 }
27 };
28
29 template<typename T, qualifier Q>
30 struct compute_areCollinear<4, T, Q>
31 {
32 GLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v0, vec<4, T, Q> const& v1, T const& epsilon)
33 {
34 return length(cross(vec<3, T, Q>(v0), vec<3, T, Q>(v1))) < epsilon;
35 }
36 };
37
38 template<length_t L, typename T, qualifier Q>
40
41 template<typename T, qualifier Q>
42 struct compute_isCompNull<2, T, Q>
43 {
44 GLM_FUNC_QUALIFIER static vec<2, bool, Q> call(vec<2, T, Q> const& v, T const& epsilon)
45 {
46 return vec<2, bool, Q>(
47 (abs(v.x) < epsilon),
48 (abs(v.y) < epsilon));
49 }
50 };
51
52 template<typename T, qualifier Q>
53 struct compute_isCompNull<3, T, Q>
54 {
55 GLM_FUNC_QUALIFIER static vec<3, bool, Q> call(vec<3, T, Q> const& v, T const& epsilon)
56 {
57 return vec<3, bool, Q>(
58 (abs(v.x) < epsilon),
59 (abs(v.y) < epsilon),
60 (abs(v.z) < epsilon));
61 }
62 };
63
64 template<typename T, qualifier Q>
65 struct compute_isCompNull<4, T, Q>
66 {
67 GLM_FUNC_QUALIFIER static vec<4, bool, Q> call(vec<4, T, Q> const& v, T const& epsilon)
68 {
69 return vec<4, bool, Q>(
70 (abs(v.x) < epsilon),
71 (abs(v.y) < epsilon),
72 (abs(v.z) < epsilon),
73 (abs(v.w) < epsilon));
74 }
75 };
76
77}//namespace detail
78
79 template<length_t L, typename T, qualifier Q>
80 GLM_FUNC_QUALIFIER bool areCollinear(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)
81 {
82 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'areCollinear' only accept floating-point inputs");
83
85 }
86
87 template<length_t L, typename T, qualifier Q>
88 GLM_FUNC_QUALIFIER bool areOrthogonal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)
89 {
90 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'areOrthogonal' only accept floating-point inputs");
91
92 return abs(dot(v0, v1)) <= max(
93 static_cast<T>(1),
94 length(v0)) * max(static_cast<T>(1), length(v1)) * epsilon;
95 }
96
97 template<length_t L, typename T, qualifier Q>
98 GLM_FUNC_QUALIFIER bool isNormalized(vec<L, T, Q> const& v, T const& epsilon)
99 {
100 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isNormalized' only accept floating-point inputs");
101
102 return abs(length(v) - static_cast<T>(1)) <= static_cast<T>(2) * epsilon;
103 }
104
105 template<length_t L, typename T, qualifier Q>
106 GLM_FUNC_QUALIFIER bool isNull(vec<L, T, Q> const& v, T const& epsilon)
107 {
108 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isNull' only accept floating-point inputs");
109
110 return length(v) <= epsilon;
111 }
112
113 template<length_t L, typename T, qualifier Q>
114 GLM_FUNC_QUALIFIER vec<L, bool, Q> isCompNull(vec<L, T, Q> const& v, T const& epsilon)
115 {
116 GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isCompNull' only accept floating-point inputs");
117
119 }
120
121 template<typename T, qualifier Q>
122 GLM_FUNC_QUALIFIER vec<2, bool, Q> isCompNull(vec<2, T, Q> const& v, T const& epsilon)
123 {
124 return vec<2, bool, Q>(
125 abs(v.x) < epsilon,
126 abs(v.y) < epsilon);
127 }
128
129 template<typename T, qualifier Q>
130 GLM_FUNC_QUALIFIER vec<3, bool, Q> isCompNull(vec<3, T, Q> const& v, T const& epsilon)
131 {
132 return vec<3, bool, Q>(
133 abs(v.x) < epsilon,
134 abs(v.y) < epsilon,
135 abs(v.z) < epsilon);
136 }
137
138 template<typename T, qualifier Q>
139 GLM_FUNC_QUALIFIER vec<4, bool, Q> isCompNull(vec<4, T, Q> const& v, T const& epsilon)
140 {
141 return vec<4, bool, Q>(
142 abs(v.x) < epsilon,
143 abs(v.y) < epsilon,
144 abs(v.z) < epsilon,
145 abs(v.w) < epsilon);
146 }
147
148 template<length_t L, typename T, qualifier Q>
149 GLM_FUNC_QUALIFIER bool areOrthonormal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)
150 {
151 return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon);
152 }
153
154}//namespace glm
GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x)
GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y)
Definition func_common.inl:25
GLM_FUNC_QUALIFIER vec< 3, T, Q > cross(vec< 3, T, Q > const &x, vec< 3, T, Q > const &y)
Definition func_geometric.inl:175
GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()
Return the epsilon constant for floating point types.
Definition scalar_constants.inl:6
GLM_FUNC_DECL bool isNull(mat< 2, 2, T, Q > const &m, T const &epsilon)
Definition matrix_query.inl:6
GLM_FUNC_DECL bool isNormalized(mat< 2, 2, T, Q > const &m, T const &epsilon)
Definition matrix_query.inl:49
GLM_FUNC_DECL bool areCollinear(vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
Definition vector_query.inl:80
GLM_FUNC_DECL bool areOrthonormal(vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
Definition vector_query.inl:149
GLM_FUNC_DECL bool areOrthogonal(vec< L, T, Q > const &v0, vec< L, T, Q > const &v1, T const &epsilon)
Definition vector_query.inl:88
GLM_FUNC_DECL vec< L, bool, Q > isCompNull(vec< L, T, Q > const &v, T const &epsilon)
Definition vector_query.inl:114
detail namespace with internal helper functions
Definition json.h:249
Core features
Definition common.hpp:21
Definition vector_query.inl:9
Definition vector_query.inl:39
Definition qualifier.hpp:35