src/geometry.h

changeset 200
ca23936b455b
parent 187
30204975694a
child 201
5d201ee4a9c3
equal deleted inserted replaced
199:6988973515d2 200:ca23936b455b
22 { 22 {
23 glm::vec<N, T, Q> direction; 23 glm::vec<N, T, Q> direction;
24 glm::vec<N, T, Q> anchor; 24 glm::vec<N, T, Q> anchor;
25 }; 25 };
26 26
27 template<int N>
28 struct Polygon
29 {
30 std::array<glm::vec3, N> points;
31 };
32
33 template<int N>
34 struct Polygon2D
35 {
36 glm::vec2 points[N];
37 };
38
39 inline const glm::vec3 origin = {0, 0, 0}; 27 inline const glm::vec3 origin = {0, 0, 0};
40 inline const Plane XY = {{0, 0, 1}, origin}; 28 inline const Plane XY = {{0, 0, 1}, origin};
41 inline const Plane XZ = {{0, 1, 0}, origin}; 29 inline const Plane XZ = {{0, 1, 0}, origin};
42 inline const Plane YZ = {{1, 0, 0}, origin}; 30 inline const Plane YZ = {{1, 0, 0}, origin};
43 using Triangle = Polygon<3>; 31
44 using LineSegment2D = Polygon2D<2>; 32 struct LineSegment
33 {
34 glm::vec3 p1, p2;
35 };
36 struct Triangle
37 {
38 glm::vec3 p1, p2, p3;
39 };
40 struct Quadrilateral
41 {
42 glm::vec3 p1, p2, p3, p4;
43 };
44 struct ConditionalEdge
45 {
46 glm::vec3 p1, p2;
47 glm::vec3 c1, c2;
48 };
49 struct LineSegment2D
50 {
51 glm::vec2 p1, p2;
52 };
53
54 // get polygon type from amount of points
55 template<int N>
56 struct PolygonType {};
57 template<>
58 struct PolygonType<2> { using type = LineSegment; };
59 template<>
60 struct PolygonType<3> { using type = Triangle; };
61 template<>
62 struct PolygonType<4> { using type = Quadrilateral; };
63 template<int N>
64 using Polygon = typename PolygonType<N>::type;
45 65
46 /** 66 /**
47 * @brief Computes a line from two points 67 * @brief Computes a line from two points
48 * @param point_1 68 * @param point_1
49 * @param point_2 69 * @param point_2
152 }; 172 };
153 173
154 glm::vec3 pointOnCurve(const BezierCurve& curve, float t); 174 glm::vec3 pointOnCurve(const BezierCurve& curve, float t);
155 glm::vec3 derivativeOnCurve(const BezierCurve& curve, float t); 175 glm::vec3 derivativeOnCurve(const BezierCurve& curve, float t);
156 } 176 }
177 using namespace geom;

mercurial