src/geometry.cpp

changeset 122
b54b350dff5d
parent 115
ed884a2fb009
child 123
e3fe3617b631
equal deleted inserted replaced
121:000781318c36 122:b54b350dff5d
1 #include <glm/gtc/matrix_transform.hpp> 1 #include <glm/gtc/matrix_transform.hpp>
2 #include "geometry.h" 2 #include "geometry.h"
3 #include "ring.h"
4 #include "maths.h"
3 5
4 /** 6 /**
5 * @brief Computes line-plane intersection 7 * @brief Computes line-plane intersection
6 * @param line 8 * @param line
7 * @param plane 9 * @param plane
194 return { 196 return {
195 glm::vec2{rectangle.right(), rectangle.top()}, 197 glm::vec2{rectangle.right(), rectangle.top()},
196 glm::vec2{rectangle.right(), rectangle.bottom()} 198 glm::vec2{rectangle.right(), rectangle.bottom()}
197 }; 199 };
198 } 200 }
201
202 bool geom::convex(const std::vector<glm::vec3>& polygon)
203 {
204 const int n = polygon.size();
205 auto polygonRing = iter::ring(polygon, n);
206 std::vector<glm::vec3> crosses;
207 crosses.resize(n);
208 for (int i = 0; i < n; i += 1)
209 {
210 crosses[i] = glm::cross(polygonRing[i - 1] - polygonRing[i], polygonRing[i + 1] - polygonRing[i]);
211 }
212 for (int i = 0; i < n - 1; i += 1)
213 {
214 const float dotp = glm::dot(crosses[0], crosses[i + 1]);
215 if (dotp < 0 or qFuzzyIsNull(dotp))
216 {
217 return false;
218 }
219 }
220 return true;
221 }

mercurial