From f4d253e27242d080dfde63d26524a7744a16affd Mon Sep 17 00:00:00 2001 From: Leonetienne Date: Mon, 15 Nov 2021 11:35:45 +0100 Subject: [PATCH] migrated doxygen --- Doxygen/build/Collider_8cpp.html | 108 + Doxygen/build/Collider_8cpp__incl.map | 12 + Doxygen/build/Collider_8cpp__incl.md5 | 1 + Doxygen/build/Collider_8cpp__incl.png | Bin 0 -> 19314 bytes Doxygen/build/Collider_8cpp_source.html | 90 + Doxygen/build/Collider_8h.html | 133 + Doxygen/build/Collider_8h__dep__incl.map | 6 + Doxygen/build/Collider_8h__dep__incl.md5 | 1 + Doxygen/build/Collider_8h__dep__incl.png | Bin 0 -> 9737 bytes Doxygen/build/Collider_8h__incl.map | 11 + Doxygen/build/Collider_8h__incl.md5 | 1 + Doxygen/build/Collider_8h__incl.png | Bin 0 -> 17538 bytes Doxygen/build/Collider_8h_source.html | 104 + Doxygen/build/Constants_8h.html | 191 ++ Doxygen/build/Constants_8h__dep__incl.map | 5 + Doxygen/build/Constants_8h__dep__incl.md5 | 1 + Doxygen/build/Constants_8h__dep__incl.png | Bin 0 -> 5735 bytes Doxygen/build/Constants_8h_source.html | 99 + ...2Eule_8vcxproj_8FileListAbsolute_8txt.html | 84 + Doxygen/build/Math_8cpp.html | 130 + Doxygen/build/Math_8cpp__incl.map | 7 + Doxygen/build/Math_8cpp__incl.md5 | 1 + Doxygen/build/Math_8cpp__incl.png | Bin 0 -> 7992 bytes Doxygen/build/Math_8cpp_source.html | 180 ++ Doxygen/build/Math_8h.html | 128 + Doxygen/build/Math_8h__dep__incl.map | 8 + Doxygen/build/Math_8h__dep__incl.md5 | 1 + Doxygen/build/Math_8h__dep__incl.png | Bin 0 -> 10073 bytes Doxygen/build/Math_8h__incl.map | 4 + Doxygen/build/Math_8h__incl.md5 | 1 + Doxygen/build/Math_8h__incl.png | Bin 0 -> 2464 bytes Doxygen/build/Math_8h_source.html | 183 ++ Doxygen/build/Matrix4x4_8cpp.html | 129 + Doxygen/build/Matrix4x4_8cpp__incl.map | 14 + Doxygen/build/Matrix4x4_8cpp__incl.md5 | 1 + Doxygen/build/Matrix4x4_8cpp__incl.png | Bin 0 -> 23450 bytes Doxygen/build/Matrix4x4_8cpp_source.html | 786 +++++ Doxygen/build/Matrix4x4_8h.html | 148 + Doxygen/build/Matrix4x4_8h__dep__incl.map | 15 + Doxygen/build/Matrix4x4_8h__dep__incl.md5 | 1 + Doxygen/build/Matrix4x4_8h__dep__incl.png | Bin 0 -> 41026 bytes Doxygen/build/Matrix4x4_8h__incl.map | 6 + Doxygen/build/Matrix4x4_8h__incl.md5 | 1 + Doxygen/build/Matrix4x4_8h__incl.png | Bin 0 -> 5888 bytes Doxygen/build/Matrix4x4_8h_source.html | 234 ++ Doxygen/build/Quaternion_8cpp.html | 129 + Doxygen/build/Quaternion_8cpp__incl.map | 15 + Doxygen/build/Quaternion_8cpp__incl.md5 | 1 + Doxygen/build/Quaternion_8cpp__incl.png | Bin 0 -> 38683 bytes Doxygen/build/Quaternion_8cpp_source.html | 476 +++ Doxygen/build/Quaternion_8h.html | 134 + Doxygen/build/Quaternion_8h__dep__incl.map | 4 + Doxygen/build/Quaternion_8h__dep__incl.md5 | 1 + Doxygen/build/Quaternion_8h__dep__incl.png | Bin 0 -> 3640 bytes Doxygen/build/Quaternion_8h__incl.map | 12 + Doxygen/build/Quaternion_8h__incl.md5 | 1 + Doxygen/build/Quaternion_8h__incl.png | Bin 0 -> 32059 bytes Doxygen/build/Quaternion_8h_source.html | 194 ++ Doxygen/build/Rect_8h.html | 117 + Doxygen/build/Rect_8h__incl.map | 6 + Doxygen/build/Rect_8h__incl.md5 | 1 + Doxygen/build/Rect_8h__incl.png | Bin 0 -> 6779 bytes Doxygen/build/Rect_8h_source.html | 104 + .../build/TrapazoidalPrismCollider_8cpp.html | 109 + .../TrapazoidalPrismCollider_8cpp__incl.map | 13 + .../TrapazoidalPrismCollider_8cpp__incl.md5 | 1 + .../TrapazoidalPrismCollider_8cpp__incl.png | Bin 0 -> 31904 bytes .../TrapazoidalPrismCollider_8cpp_source.html | 213 ++ .../build/TrapazoidalPrismCollider_8h.html | 134 + ...TrapazoidalPrismCollider_8h__dep__incl.map | 4 + ...TrapazoidalPrismCollider_8h__dep__incl.md5 | 1 + ...TrapazoidalPrismCollider_8h__dep__incl.png | Bin 0 -> 5002 bytes .../TrapazoidalPrismCollider_8h__incl.map | 12 + .../TrapazoidalPrismCollider_8h__incl.md5 | 1 + .../TrapazoidalPrismCollider_8h__incl.png | Bin 0 -> 26179 bytes .../TrapazoidalPrismCollider_8h_source.html | 158 + Doxygen/build/Vector2_8cpp.html | 118 + Doxygen/build/Vector2_8cpp__incl.map | 17 + Doxygen/build/Vector2_8cpp__incl.md5 | 1 + Doxygen/build/Vector2_8cpp__incl.png | Bin 0 -> 36074 bytes Doxygen/build/Vector2_8cpp_source.html | 802 +++++ Doxygen/build/Vector2_8h.html | 143 + Doxygen/build/Vector2_8h__dep__incl.map | 7 + Doxygen/build/Vector2_8h__dep__incl.md5 | 1 + Doxygen/build/Vector2_8h__dep__incl.png | Bin 0 -> 7941 bytes Doxygen/build/Vector2_8h__incl.map | 5 + Doxygen/build/Vector2_8h__incl.md5 | 1 + Doxygen/build/Vector2_8h__incl.png | Bin 0 -> 4591 bytes Doxygen/build/Vector2_8h_source.html | 216 ++ Doxygen/build/Vector3_8cpp.html | 118 + Doxygen/build/Vector3_8cpp__incl.map | 17 + Doxygen/build/Vector3_8cpp__incl.md5 | 1 + Doxygen/build/Vector3_8cpp__incl.png | Bin 0 -> 36121 bytes Doxygen/build/Vector3_8cpp_source.html | 1007 +++++++ Doxygen/build/Vector3_8h.html | 155 + Doxygen/build/Vector3_8h__dep__incl.map | 13 + Doxygen/build/Vector3_8h__dep__incl.md5 | 1 + Doxygen/build/Vector3_8h__dep__incl.png | Bin 0 -> 24078 bytes Doxygen/build/Vector3_8h__incl.map | 10 + Doxygen/build/Vector3_8h__incl.md5 | 1 + Doxygen/build/Vector3_8h__incl.png | Bin 0 -> 17450 bytes Doxygen/build/Vector3_8h_source.html | 227 ++ Doxygen/build/Vector4_8cpp.html | 118 + Doxygen/build/Vector4_8cpp__incl.map | 17 + Doxygen/build/Vector4_8cpp__incl.md5 | 1 + Doxygen/build/Vector4_8cpp__incl.png | Bin 0 -> 36017 bytes Doxygen/build/Vector4_8cpp_source.html | 914 ++++++ Doxygen/build/Vector4_8h.html | 152 + Doxygen/build/Vector4_8h__dep__incl.map | 8 + Doxygen/build/Vector4_8h__dep__incl.md5 | 1 + Doxygen/build/Vector4_8h__dep__incl.png | Bin 0 -> 11897 bytes Doxygen/build/Vector4_8h__incl.map | 10 + Doxygen/build/Vector4_8h__incl.md5 | 1 + Doxygen/build/Vector4_8h__incl.png | Bin 0 -> 17346 bytes Doxygen/build/Vector4_8h_source.html | 227 ++ Doxygen/build/annotated.html | 98 + Doxygen/build/bc_s.png | Bin 0 -> 676 bytes Doxygen/build/bdwn.png | Bin 0 -> 147 bytes .../build/classEule_1_1Collider-members.html | 92 + Doxygen/build/classEule_1_1Collider.html | 151 + .../classEule_1_1Collider__inherit__graph.map | 4 + .../classEule_1_1Collider__inherit__graph.md5 | 1 + .../classEule_1_1Collider__inherit__graph.png | Bin 0 -> 3690 bytes Doxygen/build/classEule_1_1Math-members.html | 104 + Doxygen/build/classEule_1_1Math.html | 702 +++++ .../build/classEule_1_1Matrix4x4-members.html | 145 + Doxygen/build/classEule_1_1Matrix4x4.html | 1979 +++++++++++++ .../classEule_1_1Quaternion-members.html | 116 + Doxygen/build/classEule_1_1Quaternion.html | 1044 +++++++ ...e_1_1TrapazoidalPrismCollider-members.html | 105 + ...classEule_1_1TrapazoidalPrismCollider.html | 544 ++++ ...1TrapazoidalPrismCollider__coll__graph.map | 4 + ...1TrapazoidalPrismCollider__coll__graph.md5 | 1 + ...1TrapazoidalPrismCollider__coll__graph.png | Bin 0 -> 3783 bytes ...apazoidalPrismCollider__inherit__graph.map | 4 + ...apazoidalPrismCollider__inherit__graph.md5 | 1 + ...apazoidalPrismCollider__inherit__graph.png | Bin 0 -> 3783 bytes .../build/classEule_1_1Vector2-members.html | 134 + Doxygen/build/classEule_1_1Vector2.html | 1478 ++++++++++ .../build/classEule_1_1Vector3-members.html | 139 + Doxygen/build/classEule_1_1Vector3.html | 1672 +++++++++++ .../classEule_1_1Vector3__coll__graph.map | 4 + .../classEule_1_1Vector3__coll__graph.md5 | 1 + .../classEule_1_1Vector3__coll__graph.png | Bin 0 -> 12048 bytes .../build/classEule_1_1Vector4-members.html | 140 + Doxygen/build/classEule_1_1Vector4.html | 1703 +++++++++++ .../classEule_1_1Vector4__coll__graph.map | 4 + .../classEule_1_1Vector4__coll__graph.md5 | 1 + .../classEule_1_1Vector4__coll__graph.png | Bin 0 -> 14909 bytes Doxygen/build/classes.html | 117 + Doxygen/build/closed.png | Bin 0 -> 132 bytes .../dir_1fefb9009d41306f82e23dc917083c9e.html | 88 + .../dir_29a3c7679fa29c698d8a016dea7d0b26.html | 135 + .../dir_b9243fac9f130637c8e868960898670e.html | 96 + .../dir_c806cfdecfdfd6ea1cddf5ffe1bf0281.html | 88 + .../dir_e847076a3068559a2237d545d5d06d37.html | 88 + Doxygen/build/doc.png | Bin 0 -> 746 bytes Doxygen/build/doxygen.css | 1771 +++++++++++ Doxygen/build/doxygen.png | Bin 0 -> 3779 bytes Doxygen/build/dynsections.js | 127 + Doxygen/build/files.html | 111 + Doxygen/build/folderclosed.png | Bin 0 -> 616 bytes Doxygen/build/folderopen.png | Bin 0 -> 597 bytes Doxygen/build/functions.html | 96 + Doxygen/build/functions_b.html | 97 + Doxygen/build/functions_c.html | 101 + Doxygen/build/functions_d.html | 102 + Doxygen/build/functions_e.html | 87 + Doxygen/build/functions_f.html | 97 + Doxygen/build/functions_func.html | 428 +++ Doxygen/build/functions_g.html | 99 + Doxygen/build/functions_h.html | 87 + Doxygen/build/functions_i.html | 102 + Doxygen/build/functions_j.html | 87 + Doxygen/build/functions_k.html | 87 + Doxygen/build/functions_l.html | 107 + Doxygen/build/functions_m.html | 104 + Doxygen/build/functions_n.html | 97 + Doxygen/build/functions_o.html | 194 ++ Doxygen/build/functions_p.html | 93 + Doxygen/build/functions_q.html | 87 + Doxygen/build/functions_r.html | 113 + Doxygen/build/functions_rela.html | 89 + Doxygen/build/functions_s.html | 108 + Doxygen/build/functions_t.html | 112 + Doxygen/build/functions_u.html | 92 + Doxygen/build/functions_v.html | 101 + Doxygen/build/functions_vars.html | 316 ++ Doxygen/build/functions_w.html | 87 + Doxygen/build/functions_x.html | 89 + Doxygen/build/functions_y.html | 89 + Doxygen/build/functions_z.html | 93 + Doxygen/build/functions_~.html | 87 + Doxygen/build/globals.html | 97 + Doxygen/build/globals_defs.html | 97 + Doxygen/build/graph_legend.html | 144 + Doxygen/build/graph_legend.md5 | 1 + Doxygen/build/graph_legend.png | Bin 0 -> 20615 bytes Doxygen/build/hierarchy.html | 102 + Doxygen/build/index.html | 84 + Doxygen/build/inherit_graph_0.map | 4 + Doxygen/build/inherit_graph_0.md5 | 1 + Doxygen/build/inherit_graph_0.png | Bin 0 -> 2620 bytes Doxygen/build/inherit_graph_1.map | 3 + Doxygen/build/inherit_graph_1.md5 | 1 + Doxygen/build/inherit_graph_1.png | Bin 0 -> 1071 bytes Doxygen/build/inherit_graph_10.map | 3 + Doxygen/build/inherit_graph_10.md5 | 1 + Doxygen/build/inherit_graph_10.png | Bin 0 -> 1666 bytes Doxygen/build/inherit_graph_2.map | 3 + Doxygen/build/inherit_graph_2.md5 | 1 + Doxygen/build/inherit_graph_2.png | Bin 0 -> 1457 bytes Doxygen/build/inherit_graph_3.map | 3 + Doxygen/build/inherit_graph_3.md5 | 1 + Doxygen/build/inherit_graph_3.png | Bin 0 -> 1408 bytes Doxygen/build/inherit_graph_4.map | 3 + Doxygen/build/inherit_graph_4.md5 | 1 + Doxygen/build/inherit_graph_4.png | Bin 0 -> 965 bytes Doxygen/build/inherit_graph_5.map | 3 + Doxygen/build/inherit_graph_5.md5 | 1 + Doxygen/build/inherit_graph_5.png | Bin 0 -> 1972 bytes Doxygen/build/inherit_graph_6.map | 3 + Doxygen/build/inherit_graph_6.md5 | 1 + Doxygen/build/inherit_graph_6.png | Bin 0 -> 1690 bytes Doxygen/build/inherit_graph_7.map | 3 + Doxygen/build/inherit_graph_7.md5 | 1 + Doxygen/build/inherit_graph_7.png | Bin 0 -> 2005 bytes Doxygen/build/inherit_graph_8.map | 3 + Doxygen/build/inherit_graph_8.md5 | 1 + Doxygen/build/inherit_graph_8.png | Bin 0 -> 1719 bytes Doxygen/build/inherit_graph_9.map | 3 + Doxygen/build/inherit_graph_9.md5 | 1 + Doxygen/build/inherit_graph_9.png | Bin 0 -> 1940 bytes Doxygen/build/inherits.html | 144 + Doxygen/build/jquery.js | 35 + Doxygen/build/menu.js | 50 + Doxygen/build/menudata.js | 112 + Doxygen/build/namespaceEule.html | 397 +++ Doxygen/build/namespacemembers.html | 103 + Doxygen/build/namespacemembers_func.html | 85 + Doxygen/build/namespacemembers_type.html | 100 + Doxygen/build/namespaces.html | 89 + Doxygen/build/nav_f.png | Bin 0 -> 153 bytes Doxygen/build/nav_g.png | Bin 0 -> 95 bytes Doxygen/build/nav_h.png | Bin 0 -> 98 bytes Doxygen/build/open.png | Bin 0 -> 123 bytes Doxygen/build/search/all_0.html | 30 + Doxygen/build/search/all_0.js | 7 + Doxygen/build/search/all_1.html | 30 + Doxygen/build/search/all_1.js | 7 + Doxygen/build/search/all_10.html | 30 + Doxygen/build/search/all_10.js | 6 + Doxygen/build/search/all_11.html | 30 + Doxygen/build/search/all_11.js | 14 + Doxygen/build/search/all_12.html | 30 + Doxygen/build/search/all_12.js | 9 + Doxygen/build/search/all_13.html | 30 + Doxygen/build/search/all_13.js | 13 + Doxygen/build/search/all_14.html | 30 + Doxygen/build/search/all_14.js | 5 + Doxygen/build/search/all_15.html | 30 + Doxygen/build/search/all_15.js | 23 + Doxygen/build/search/all_16.html | 30 + Doxygen/build/search/all_16.js | 4 + Doxygen/build/search/all_17.html | 30 + Doxygen/build/search/all_17.js | 4 + Doxygen/build/search/all_18.html | 30 + Doxygen/build/search/all_18.js | 4 + Doxygen/build/search/all_19.html | 30 + Doxygen/build/search/all_19.js | 5 + Doxygen/build/search/all_1a.html | 30 + Doxygen/build/search/all_1a.js | 4 + Doxygen/build/search/all_2.html | 30 + Doxygen/build/search/all_2.js | 12 + Doxygen/build/search/all_3.html | 30 + Doxygen/build/search/all_3.js | 9 + Doxygen/build/search/all_4.html | 30 + Doxygen/build/search/all_4.js | 6 + Doxygen/build/search/all_5.html | 30 + Doxygen/build/search/all_5.js | 7 + Doxygen/build/search/all_6.html | 30 + Doxygen/build/search/all_6.js | 8 + Doxygen/build/search/all_7.html | 30 + Doxygen/build/search/all_7.js | 5 + Doxygen/build/search/all_8.html | 30 + Doxygen/build/search/all_8.js | 9 + Doxygen/build/search/all_9.html | 30 + Doxygen/build/search/all_9.js | 4 + Doxygen/build/search/all_a.html | 30 + Doxygen/build/search/all_a.js | 4 + Doxygen/build/search/all_b.html | 30 + Doxygen/build/search/all_b.js | 7 + Doxygen/build/search/all_c.html | 30 + Doxygen/build/search/all_c.js | 15 + Doxygen/build/search/all_d.html | 30 + Doxygen/build/search/all_d.js | 6 + Doxygen/build/search/all_e.html | 30 + Doxygen/build/search/all_e.js | 22 + Doxygen/build/search/all_f.html | 30 + Doxygen/build/search/all_f.js | 7 + Doxygen/build/search/classes_0.html | 30 + Doxygen/build/search/classes_0.js | 4 + Doxygen/build/search/classes_1.html | 30 + Doxygen/build/search/classes_1.js | 5 + Doxygen/build/search/classes_2.html | 30 + Doxygen/build/search/classes_2.js | 4 + Doxygen/build/search/classes_3.html | 30 + Doxygen/build/search/classes_3.js | 4 + Doxygen/build/search/classes_4.html | 30 + Doxygen/build/search/classes_4.js | 4 + Doxygen/build/search/classes_5.html | 30 + Doxygen/build/search/classes_5.js | 9 + Doxygen/build/search/close.png | Bin 0 -> 273 bytes Doxygen/build/search/defines_0.html | 30 + Doxygen/build/search/defines_0.js | 4 + Doxygen/build/search/defines_1.html | 30 + Doxygen/build/search/defines_1.js | 4 + Doxygen/build/search/defines_2.html | 30 + Doxygen/build/search/defines_2.js | 4 + Doxygen/build/search/defines_3.html | 30 + Doxygen/build/search/defines_3.js | 4 + Doxygen/build/search/defines_4.html | 30 + Doxygen/build/search/defines_4.js | 4 + Doxygen/build/search/files_0.html | 30 + Doxygen/build/search/files_0.js | 6 + Doxygen/build/search/files_1.html | 30 + Doxygen/build/search/files_1.js | 4 + Doxygen/build/search/files_2.html | 30 + Doxygen/build/search/files_2.js | 7 + Doxygen/build/search/files_3.html | 30 + Doxygen/build/search/files_3.js | 5 + Doxygen/build/search/files_4.html | 30 + Doxygen/build/search/files_4.js | 4 + Doxygen/build/search/files_5.html | 30 + Doxygen/build/search/files_5.js | 5 + Doxygen/build/search/files_6.html | 30 + Doxygen/build/search/files_6.js | 9 + Doxygen/build/search/functions_0.html | 30 + Doxygen/build/search/functions_0.js | 6 + Doxygen/build/search/functions_1.html | 30 + Doxygen/build/search/functions_1.js | 7 + Doxygen/build/search/functions_2.html | 30 + Doxygen/build/search/functions_2.js | 6 + Doxygen/build/search/functions_3.html | 30 + Doxygen/build/search/functions_3.js | 7 + Doxygen/build/search/functions_4.html | 30 + Doxygen/build/search/functions_4.js | 8 + Doxygen/build/search/functions_5.html | 30 + Doxygen/build/search/functions_5.js | 5 + Doxygen/build/search/functions_6.html | 30 + Doxygen/build/search/functions_6.js | 8 + Doxygen/build/search/functions_7.html | 30 + Doxygen/build/search/functions_7.js | 5 + Doxygen/build/search/functions_8.html | 30 + Doxygen/build/search/functions_8.js | 20 + Doxygen/build/search/functions_9.html | 30 + Doxygen/build/search/functions_9.js | 4 + Doxygen/build/search/functions_a.html | 30 + Doxygen/build/search/functions_a.js | 10 + Doxygen/build/search/functions_b.html | 30 + Doxygen/build/search/functions_b.js | 8 + Doxygen/build/search/functions_c.html | 30 + Doxygen/build/search/functions_c.js | 10 + Doxygen/build/search/functions_d.html | 30 + Doxygen/build/search/functions_d.js | 4 + Doxygen/build/search/functions_e.html | 30 + Doxygen/build/search/functions_e.js | 7 + Doxygen/build/search/functions_f.html | 30 + Doxygen/build/search/functions_f.js | 4 + Doxygen/build/search/mag_sel.png | Bin 0 -> 465 bytes Doxygen/build/search/namespaces_0.html | 30 + Doxygen/build/search/namespaces_0.js | 4 + Doxygen/build/search/nomatches.html | 12 + Doxygen/build/search/related_0.html | 30 + Doxygen/build/search/related_0.js | 4 + Doxygen/build/search/search.css | 271 ++ Doxygen/build/search/search.js | 814 ++++++ Doxygen/build/search/search_l.png | Bin 0 -> 567 bytes Doxygen/build/search/search_m.png | Bin 0 -> 158 bytes Doxygen/build/search/search_r.png | Bin 0 -> 553 bytes Doxygen/build/search/searchdata.js | 39 + Doxygen/build/search/typedefs_0.html | 30 + Doxygen/build/search/typedefs_0.js | 9 + Doxygen/build/search/variables_0.html | 30 + Doxygen/build/search/variables_0.js | 4 + Doxygen/build/search/variables_1.html | 30 + Doxygen/build/search/variables_1.js | 7 + Doxygen/build/search/variables_10.html | 30 + Doxygen/build/search/variables_10.js | 4 + Doxygen/build/search/variables_11.html | 30 + Doxygen/build/search/variables_11.js | 4 + Doxygen/build/search/variables_12.html | 30 + Doxygen/build/search/variables_12.js | 4 + Doxygen/build/search/variables_13.html | 30 + Doxygen/build/search/variables_13.js | 4 + Doxygen/build/search/variables_14.html | 30 + Doxygen/build/search/variables_14.js | 4 + Doxygen/build/search/variables_15.html | 30 + Doxygen/build/search/variables_15.js | 4 + Doxygen/build/search/variables_16.html | 30 + Doxygen/build/search/variables_16.js | 4 + Doxygen/build/search/variables_17.html | 30 + Doxygen/build/search/variables_17.js | 4 + Doxygen/build/search/variables_18.html | 30 + Doxygen/build/search/variables_18.js | 5 + Doxygen/build/search/variables_2.html | 30 + Doxygen/build/search/variables_2.js | 4 + Doxygen/build/search/variables_3.html | 30 + Doxygen/build/search/variables_3.js | 5 + Doxygen/build/search/variables_4.html | 30 + Doxygen/build/search/variables_4.js | 4 + Doxygen/build/search/variables_5.html | 30 + Doxygen/build/search/variables_5.js | 7 + Doxygen/build/search/variables_6.html | 30 + Doxygen/build/search/variables_6.js | 4 + Doxygen/build/search/variables_7.html | 30 + Doxygen/build/search/variables_7.js | 4 + Doxygen/build/search/variables_8.html | 30 + Doxygen/build/search/variables_8.js | 4 + Doxygen/build/search/variables_9.html | 30 + Doxygen/build/search/variables_9.js | 4 + Doxygen/build/search/variables_a.html | 30 + Doxygen/build/search/variables_a.js | 4 + Doxygen/build/search/variables_b.html | 30 + Doxygen/build/search/variables_b.js | 5 + Doxygen/build/search/variables_c.html | 30 + Doxygen/build/search/variables_c.js | 4 + Doxygen/build/search/variables_d.html | 30 + Doxygen/build/search/variables_d.js | 4 + Doxygen/build/search/variables_e.html | 30 + Doxygen/build/search/variables_e.js | 5 + Doxygen/build/search/variables_f.html | 30 + Doxygen/build/search/variables_f.js | 6 + Doxygen/build/splitbar.png | Bin 0 -> 314 bytes Doxygen/build/structEule_1_1Rect-members.html | 93 + Doxygen/build/structEule_1_1Rect.html | 153 + .../build/structEule_1_1Rect__coll__graph.map | 4 + .../build/structEule_1_1Rect__coll__graph.md5 | 1 + .../build/structEule_1_1Rect__coll__graph.png | Bin 0 -> 8014 bytes Doxygen/build/sync_off.png | Bin 0 -> 853 bytes Doxygen/build/sync_on.png | Bin 0 -> 845 bytes Doxygen/build/tab_a.png | Bin 0 -> 142 bytes Doxygen/build/tab_b.png | Bin 0 -> 169 bytes Doxygen/build/tab_h.png | Bin 0 -> 177 bytes Doxygen/build/tab_s.png | Bin 0 -> 184 bytes Doxygen/build/tabs.css | 1 + ...2Eule_8vcxproj_8FileListAbsolute_8txt.html | 84 + ...2Eule_8vcxproj_8FileListAbsolute_8txt.html | 84 + Doxygen/doxyroles/.gitkeep | 0 Doxygen/doxyrun.sh | 2 + Doxygen/eule_doxyfig | 2579 +++++++++++++++++ Doxygen/readme.md | 5 + 452 files changed, 34557 insertions(+) create mode 100644 Doxygen/build/Collider_8cpp.html create mode 100644 Doxygen/build/Collider_8cpp__incl.map create mode 100644 Doxygen/build/Collider_8cpp__incl.md5 create mode 100644 Doxygen/build/Collider_8cpp__incl.png create mode 100644 Doxygen/build/Collider_8cpp_source.html create mode 100644 Doxygen/build/Collider_8h.html create mode 100644 Doxygen/build/Collider_8h__dep__incl.map create mode 100644 Doxygen/build/Collider_8h__dep__incl.md5 create mode 100644 Doxygen/build/Collider_8h__dep__incl.png create mode 100644 Doxygen/build/Collider_8h__incl.map create mode 100644 Doxygen/build/Collider_8h__incl.md5 create mode 100644 Doxygen/build/Collider_8h__incl.png create mode 100644 Doxygen/build/Collider_8h_source.html create mode 100644 Doxygen/build/Constants_8h.html create mode 100644 Doxygen/build/Constants_8h__dep__incl.map create mode 100644 Doxygen/build/Constants_8h__dep__incl.md5 create mode 100644 Doxygen/build/Constants_8h__dep__incl.png create mode 100644 Doxygen/build/Constants_8h_source.html create mode 100644 Doxygen/build/Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html create mode 100644 Doxygen/build/Math_8cpp.html create mode 100644 Doxygen/build/Math_8cpp__incl.map create mode 100644 Doxygen/build/Math_8cpp__incl.md5 create mode 100644 Doxygen/build/Math_8cpp__incl.png create mode 100644 Doxygen/build/Math_8cpp_source.html create mode 100644 Doxygen/build/Math_8h.html create mode 100644 Doxygen/build/Math_8h__dep__incl.map create mode 100644 Doxygen/build/Math_8h__dep__incl.md5 create mode 100644 Doxygen/build/Math_8h__dep__incl.png create mode 100644 Doxygen/build/Math_8h__incl.map create mode 100644 Doxygen/build/Math_8h__incl.md5 create mode 100644 Doxygen/build/Math_8h__incl.png create mode 100644 Doxygen/build/Math_8h_source.html create mode 100644 Doxygen/build/Matrix4x4_8cpp.html create mode 100644 Doxygen/build/Matrix4x4_8cpp__incl.map create mode 100644 Doxygen/build/Matrix4x4_8cpp__incl.md5 create mode 100644 Doxygen/build/Matrix4x4_8cpp__incl.png create mode 100644 Doxygen/build/Matrix4x4_8cpp_source.html create mode 100644 Doxygen/build/Matrix4x4_8h.html create mode 100644 Doxygen/build/Matrix4x4_8h__dep__incl.map create mode 100644 Doxygen/build/Matrix4x4_8h__dep__incl.md5 create mode 100644 Doxygen/build/Matrix4x4_8h__dep__incl.png create mode 100644 Doxygen/build/Matrix4x4_8h__incl.map create mode 100644 Doxygen/build/Matrix4x4_8h__incl.md5 create mode 100644 Doxygen/build/Matrix4x4_8h__incl.png create mode 100644 Doxygen/build/Matrix4x4_8h_source.html create mode 100644 Doxygen/build/Quaternion_8cpp.html create mode 100644 Doxygen/build/Quaternion_8cpp__incl.map create mode 100644 Doxygen/build/Quaternion_8cpp__incl.md5 create mode 100644 Doxygen/build/Quaternion_8cpp__incl.png create mode 100644 Doxygen/build/Quaternion_8cpp_source.html create mode 100644 Doxygen/build/Quaternion_8h.html create mode 100644 Doxygen/build/Quaternion_8h__dep__incl.map create mode 100644 Doxygen/build/Quaternion_8h__dep__incl.md5 create mode 100644 Doxygen/build/Quaternion_8h__dep__incl.png create mode 100644 Doxygen/build/Quaternion_8h__incl.map create mode 100644 Doxygen/build/Quaternion_8h__incl.md5 create mode 100644 Doxygen/build/Quaternion_8h__incl.png create mode 100644 Doxygen/build/Quaternion_8h_source.html create mode 100644 Doxygen/build/Rect_8h.html create mode 100644 Doxygen/build/Rect_8h__incl.map create mode 100644 Doxygen/build/Rect_8h__incl.md5 create mode 100644 Doxygen/build/Rect_8h__incl.png create mode 100644 Doxygen/build/Rect_8h_source.html create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8cpp.html create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.map create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.md5 create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.png create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8cpp_source.html create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8h.html create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.map create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.md5 create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.png create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8h__incl.map create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8h__incl.md5 create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8h__incl.png create mode 100644 Doxygen/build/TrapazoidalPrismCollider_8h_source.html create mode 100644 Doxygen/build/Vector2_8cpp.html create mode 100644 Doxygen/build/Vector2_8cpp__incl.map create mode 100644 Doxygen/build/Vector2_8cpp__incl.md5 create mode 100644 Doxygen/build/Vector2_8cpp__incl.png create mode 100644 Doxygen/build/Vector2_8cpp_source.html create mode 100644 Doxygen/build/Vector2_8h.html create mode 100644 Doxygen/build/Vector2_8h__dep__incl.map create mode 100644 Doxygen/build/Vector2_8h__dep__incl.md5 create mode 100644 Doxygen/build/Vector2_8h__dep__incl.png create mode 100644 Doxygen/build/Vector2_8h__incl.map create mode 100644 Doxygen/build/Vector2_8h__incl.md5 create mode 100644 Doxygen/build/Vector2_8h__incl.png create mode 100644 Doxygen/build/Vector2_8h_source.html create mode 100644 Doxygen/build/Vector3_8cpp.html create mode 100644 Doxygen/build/Vector3_8cpp__incl.map create mode 100644 Doxygen/build/Vector3_8cpp__incl.md5 create mode 100644 Doxygen/build/Vector3_8cpp__incl.png create mode 100644 Doxygen/build/Vector3_8cpp_source.html create mode 100644 Doxygen/build/Vector3_8h.html create mode 100644 Doxygen/build/Vector3_8h__dep__incl.map create mode 100644 Doxygen/build/Vector3_8h__dep__incl.md5 create mode 100644 Doxygen/build/Vector3_8h__dep__incl.png create mode 100644 Doxygen/build/Vector3_8h__incl.map create mode 100644 Doxygen/build/Vector3_8h__incl.md5 create mode 100644 Doxygen/build/Vector3_8h__incl.png create mode 100644 Doxygen/build/Vector3_8h_source.html create mode 100644 Doxygen/build/Vector4_8cpp.html create mode 100644 Doxygen/build/Vector4_8cpp__incl.map create mode 100644 Doxygen/build/Vector4_8cpp__incl.md5 create mode 100644 Doxygen/build/Vector4_8cpp__incl.png create mode 100644 Doxygen/build/Vector4_8cpp_source.html create mode 100644 Doxygen/build/Vector4_8h.html create mode 100644 Doxygen/build/Vector4_8h__dep__incl.map create mode 100644 Doxygen/build/Vector4_8h__dep__incl.md5 create mode 100644 Doxygen/build/Vector4_8h__dep__incl.png create mode 100644 Doxygen/build/Vector4_8h__incl.map create mode 100644 Doxygen/build/Vector4_8h__incl.md5 create mode 100644 Doxygen/build/Vector4_8h__incl.png create mode 100644 Doxygen/build/Vector4_8h_source.html create mode 100644 Doxygen/build/annotated.html create mode 100644 Doxygen/build/bc_s.png create mode 100644 Doxygen/build/bdwn.png create mode 100644 Doxygen/build/classEule_1_1Collider-members.html create mode 100644 Doxygen/build/classEule_1_1Collider.html create mode 100644 Doxygen/build/classEule_1_1Collider__inherit__graph.map create mode 100644 Doxygen/build/classEule_1_1Collider__inherit__graph.md5 create mode 100644 Doxygen/build/classEule_1_1Collider__inherit__graph.png create mode 100644 Doxygen/build/classEule_1_1Math-members.html create mode 100644 Doxygen/build/classEule_1_1Math.html create mode 100644 Doxygen/build/classEule_1_1Matrix4x4-members.html create mode 100644 Doxygen/build/classEule_1_1Matrix4x4.html create mode 100644 Doxygen/build/classEule_1_1Quaternion-members.html create mode 100644 Doxygen/build/classEule_1_1Quaternion.html create mode 100644 Doxygen/build/classEule_1_1TrapazoidalPrismCollider-members.html create mode 100644 Doxygen/build/classEule_1_1TrapazoidalPrismCollider.html create mode 100644 Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.map create mode 100644 Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.md5 create mode 100644 Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.png create mode 100644 Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.map create mode 100644 Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.md5 create mode 100644 Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.png create mode 100644 Doxygen/build/classEule_1_1Vector2-members.html create mode 100644 Doxygen/build/classEule_1_1Vector2.html create mode 100644 Doxygen/build/classEule_1_1Vector3-members.html create mode 100644 Doxygen/build/classEule_1_1Vector3.html create mode 100644 Doxygen/build/classEule_1_1Vector3__coll__graph.map create mode 100644 Doxygen/build/classEule_1_1Vector3__coll__graph.md5 create mode 100644 Doxygen/build/classEule_1_1Vector3__coll__graph.png create mode 100644 Doxygen/build/classEule_1_1Vector4-members.html create mode 100644 Doxygen/build/classEule_1_1Vector4.html create mode 100644 Doxygen/build/classEule_1_1Vector4__coll__graph.map create mode 100644 Doxygen/build/classEule_1_1Vector4__coll__graph.md5 create mode 100644 Doxygen/build/classEule_1_1Vector4__coll__graph.png create mode 100644 Doxygen/build/classes.html create mode 100644 Doxygen/build/closed.png create mode 100644 Doxygen/build/dir_1fefb9009d41306f82e23dc917083c9e.html create mode 100644 Doxygen/build/dir_29a3c7679fa29c698d8a016dea7d0b26.html create mode 100644 Doxygen/build/dir_b9243fac9f130637c8e868960898670e.html create mode 100644 Doxygen/build/dir_c806cfdecfdfd6ea1cddf5ffe1bf0281.html create mode 100644 Doxygen/build/dir_e847076a3068559a2237d545d5d06d37.html create mode 100644 Doxygen/build/doc.png create mode 100644 Doxygen/build/doxygen.css create mode 100644 Doxygen/build/doxygen.png create mode 100644 Doxygen/build/dynsections.js create mode 100644 Doxygen/build/files.html create mode 100644 Doxygen/build/folderclosed.png create mode 100644 Doxygen/build/folderopen.png create mode 100644 Doxygen/build/functions.html create mode 100644 Doxygen/build/functions_b.html create mode 100644 Doxygen/build/functions_c.html create mode 100644 Doxygen/build/functions_d.html create mode 100644 Doxygen/build/functions_e.html create mode 100644 Doxygen/build/functions_f.html create mode 100644 Doxygen/build/functions_func.html create mode 100644 Doxygen/build/functions_g.html create mode 100644 Doxygen/build/functions_h.html create mode 100644 Doxygen/build/functions_i.html create mode 100644 Doxygen/build/functions_j.html create mode 100644 Doxygen/build/functions_k.html create mode 100644 Doxygen/build/functions_l.html create mode 100644 Doxygen/build/functions_m.html create mode 100644 Doxygen/build/functions_n.html create mode 100644 Doxygen/build/functions_o.html create mode 100644 Doxygen/build/functions_p.html create mode 100644 Doxygen/build/functions_q.html create mode 100644 Doxygen/build/functions_r.html create mode 100644 Doxygen/build/functions_rela.html create mode 100644 Doxygen/build/functions_s.html create mode 100644 Doxygen/build/functions_t.html create mode 100644 Doxygen/build/functions_u.html create mode 100644 Doxygen/build/functions_v.html create mode 100644 Doxygen/build/functions_vars.html create mode 100644 Doxygen/build/functions_w.html create mode 100644 Doxygen/build/functions_x.html create mode 100644 Doxygen/build/functions_y.html create mode 100644 Doxygen/build/functions_z.html create mode 100644 Doxygen/build/functions_~.html create mode 100644 Doxygen/build/globals.html create mode 100644 Doxygen/build/globals_defs.html create mode 100644 Doxygen/build/graph_legend.html create mode 100644 Doxygen/build/graph_legend.md5 create mode 100644 Doxygen/build/graph_legend.png create mode 100644 Doxygen/build/hierarchy.html create mode 100644 Doxygen/build/index.html create mode 100644 Doxygen/build/inherit_graph_0.map create mode 100644 Doxygen/build/inherit_graph_0.md5 create mode 100644 Doxygen/build/inherit_graph_0.png create mode 100644 Doxygen/build/inherit_graph_1.map create mode 100644 Doxygen/build/inherit_graph_1.md5 create mode 100644 Doxygen/build/inherit_graph_1.png create mode 100644 Doxygen/build/inherit_graph_10.map create mode 100644 Doxygen/build/inherit_graph_10.md5 create mode 100644 Doxygen/build/inherit_graph_10.png create mode 100644 Doxygen/build/inherit_graph_2.map create mode 100644 Doxygen/build/inherit_graph_2.md5 create mode 100644 Doxygen/build/inherit_graph_2.png create mode 100644 Doxygen/build/inherit_graph_3.map create mode 100644 Doxygen/build/inherit_graph_3.md5 create mode 100644 Doxygen/build/inherit_graph_3.png create mode 100644 Doxygen/build/inherit_graph_4.map create mode 100644 Doxygen/build/inherit_graph_4.md5 create mode 100644 Doxygen/build/inherit_graph_4.png create mode 100644 Doxygen/build/inherit_graph_5.map create mode 100644 Doxygen/build/inherit_graph_5.md5 create mode 100644 Doxygen/build/inherit_graph_5.png create mode 100644 Doxygen/build/inherit_graph_6.map create mode 100644 Doxygen/build/inherit_graph_6.md5 create mode 100644 Doxygen/build/inherit_graph_6.png create mode 100644 Doxygen/build/inherit_graph_7.map create mode 100644 Doxygen/build/inherit_graph_7.md5 create mode 100644 Doxygen/build/inherit_graph_7.png create mode 100644 Doxygen/build/inherit_graph_8.map create mode 100644 Doxygen/build/inherit_graph_8.md5 create mode 100644 Doxygen/build/inherit_graph_8.png create mode 100644 Doxygen/build/inherit_graph_9.map create mode 100644 Doxygen/build/inherit_graph_9.md5 create mode 100644 Doxygen/build/inherit_graph_9.png create mode 100644 Doxygen/build/inherits.html create mode 100644 Doxygen/build/jquery.js create mode 100644 Doxygen/build/menu.js create mode 100644 Doxygen/build/menudata.js create mode 100644 Doxygen/build/namespaceEule.html create mode 100644 Doxygen/build/namespacemembers.html create mode 100644 Doxygen/build/namespacemembers_func.html create mode 100644 Doxygen/build/namespacemembers_type.html create mode 100644 Doxygen/build/namespaces.html create mode 100644 Doxygen/build/nav_f.png create mode 100644 Doxygen/build/nav_g.png create mode 100644 Doxygen/build/nav_h.png create mode 100644 Doxygen/build/open.png create mode 100644 Doxygen/build/search/all_0.html create mode 100644 Doxygen/build/search/all_0.js create mode 100644 Doxygen/build/search/all_1.html create mode 100644 Doxygen/build/search/all_1.js create mode 100644 Doxygen/build/search/all_10.html create mode 100644 Doxygen/build/search/all_10.js create mode 100644 Doxygen/build/search/all_11.html create mode 100644 Doxygen/build/search/all_11.js create mode 100644 Doxygen/build/search/all_12.html create mode 100644 Doxygen/build/search/all_12.js create mode 100644 Doxygen/build/search/all_13.html create mode 100644 Doxygen/build/search/all_13.js create mode 100644 Doxygen/build/search/all_14.html create mode 100644 Doxygen/build/search/all_14.js create mode 100644 Doxygen/build/search/all_15.html create mode 100644 Doxygen/build/search/all_15.js create mode 100644 Doxygen/build/search/all_16.html create mode 100644 Doxygen/build/search/all_16.js create mode 100644 Doxygen/build/search/all_17.html create mode 100644 Doxygen/build/search/all_17.js create mode 100644 Doxygen/build/search/all_18.html create mode 100644 Doxygen/build/search/all_18.js create mode 100644 Doxygen/build/search/all_19.html create mode 100644 Doxygen/build/search/all_19.js create mode 100644 Doxygen/build/search/all_1a.html create mode 100644 Doxygen/build/search/all_1a.js create mode 100644 Doxygen/build/search/all_2.html create mode 100644 Doxygen/build/search/all_2.js create mode 100644 Doxygen/build/search/all_3.html create mode 100644 Doxygen/build/search/all_3.js create mode 100644 Doxygen/build/search/all_4.html create mode 100644 Doxygen/build/search/all_4.js create mode 100644 Doxygen/build/search/all_5.html create mode 100644 Doxygen/build/search/all_5.js create mode 100644 Doxygen/build/search/all_6.html create mode 100644 Doxygen/build/search/all_6.js create mode 100644 Doxygen/build/search/all_7.html create mode 100644 Doxygen/build/search/all_7.js create mode 100644 Doxygen/build/search/all_8.html create mode 100644 Doxygen/build/search/all_8.js create mode 100644 Doxygen/build/search/all_9.html create mode 100644 Doxygen/build/search/all_9.js create mode 100644 Doxygen/build/search/all_a.html create mode 100644 Doxygen/build/search/all_a.js create mode 100644 Doxygen/build/search/all_b.html create mode 100644 Doxygen/build/search/all_b.js create mode 100644 Doxygen/build/search/all_c.html create mode 100644 Doxygen/build/search/all_c.js create mode 100644 Doxygen/build/search/all_d.html create mode 100644 Doxygen/build/search/all_d.js create mode 100644 Doxygen/build/search/all_e.html create mode 100644 Doxygen/build/search/all_e.js create mode 100644 Doxygen/build/search/all_f.html create mode 100644 Doxygen/build/search/all_f.js create mode 100644 Doxygen/build/search/classes_0.html create mode 100644 Doxygen/build/search/classes_0.js create mode 100644 Doxygen/build/search/classes_1.html create mode 100644 Doxygen/build/search/classes_1.js create mode 100644 Doxygen/build/search/classes_2.html create mode 100644 Doxygen/build/search/classes_2.js create mode 100644 Doxygen/build/search/classes_3.html create mode 100644 Doxygen/build/search/classes_3.js create mode 100644 Doxygen/build/search/classes_4.html create mode 100644 Doxygen/build/search/classes_4.js create mode 100644 Doxygen/build/search/classes_5.html create mode 100644 Doxygen/build/search/classes_5.js create mode 100644 Doxygen/build/search/close.png create mode 100644 Doxygen/build/search/defines_0.html create mode 100644 Doxygen/build/search/defines_0.js create mode 100644 Doxygen/build/search/defines_1.html create mode 100644 Doxygen/build/search/defines_1.js create mode 100644 Doxygen/build/search/defines_2.html create mode 100644 Doxygen/build/search/defines_2.js create mode 100644 Doxygen/build/search/defines_3.html create mode 100644 Doxygen/build/search/defines_3.js create mode 100644 Doxygen/build/search/defines_4.html create mode 100644 Doxygen/build/search/defines_4.js create mode 100644 Doxygen/build/search/files_0.html create mode 100644 Doxygen/build/search/files_0.js create mode 100644 Doxygen/build/search/files_1.html create mode 100644 Doxygen/build/search/files_1.js create mode 100644 Doxygen/build/search/files_2.html create mode 100644 Doxygen/build/search/files_2.js create mode 100644 Doxygen/build/search/files_3.html create mode 100644 Doxygen/build/search/files_3.js create mode 100644 Doxygen/build/search/files_4.html create mode 100644 Doxygen/build/search/files_4.js create mode 100644 Doxygen/build/search/files_5.html create mode 100644 Doxygen/build/search/files_5.js create mode 100644 Doxygen/build/search/files_6.html create mode 100644 Doxygen/build/search/files_6.js create mode 100644 Doxygen/build/search/functions_0.html create mode 100644 Doxygen/build/search/functions_0.js create mode 100644 Doxygen/build/search/functions_1.html create mode 100644 Doxygen/build/search/functions_1.js create mode 100644 Doxygen/build/search/functions_2.html create mode 100644 Doxygen/build/search/functions_2.js create mode 100644 Doxygen/build/search/functions_3.html create mode 100644 Doxygen/build/search/functions_3.js create mode 100644 Doxygen/build/search/functions_4.html create mode 100644 Doxygen/build/search/functions_4.js create mode 100644 Doxygen/build/search/functions_5.html create mode 100644 Doxygen/build/search/functions_5.js create mode 100644 Doxygen/build/search/functions_6.html create mode 100644 Doxygen/build/search/functions_6.js create mode 100644 Doxygen/build/search/functions_7.html create mode 100644 Doxygen/build/search/functions_7.js create mode 100644 Doxygen/build/search/functions_8.html create mode 100644 Doxygen/build/search/functions_8.js create mode 100644 Doxygen/build/search/functions_9.html create mode 100644 Doxygen/build/search/functions_9.js create mode 100644 Doxygen/build/search/functions_a.html create mode 100644 Doxygen/build/search/functions_a.js create mode 100644 Doxygen/build/search/functions_b.html create mode 100644 Doxygen/build/search/functions_b.js create mode 100644 Doxygen/build/search/functions_c.html create mode 100644 Doxygen/build/search/functions_c.js create mode 100644 Doxygen/build/search/functions_d.html create mode 100644 Doxygen/build/search/functions_d.js create mode 100644 Doxygen/build/search/functions_e.html create mode 100644 Doxygen/build/search/functions_e.js create mode 100644 Doxygen/build/search/functions_f.html create mode 100644 Doxygen/build/search/functions_f.js create mode 100644 Doxygen/build/search/mag_sel.png create mode 100644 Doxygen/build/search/namespaces_0.html create mode 100644 Doxygen/build/search/namespaces_0.js create mode 100644 Doxygen/build/search/nomatches.html create mode 100644 Doxygen/build/search/related_0.html create mode 100644 Doxygen/build/search/related_0.js create mode 100644 Doxygen/build/search/search.css create mode 100644 Doxygen/build/search/search.js create mode 100644 Doxygen/build/search/search_l.png create mode 100644 Doxygen/build/search/search_m.png create mode 100644 Doxygen/build/search/search_r.png create mode 100644 Doxygen/build/search/searchdata.js create mode 100644 Doxygen/build/search/typedefs_0.html create mode 100644 Doxygen/build/search/typedefs_0.js create mode 100644 Doxygen/build/search/variables_0.html create mode 100644 Doxygen/build/search/variables_0.js create mode 100644 Doxygen/build/search/variables_1.html create mode 100644 Doxygen/build/search/variables_1.js create mode 100644 Doxygen/build/search/variables_10.html create mode 100644 Doxygen/build/search/variables_10.js create mode 100644 Doxygen/build/search/variables_11.html create mode 100644 Doxygen/build/search/variables_11.js create mode 100644 Doxygen/build/search/variables_12.html create mode 100644 Doxygen/build/search/variables_12.js create mode 100644 Doxygen/build/search/variables_13.html create mode 100644 Doxygen/build/search/variables_13.js create mode 100644 Doxygen/build/search/variables_14.html create mode 100644 Doxygen/build/search/variables_14.js create mode 100644 Doxygen/build/search/variables_15.html create mode 100644 Doxygen/build/search/variables_15.js create mode 100644 Doxygen/build/search/variables_16.html create mode 100644 Doxygen/build/search/variables_16.js create mode 100644 Doxygen/build/search/variables_17.html create mode 100644 Doxygen/build/search/variables_17.js create mode 100644 Doxygen/build/search/variables_18.html create mode 100644 Doxygen/build/search/variables_18.js create mode 100644 Doxygen/build/search/variables_2.html create mode 100644 Doxygen/build/search/variables_2.js create mode 100644 Doxygen/build/search/variables_3.html create mode 100644 Doxygen/build/search/variables_3.js create mode 100644 Doxygen/build/search/variables_4.html create mode 100644 Doxygen/build/search/variables_4.js create mode 100644 Doxygen/build/search/variables_5.html create mode 100644 Doxygen/build/search/variables_5.js create mode 100644 Doxygen/build/search/variables_6.html create mode 100644 Doxygen/build/search/variables_6.js create mode 100644 Doxygen/build/search/variables_7.html create mode 100644 Doxygen/build/search/variables_7.js create mode 100644 Doxygen/build/search/variables_8.html create mode 100644 Doxygen/build/search/variables_8.js create mode 100644 Doxygen/build/search/variables_9.html create mode 100644 Doxygen/build/search/variables_9.js create mode 100644 Doxygen/build/search/variables_a.html create mode 100644 Doxygen/build/search/variables_a.js create mode 100644 Doxygen/build/search/variables_b.html create mode 100644 Doxygen/build/search/variables_b.js create mode 100644 Doxygen/build/search/variables_c.html create mode 100644 Doxygen/build/search/variables_c.js create mode 100644 Doxygen/build/search/variables_d.html create mode 100644 Doxygen/build/search/variables_d.js create mode 100644 Doxygen/build/search/variables_e.html create mode 100644 Doxygen/build/search/variables_e.js create mode 100644 Doxygen/build/search/variables_f.html create mode 100644 Doxygen/build/search/variables_f.js create mode 100644 Doxygen/build/splitbar.png create mode 100644 Doxygen/build/structEule_1_1Rect-members.html create mode 100644 Doxygen/build/structEule_1_1Rect.html create mode 100644 Doxygen/build/structEule_1_1Rect__coll__graph.map create mode 100644 Doxygen/build/structEule_1_1Rect__coll__graph.md5 create mode 100644 Doxygen/build/structEule_1_1Rect__coll__graph.png create mode 100644 Doxygen/build/sync_off.png create mode 100644 Doxygen/build/sync_on.png create mode 100644 Doxygen/build/tab_a.png create mode 100644 Doxygen/build/tab_b.png create mode 100644 Doxygen/build/tab_h.png create mode 100644 Doxygen/build/tab_s.png create mode 100644 Doxygen/build/tabs.css create mode 100644 Doxygen/build/x64_2Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html create mode 100644 Doxygen/build/x64_2Release_2Eule_8vcxproj_8FileListAbsolute_8txt.html create mode 100644 Doxygen/doxyroles/.gitkeep create mode 100644 Doxygen/doxyrun.sh create mode 100644 Doxygen/eule_doxyfig create mode 100644 Doxygen/readme.md diff --git a/Doxygen/build/Collider_8cpp.html b/Doxygen/build/Collider_8cpp.html new file mode 100644 index 0000000..066ae21 --- /dev/null +++ b/Doxygen/build/Collider_8cpp.html @@ -0,0 +1,108 @@ + + + + + + + +Leonetienne/Eule: Eule/Collider.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Collider.cpp File Reference
+
+
+
#include "Collider.h"
+
+Include dependency graph for Collider.cpp:
+
+
+ + + + + + + + + + + + +
+
+

Go to the source code of this file.

+
+ + + + diff --git a/Doxygen/build/Collider_8cpp__incl.map b/Doxygen/build/Collider_8cpp__incl.map new file mode 100644 index 0000000..c94adde --- /dev/null +++ b/Doxygen/build/Collider_8cpp__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Doxygen/build/Collider_8cpp__incl.md5 b/Doxygen/build/Collider_8cpp__incl.md5 new file mode 100644 index 0000000..0f1a642 --- /dev/null +++ b/Doxygen/build/Collider_8cpp__incl.md5 @@ -0,0 +1 @@ +a0ca2d0389b8e053b94a9d04c38298d1 \ No newline at end of file diff --git a/Doxygen/build/Collider_8cpp__incl.png b/Doxygen/build/Collider_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9cbfda4f3dfbb8f61baba479b6edbd2c297483 GIT binary patch literal 19314 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 HQ$iB}fMD_P literal 0 HcmV?d00001 diff --git a/Doxygen/build/Collider_8cpp_source.html b/Doxygen/build/Collider_8cpp_source.html new file mode 100644 index 0000000..04e4a75 --- /dev/null +++ b/Doxygen/build/Collider_8cpp_source.html @@ -0,0 +1,90 @@ + + + + + + + +Leonetienne/Eule: Eule/Collider.cpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Collider.cpp
+
+ + + + + + diff --git a/Doxygen/build/Collider_8h.html b/Doxygen/build/Collider_8h.html new file mode 100644 index 0000000..8977c07 --- /dev/null +++ b/Doxygen/build/Collider_8h.html @@ -0,0 +1,133 @@ + + + + + + + +Leonetienne/Eule: Eule/Collider.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Collider.h File Reference
+
+
+
#include "Vector3.h"
+
+Include dependency graph for Collider.h:
+
+
+ + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Eule::Collider
 Abstract class of a collider domain. More...
 
+ + + +

+Namespaces

 Eule
 
+
+ + + + diff --git a/Doxygen/build/Collider_8h__dep__incl.map b/Doxygen/build/Collider_8h__dep__incl.map new file mode 100644 index 0000000..f7be80a --- /dev/null +++ b/Doxygen/build/Collider_8h__dep__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/Doxygen/build/Collider_8h__dep__incl.md5 b/Doxygen/build/Collider_8h__dep__incl.md5 new file mode 100644 index 0000000..69ad73f --- /dev/null +++ b/Doxygen/build/Collider_8h__dep__incl.md5 @@ -0,0 +1 @@ +a3862d315002f8b279d1429df3698c3b \ No newline at end of file diff --git a/Doxygen/build/Collider_8h__dep__incl.png b/Doxygen/build/Collider_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..b3211902ee79a620b1b9f285daeddec26af63c17 GIT binary patch literal 9737 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 M2P!g!QYL=?3rznAl>h($ literal 0 HcmV?d00001 diff --git a/Doxygen/build/Collider_8h__incl.map b/Doxygen/build/Collider_8h__incl.map new file mode 100644 index 0000000..050531c --- /dev/null +++ b/Doxygen/build/Collider_8h__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Doxygen/build/Collider_8h__incl.md5 b/Doxygen/build/Collider_8h__incl.md5 new file mode 100644 index 0000000..87b8976 --- /dev/null +++ b/Doxygen/build/Collider_8h__incl.md5 @@ -0,0 +1 @@ +9948039f41f85f1963fada39f6f03f97 \ No newline at end of file diff --git a/Doxygen/build/Collider_8h__incl.png b/Doxygen/build/Collider_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..27e8cfd7c81adafdc2adc493efd4c6dd14c7cd1c GIT binary patch literal 17538 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 + + + + + + +Leonetienne/Eule: Eule/Collider.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Collider.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include "Vector3.h"
+
3 
+
4 namespace Eule
+
5 {
+
10  class Collider
+
11  {
+
12  public:
+
14  virtual bool Contains(const Vector3d& point) const = 0;
+
15  };
+
16 }
+
+
Abstract class of a collider domain.
Definition: Collider.h:10
+ +
virtual bool Contains(const Vector3d &point) const =0
Tests, if this Collider contains a point.
+ +
Definition: Collider.h:4
+ + + + diff --git a/Doxygen/build/Constants_8h.html b/Doxygen/build/Constants_8h.html new file mode 100644 index 0000000..a635cca --- /dev/null +++ b/Doxygen/build/Constants_8h.html @@ -0,0 +1,191 @@ + + + + + + + +Leonetienne/Eule: Eule/Constants.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Constants.h File Reference
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Macros

#define PI   3.14159265358979323846264338327950288419716939937510
 Pi up to 50 decimal places. More...
 
#define HALF_PI   1.57079632679489661923132169163975144209858469968755
 Pi divided by two. More...
 
#define Deg2Rad   0.0174532925199432957692369076848861271344287188854172222222222222
 Factor to convert degrees to radians. More...
 
#define Rad2Deg   57.295779513082320876798154814105170332405472466564427711013084788
 Factor to convert radians to degrees. More...
 
+

Macro Definition Documentation

+ +

◆ Deg2Rad

+ +
+
+ + + + +
#define Deg2Rad   0.0174532925199432957692369076848861271344287188854172222222222222
+
+ +

Factor to convert degrees to radians.

+ +

Definition at line 12 of file Constants.h.

+ +
+
+ +

◆ HALF_PI

+ +
+
+ + + + +
#define HALF_PI   1.57079632679489661923132169163975144209858469968755
+
+ +

Pi divided by two.

+ +

Definition at line 9 of file Constants.h.

+ +
+
+ +

◆ PI

+ +
+
+ + + + +
#define PI   3.14159265358979323846264338327950288419716939937510
+
+ +

Pi up to 50 decimal places.

+ +

Definition at line 6 of file Constants.h.

+ +
+
+ +

◆ Rad2Deg

+ +
+
+ + + + +
#define Rad2Deg   57.295779513082320876798154814105170332405472466564427711013084788
+
+ +

Factor to convert radians to degrees.

+ +

Definition at line 15 of file Constants.h.

+ +
+
+
+ + + + diff --git a/Doxygen/build/Constants_8h__dep__incl.map b/Doxygen/build/Constants_8h__dep__incl.map new file mode 100644 index 0000000..fd16cfe --- /dev/null +++ b/Doxygen/build/Constants_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Doxygen/build/Constants_8h__dep__incl.md5 b/Doxygen/build/Constants_8h__dep__incl.md5 new file mode 100644 index 0000000..9f34a03 --- /dev/null +++ b/Doxygen/build/Constants_8h__dep__incl.md5 @@ -0,0 +1 @@ +b7f0f6fcf28de72df643fef9d219e14d \ No newline at end of file diff --git a/Doxygen/build/Constants_8h__dep__incl.png b/Doxygen/build/Constants_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..beb6f19880c1d36b35272b25bc75eaaabd981945 GIT binary patch literal 5735 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 literal 0 HcmV?d00001 diff --git a/Doxygen/build/Constants_8h_source.html b/Doxygen/build/Constants_8h_source.html new file mode 100644 index 0000000..83e31e2 --- /dev/null +++ b/Doxygen/build/Constants_8h_source.html @@ -0,0 +1,99 @@ + + + + + + + +Leonetienne/Eule: Eule/Constants.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Constants.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 
+
3 // Pretty sure the compiler will optimize these calculations out...
+
4 
+
6 #define PI 3.14159265358979323846264338327950288419716939937510
+
7 
+
9 #define HALF_PI 1.57079632679489661923132169163975144209858469968755
+
10 
+
12 #define Deg2Rad 0.0174532925199432957692369076848861271344287188854172222222222222
+
13 
+
15 #define Rad2Deg 57.295779513082320876798154814105170332405472466564427711013084788
+
+ + + + diff --git a/Doxygen/build/Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html b/Doxygen/build/Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html new file mode 100644 index 0000000..cba53a0 --- /dev/null +++ b/Doxygen/build/Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html @@ -0,0 +1,84 @@ + + + + + + + +Leonetienne/Eule: Eule/Debug/Eule.vcxproj.FileListAbsolute.txt File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Eule/Debug/Eule.vcxproj.FileListAbsolute.txt File Reference
+
+
+
+ + + + diff --git a/Doxygen/build/Math_8cpp.html b/Doxygen/build/Math_8cpp.html new file mode 100644 index 0000000..f29bb87 --- /dev/null +++ b/Doxygen/build/Math_8cpp.html @@ -0,0 +1,130 @@ + + + + + + + +Leonetienne/Eule: Eule/Math.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Math.cpp File Reference
+
+
+
#include "Math.h"
+#include "Constants.h"
+#include <array>
+
+Include dependency graph for Math.cpp:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Macros

#define MAKE_SURE_RNG_IS_INITIALIZED   if (!isRngInitialized) InitRng();
 
+

Macro Definition Documentation

+ +

◆ MAKE_SURE_RNG_IS_INITIALIZED

+ +
+
+ + + + +
#define MAKE_SURE_RNG_IS_INITIALIZED   if (!isRngInitialized) InitRng();
+
+ +

Definition at line 8 of file Math.cpp.

+ +
+
+
+ + + + diff --git a/Doxygen/build/Math_8cpp__incl.map b/Doxygen/build/Math_8cpp__incl.map new file mode 100644 index 0000000..e3e37ad --- /dev/null +++ b/Doxygen/build/Math_8cpp__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Doxygen/build/Math_8cpp__incl.md5 b/Doxygen/build/Math_8cpp__incl.md5 new file mode 100644 index 0000000..da36cbb --- /dev/null +++ b/Doxygen/build/Math_8cpp__incl.md5 @@ -0,0 +1 @@ +b3c86aa9fc0928813fa25ed5a0b9b4c3 \ No newline at end of file diff --git a/Doxygen/build/Math_8cpp__incl.png b/Doxygen/build/Math_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..2202df0bf598791e62067cc8392be9356c46223e GIT binary patch literal 7992 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 + + + + + + +Leonetienne/Eule: Eule/Math.cpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Math.cpp
+
+
+Go to the documentation of this file.
1 #include "Math.h"
+
2 #include "Constants.h"
+
3 #include <array>
+
4 
+
5 using namespace Eule;
+
6 
+
7 // Checks if the random number generator is initialized. Does nothing if it is, initializes if it isn't.
+
8 #define MAKE_SURE_RNG_IS_INITIALIZED if (!isRngInitialized) InitRng();
+
9 
+
10 void Math::InitRng()
+
11 {
+
12  // Create truly random source (from hardware events)
+
13  std::random_device randomSource;
+
14 
+
15  // Generate enough truly random values to populate the entire state of the mersenne twister
+
16  std::array<int, std::mt19937::state_size> seedValues;
+
17  std::generate_n(seedValues.data(), seedValues.size(), std::ref(randomSource));
+
18  std::seed_seq seedSequence(seedValues.begin(), seedValues.end());
+
19 
+
20  // Seed the mersenne twister with these values
+
21  rng = std::mt19937(seedSequence);
+
22 
+
23  isRngInitialized = true;
+
24 
+
25  return;
+
26 }
+
27 
+
28 // Will return a random double between 0 and 1
+
29 double Math::Random()
+
30 {
+ +
32 
+
33  return (rng() % 694206942069ll) / 694206942069.0;
+
34 }
+
35 
+
36 // Will return a random unsigned integer.
+
37 unsigned int Math::RandomUint()
+
38 {
+ +
40 
+
41  return rng();
+
42 }
+
43 
+
44 // Will return a random integer
+
45 unsigned int Math::RandomInt()
+
46 {
+ +
48 
+
49  // Since this is supposed to return a random value anyways,
+
50  // we can let the random uint overflow without any problems.
+
51  return (int)rng();
+
52 }
+
53 
+
54 // Will return a random double within a range
+
55 // These bounds are INCLUSIVE!
+
56 double Math::RandomRange(double min, double max)
+
57 {
+
58  return (Random() * (max - min)) + min;
+
59 }
+
60 
+
61 // Will return a random integer within a range. This is faster than '(int)RandomRange(x,y)'
+
62 // These bounds are INCLUSIVE!
+
63 int Math::RandomIntRange(int min, int max)
+
64 {
+
65  return (rng() % (max + 1 - min)) + min;
+
66 }
+
67 
+
68 double Math::Oscillate(const double a, const double b, const double counter, const double speed)
+
69 {
+
70  return (sin(counter * speed * PI - HALF_PI) * 0.5 + 0.5) * (b-a) + a;
+
71 }
+
72 
+
73 bool Math::RandomChance(const double chance)
+
74 {
+
75  return Random() <= chance;
+
76 }
+
77 
+
78 std::mt19937 Math::rng;
+
79 bool Math::isRngInitialized = true;
+
+
#define MAKE_SURE_RNG_IS_INITIALIZED
Definition: Math.cpp:8
+
static bool RandomChance(const double chance)
Will 'roll' a dice, returning true percent of the time.
Definition: Math.cpp:73
+
static double RandomRange(const double min, const double max)
Will return a random double within a range These bounds are INCLUSIVE!
Definition: Math.cpp:56
+
#define PI
Pi up to 50 decimal places.
Definition: Constants.h:6
+ +
#define HALF_PI
Pi divided by two.
Definition: Constants.h:9
+
static unsigned int RandomInt()
Will return a random integer.
Definition: Math.cpp:45
+ +
static int RandomIntRange(const int max, const int min)
Will return a random integer within a range.
Definition: Math.cpp:63
+
static double Random()
Will return a random double between 0 and 1
Definition: Math.cpp:29
+
static unsigned int RandomUint()
Will return a random unsigned integer.
Definition: Math.cpp:37
+
Definition: Collider.h:4
+
static double Oscillate(const double a, const double b, const double counter, const double speed)
Kind of like , but it oscillates over instead of , by a given speed.
Definition: Math.cpp:68
+ + + + diff --git a/Doxygen/build/Math_8h.html b/Doxygen/build/Math_8h.html new file mode 100644 index 0000000..58171a0 --- /dev/null +++ b/Doxygen/build/Math_8h.html @@ -0,0 +1,128 @@ + + + + + + + +Leonetienne/Eule: Eule/Math.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Math.h File Reference
+
+
+
#include <random>
+
+Include dependency graph for Math.h:
+
+
+ + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Eule::Math
 Math utility class. More...
 
+ + + +

+Namespaces

 Eule
 
+
+ + + + diff --git a/Doxygen/build/Math_8h__dep__incl.map b/Doxygen/build/Math_8h__dep__incl.map new file mode 100644 index 0000000..0305d75 --- /dev/null +++ b/Doxygen/build/Math_8h__dep__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Doxygen/build/Math_8h__dep__incl.md5 b/Doxygen/build/Math_8h__dep__incl.md5 new file mode 100644 index 0000000..439b315 --- /dev/null +++ b/Doxygen/build/Math_8h__dep__incl.md5 @@ -0,0 +1 @@ +73207d65ad51e6c8ebeaac070e30ef55 \ No newline at end of file diff --git a/Doxygen/build/Math_8h__dep__incl.png b/Doxygen/build/Math_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..aa88a7f7ef5fd98868ec26dfb9a51a77a178429e GIT binary patch literal 10073 zcmZ{K1yEek(&hvR5G(`Mlceg#fw^h4U z|L!m~mzsO$-aai~e|@^6Rh4B>k?@fq5D2QAtfV>w0&@-icR_>!pPPcIwBP`5t{@`` zd3ydU=qyWxKu95Sl46=ZIS0$Wx|nk-yvIW@g9)^E2{ADkq86BSq?a-BCA#Q5hHq3) z+8dih_7-pTJF7cqbiU}kkWy_VS8vfbV4y80?J!rZdQVDOuy3H-FmjZ*ktz^D1S3bi zIzC;dlA}15vx$=GJQgs{hebHR2E>3s*o)-bpXGu;C|<%4Js*?a!tp;JNtqBmo{ysX z9&$Pm2&*~_3=E~w%gp4A4B8!f2t*q0rL@rtQEe=wzJ&#S85x-=>|{GGF0SzKa2G1L zkg5V11PD7aBI5D!agqnqXMH=n-S2^Slt##qAF`o@|DQ*pLxFD0&i;+II4!3P7KVj| zrKY4rbiIa%)`%9sK8rK;UK9b+)@(n=JpOuXYb&~Bv!I}0dpy7RG&)z5ii#>PFAw=G zBedni#Kgp6i*sxVI|S19vS;{3l6QXKrJj#ZtIx1Soh~8Tz`_E4537R0FaeJfqkbcz z(8Z#2m!7`9wzhW6RTKm=K>?k70XZinB^CYCq@kg)v9mL@<|27%>+CENbnjzoT9BAH zez@H6rLyvaijd#=U|(Ojc%doozun!1-@nhVR)dSvmpc8uPuBZ--Mo%g4t93=6JN+(p2S|d?&(D{>`Eo3z_L(0nwYg6gNr{PxwY9Yg%?6O(0iQtt z76~D{U5g~4r>9RK7V^6}wbamDg1PZCf~3th^XhQfcGIQ zE{c(nQL>x5x_U}#YS-OiN7v)+-b$xGZbabSK?_)>N#KQ+y!@}BRGP`W;D-wxS=qsv zFFHV%Pqo1hUj}yK5bA;AgMi{gzIC{5A+gDnRaDrL)>c+j_+B5crJDrV0xc93VZ42- zt)`}?uODNk3-mdh&SE{5L$@?PFhIk^R9#ZC)v_9Nc5!h~CrY2jZ#(swO5xMzva%~L z)!^VKI*n3VI=Y+NTW)Ud*_jzsM-oWLeF$)m&E*LTE6Y>9^oLqxKGcq&f01@mAVin}r$0I<(AU?8 zhNh%oM408~=1MFgKuASMCxB%|<>cgW$vL^Xy;j9cO!CDGf$EGTBqTN~WD4L_2RA~kVqyygg3H{R0D<_i zx~}&Ew{z#ssjRFlFE2k7fbQ#!Zg1~Fq0qg(*T>M?+uOpz!n>;@XItC4`uZ#m>#?)#@ktF}%BP*O{2Jprax&pXc7ey5vqQc`_?|Nfm6gt~k#Ej?Upd0q1Xl7zhk zuq8@ET3Y(*P8%Q!oy#5)gj5-LSh@!`1oF4*c?ID0`DG~D^HCQ0|AL^wl;&n;=9YY4 zOK=8JjGY})zj?U)Qz?7Bu~9QVzDZHBF+Q#zA1|JZ^EW%|1UozamoHzK*^j<9iWRq( zd`pp)kl5?+9>vB+JzC-F^qIl^hcZF%C9t5H)04LEG9e*>AU@dD{U>Vs}`J> zJuaaIoozQk{&%a(`K9UusulE_mF#QXcTYB)T=ZI*;%Y^zE0Gj1Vg`W^p3E(N*J*PT z$3IxB+W0&(wrCktW~OctBGgz>dR&DQTF!i`VZ=D{$KN38-`s1jJ-vLNApA>BlXL3# zdC_ze8;XYJ=d&9aVUvl)F-`id!Q`zMFA{pH1Rt3uCdLjcMmSfwSe2FdsLNSWEVQ(^ z_l4fR#WqO1u=ct+3C>5yJfeUP)h0+$HYg( z=lF?`aHL!lX_sm@`O~NRwwvpZBQ?*JlG9=K($Z8q%WCuo3UMSP z%}@w3^4a~Vg0ocLqkw%nQ>@QGI z+dLc4No;evGY|+Dd*jD9KF%b_xyp;}Gke1_AH_>uPi{A-gT(no(-j(}xYU#%;)xdR z^CwI_y-rJ&?(&!A1X!)&aO<<#P!yCN{0|mvh+pF%`XMf0Vek0*`VYiw z5SZG|%rMX6$;oxq?PUo(2XQSo6Gmdh~P;EoVQ*k94)Q>HMk+ zL^agauP+z-71a3}@gHu#mO8KcJ;{F7|eWPF3qq9(z zc5-shPazBM{m951gSMn=o1n1Cd8dy*hjOky#~+x~l)T`Zt*!QUZQ-XbBY_s@BMVl= ziH-XD_Wk{ooSdos{i&iNdipeWv-ixqJFZ^MoLodaBi?WjbR58~l2C+AR1FPBE$S!I zx4!5c0k{D!NL%mf(fGA~YLCf<&*xZMQW7bj<%jEj!#LsNRj|kb1(6I~`f!&o$J6hM zJ4Nc@rGNlEJ)#qG(PA|rL24P9TAF?>^EZTqcXKA=YD=PJ8r$P7e1U$|xWhn8dfx?8 zhPN=C`wNXTZKva!9WwVe-pQ1`CTFNCDcShjZD2iKs!@R@Y*O%9l7;@ZZUDp1PXF|5 z6`?{UzrMZQ$IlPH{7r5SW2p+yTdOxOAkriNLF0(g${N0Yg^}V0ex#)2XlEy{QHIaY zrw87^3O06^X*P@>a|~PkE^IY44tgTfJKB^8|4wFS3ox6ECB!NEUeyc@5Bu$Dv%vTC zt^_$tNDwT9%9k)2I|T3l`6c!e4t8>CiY@T=2_4e}3(Mx^O9W2NUf+)G9Sv>KA48Xy z%$zIqBL?l-P>%*<5*hug{EhwUs(+#T(7U&;iO0F)H>~W zKV4qdyoceoTL)I^@8{OiD#7Cz$;n~FMZvV*ezhJr3<(JmD}enmSXpT&Zld))o0vmj1X zDO8=Uc3H zq}7K_LrTi^K)(f*;NQ8BPkhwyRz81P%!aN{>s$eS82^EroBX6wO?^E-2v^&iN3^*r zJxq`c(JoP8An?ygv^Oq8{vN94YD6R>7Rv2eNfzT^Xhf4hA~MnYXKi?lna};-8c8r~ zeEdL-{uVwKr-Fn;W~+pfQfyd{FmYm+`}RG{_haHhJ2-gh&t*86so@oxG1-fsKYUO! z7nyCa#(sRH0T{cqOk>o3E_UPTnbTlBJ(lA;xOJM&HrHQZ@aD&h99;>Vv}p9m8XdDfAf z^u@L)q~}G&=nL3uzrMQAHxSs^XdtK10G=EWc+lc-k|n5TvhN8su(#hn+dgtOx3cVX zaynGiAqj)8@g5gKfS^3nZIqWMHE^jzZ%Z+X2P3*!@g9zpKi4F<@2G1lD(X8r#FK14;`8tFU6geTGcD6f%<18}C zO4{0T?(Q8~St*^JtmD7cH)|$n8JMc0qvbk)r-+5(qyOdnb!B<`)n)Asb?Qu@xCm0X zxxM}A0EqylI)fzXkE0bP!JvC5C#QUbpRSb_fD--q^c+K38R$E+v}7S1#^Y2SiK@YSU7l|-8y>aNP@-qTYOY2_%)`GP&}9Y z();&IpRGB06KQA}t3-u_pd*@UYB}7aHecN_A*9Zr68Iao#=5K#UE(5Fyr8cvF0Soy z-gE1h04%JVQP$a6@tJ{(w6JiS6(u$X|6H@LIC|76Dn>pY#Qb!{ix-vbw+Tb7;f+W`g!m~uLmEa1#|UY(THsx;jh?fIKI{YuCn639=P(H=(| zt(>J8SEy9$IfA}NTf^S!?2Iy={*Kl)?==|t8k5zDtzl*{xD z2nzFvE97}$O*cX9C>wt5&JE~~M9hp!jcE*=bYg<+{xuI~V}};s zvn4tW6iTCtwUkLw8AQ}Ed3islckc)Z1^}^m<2g1wI zl(y(NzML@{m0zkVD$2^XG6>%HK3pD=3jCPIFL2orJwo=$N-?Z0)4u9n^fqDS<}xWM zm2jrDI>Wrk%QMCzdLX6Sx%piY0mA$8DqpTX4#^FUA5owF;%B%FKK`#SI^zqiClo_t zxO^79p?m)&RqG#-4iB|qO(571IyfLc>gXtuO8zIz;1D~TI5Cd0WYWI+rlvC>W|_(= z3v*4LkiWXiF=3{1?+$Dx4AJNI_O1Jy^Xamq4c=yt3JsrYL%pM*J*EcKQY(0NB;W|0 zx8MJ!P?SIdmGbz`zE)S;pO|+XyRa}Yum>k6u}p{otj55oSIKFeo0w?#satM#BvHvI zVAzq5esO{zt*sqBh^0~QV}d(K2G);7#=Mi0sOoHzO2jZkWNW(TfCGt(3!k33 z7ff4PG2RwvYH@L7GG=7q$5b)*a-}Uk;MTua0r5=6PXFfB~ zC)Dmj7B;YPcQcCk>Li0V8RZqB1gTCa+UdStUxh}+T#XPnH*tqqPmb0X!=b=t%GISwu7P)5bXrCd)6eaIQVG7(kB=ntplq zMDV!@tLvb_5`C_!V&=c?X6dphub`{e+jvVTC`0^~fJS+gaVn6(9n%Nq8N$)C4=Z|m z4W&R~dvlW@qlf==GrpXYqs|$A2vC_+uYPi3(6J!w_pIAku0m`=(BSqNENm{1^X12C zF1^TCz^5=?0EK=!)M4i9;z^9a1KdMjZytaK5uxC~^0NF?S_-)vF_e^0dAmeGk49zX z%a@Jo+Xd%ke&;DlAvqnpM$h~#yydZoipNWjZ!|P_dA*3R{q4UO+ZgZR9g0l! z08gIyJ#rf0PKfdXj{mRFGc`UAq<8i50^Bz{D{BfM$Atfqk-PiA*6@6CG9B2P@b%Sm zUf$($FAe|9Kt(`0v14FnX8AvPtdyLNynbVgH#XK+sR)6Q46_LMn(-W4w0vyn8#sP9 zRP|^CWF}oAl6<*hwRC1rB%si}^9Tw!nA}iWmRfaz|5P_{zI=X^9#S|JS4o_XH23$0jmc8ZOlX9qmM^GM8j>{Fl96P{30f$oWtXI`hn$W<-9H> zE;ThgKAvsKF5Ma(nnVKBv8Lp-cH7h3T>{-Re&TYR6ON3>iBGA5 z0@f8av#@|il8=p-sje}-zGvTM89TQ*WMRA-bRC81XZauQ7E+P9MF_`FDY^gKl6{_h z?|==L+NF>%s-1rf_$M2iZBrA|$_h6b8L^wdtxg>21Rg%;+lT*~jPdb{>+3%G2zKwy z9kE2<;ngzG<3|PlX|Pto7kFE0MJs5P$(p^7r|f0-9uoD>O+xwg633xWX=fG|NXQn2Cp z*-=KhyDjRa{%Odxl#r(RAbyYt7#-=aHaYrk9v&Nm6t{s6kf>MOr|7@5iiVMu9gc~K z=;mh2#?Gp7iZzQEY#h{4&8A;rD3BXx06ZS$y#H9wNY<+{WxOGO-0 z!@L5}o19$z@$rs{ay^a~+!qSS@|!nTPD?)QURCm{6IJm9LY$oavhC{Z(Y#z7?TwY? zw946+L3UQqH|d_}P}z>kN^0uVWdnM)Dnt&&rly<^AF80x$cqa?XXos%tSbKg8ge=@ zBcu~=1h_lM=;^tHg;SNwfJVY2{dab3!Hw&y6Du-}45>3RY!uqxo4SxrB=h&~w}DFe z^pxM6zAiPjBol8Wgc+X2ShK&s^x@VXY+p>(TaFQMx9;uP%eSjqN3g$zVt;MENRoFNus46WklAx1;ZWGo%eNy#Ew;6BJC$ya{C` z*itegvdYYyJS1IC%MKXx9DgHPIG(|Vlu|&$=usJbf5Hj0;}F&0WAPt);lU4_8}Z^?wEweasHpWhdNAtdzwfp-KKVxx?~tDtdq3b^O#c$L;2w$`h&O^=1}gW0NroR5UGcclp|pM@+dc zivh=9oH%3wbkgc|P!}D238=o9Sc9qE-#1h_GbnvRL_|vf0Var;amC2rphKhZ5@~#H zKc=N$QS-EL(rklDFZDglXn+5o?(P7<89?$G^dWlr|0GSXTEc6K3;#lxw})ieHenL*U~Z(F*I1zk(1MBXT!w6hzN#}y;X_|Eh-8v zBF8%ubnA4q--yTCK|vpFKUfp=jM)pPvJ91@c>y(|K&Ty1~ z=Uwyv*{~~q18r?>m6VZ5{2AH~S|%MXYwsn|m?S9wh>ETkT*$%Wf3zqNi+t?|$X=+3 zEx5-z*GJI-fFq}co0}GOzxx4Ip`d_GQ@Q`iKucSoN^58Lz(U0C{%@qgdOW6tyDDV{Igv>5JIl+Vpoc?7M%E)D*@Z^PdwjE<-=JFs+GT=1$EJI; z)x|EVwxYA}@ljETh={cG^uLCOH(Yp!KQR%6hsnd%bJLQC;~2QEv;)h$l`eJQ&K563 z7jgQ~v*xhaJUTL>2>M?G17%fJir2qKvw3is^d(Ew*-#7`ZPXkc9lgA`{p11y0&Hw( z>j+6mNRYzCOVpVd8G#@n8@v%_;4#C)!v-x*MB(DDuC8MK-ve&k4wu^S@$pk>RKB}! zD_`01@bEZ;NB#V1zW=8VG;OM@t8pVhA1UzRV(#$p5M0V(H6p8`A|r6sY(y<<1`Ey| z%r^}5^hg*PJxrA-{4~%>OH1?f^ZR*UiAul?HuX+#0?xl=LhW?948Ua-H)-c$YI^kgQjJX#ltc&PtS{Iqk+Tu`D~S*hKWg{F@u{Q zB^6cR{mB53W4csnvDI~>C-QYimy)lI{0BHxzw2W&5fKq4CMM9n1pT6=rKLk>O#F|s zzX-5WXJZd+wxLzVo$cl2v|L`bZZP6a*6r5%N6yr$j=Me>GF2E+H;CcX=y`*F>5EQno`5&AurP7YSA}$DK3?A5{{D5|yv)q#%edHB z0iWZ)pp&RwYfOZN^}#z^Mue6Yda^M9+RgM#Or9<-vT|}_ixdPQusFG2p_#t|(`$sUUy82+PCvx%~)`$9ehjn{3O#@9$O7&9kHRz9rKjrXy z+JTlW$>QC=qa&7@CQW$t1P3nk-6OFNTw<4p%L2Ajl)#OEU66Q)d0ilBmzM_yC_QYvMCE`>4#xooqtmNJN52Yk^1fv5pK5B3hbG+BE+A_m9VU#T55)J3n|VPsjim zu(hG4=J5SXWN~qEeFKAze7xxBXb^p>8XCo_w2RG-?;7Sii8OU|aD+s?Q5P2%qsPDd zo<&F(D`l`2-XVi1h)xWTggSO;CKtkE>>!aNAtM8WHng932Jl5r56dNt^tUr<~Koq0e_u zUQbUCR~ks|z1lr85+`3WJ3EW9c%7;u+|9cGZ!{bFViJ7T8n%J9zjR^1*K0#9t(nuU z;jV{Ekn&cM;NDZnBpmyEyE=;GZ}qltavIw{Q|qON$;AV)6;ZHcoidGc=6jE((sxAr`qm?g3L6`6(&p&d#e3 zOoMV7zj4lPTBZ!gnJxGoH8SJAvPtTgE^6;Opw^k7aULgY@FO`rWcl7gW?DIE=a> z%pb`w_vbP3@NWKghuKb-zG)dY&>*j0DF_e_-kB-^`J9M|$kNi%|LSmNZZ03hBRnd7 zHY)un&LSB+zsS=)hbumW^Y0@VVX3OF=3-|*Jvq^ES4t#pJu8gv2|5guU+$7Mk|PMV^3bzD;P~oeM|C0mk?@ zo)2acGSkzycXpziBR_oDpKn00Y+GsfRFIJ=J33I8nkAs6qS~4$lmNj8wwZ{Di95Uw zkPs0?Z*I)zP2h&cLX({W>C@U>H~Och)Ymg+h)rTIPUmBC;9tFZWoKuH0^if!-90!+ z%gkKkzsyTG27JcE*x1R^GJIt&gY8}Wk#v2jr0jeFCq5G`tqsU(U?8KWre<_>6!;(% zU2>v8a%!mnmNFBb%F7~}VaVyL*Wr?!B5w+Ob8|DW3CZ>4_jtGZ>_2j5u<(30ReslbVp z5m}yc&F3Ku@WOrdJX{5Vgfu=+zkru5*qV7hPVJK6@sX06p6`h{WoBl==KuJ*T2v6a zIiE}+gMo=jWrW;Dy|R`1cU*7%@2#RA==o7oQv=SOQi&AZ26$$BJ6acE9TtpqepgqQ zi*1J4CysmZAFOx;1hFM#fBhJ!z^~YsYg@25<4K>N2e}bV_@Cn*;QRkGarQ)FCN-F~ T<^H1W`Fc4iWyu + + + diff --git a/Doxygen/build/Math_8h__incl.md5 b/Doxygen/build/Math_8h__incl.md5 new file mode 100644 index 0000000..1b7b3c1 --- /dev/null +++ b/Doxygen/build/Math_8h__incl.md5 @@ -0,0 +1 @@ +00ccaa4881b8dd3c6030cc0f136de55d \ No newline at end of file diff --git a/Doxygen/build/Math_8h__incl.png b/Doxygen/build/Math_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..8e724332d8f4ba83502aedb9df575e54db588a8e GIT binary patch literal 2464 zcmb`Je>~IMAICp_hG^yIqQ*tby@+B+ES3;6zul#h@@sWnzb3yzd@KDJ#x40Vi(-~o zQRbq}Ff2)0<;SQgi@6OoHDP|-&wYIFy^qKD|L-}EbI#*&&Uw5a=e*DR^?aXeJ{UJO z6~%_t5!0pHvm96@Q90ZKuY->`4_at zF<8f7)6E4Fg*@6+t4~9k9!)-6OF5L;7g#x_(G%#tVgesmet!PKLc)24B-Pc` zj5Nt7PMD1X8C>cOOG;{vLwufKUHQ!`At50))}sBwSN{|o&fP?_x4S#K?MhQqQ*W=U zN#E+p=r65NrpCs`;gOMDUWaKxda8=Z3JCB%q17UUag{(||BSGyg z!l2Q{7&J4)LQ_RekzH1@yu5q`qVGZRD|D~+F-f%F*?6DHTpMi+gXYKpU2Jw#WaNre zD)tItWo9hS9{svzqN#GnCuQN|ky3Qfi4%DfYo=yqJD|`OyfEL#BsjF z2?S3JX8w;qc$Qyj-Pqn?fnaX@cQ-dT@LnhV{RKi{F^S~)7Wg$b76O5AiubA>z)zzy zG8}=**4Cp2TN`+@2&r#vfVsK(<;$17yu4!h3>o0#)RZ`dQC_~I$RqIR(Q9rt2n403 zW_W0bY=7?4FzuKgKlYtRZbbdJdjUTUa5$x<~^qREY6MV=<81m4=*xZcd7Sf z%WaxTY{Qz}21|K))1KaaHaqp{!RCOIVPVP7`9vbV_3ixp{GlsbT3cGSN?a>Mx%M(cJQqm+Prx)kackrB=ey!c>VNj3{?)$*3qF68gq+awwEwe zjqPY}?}w20adyz0p^*`*(&vb}vGH-D{=xPdKQry9hzJUmD!2&meDfy2*VotC+1cIw z>f^_c{c5|V2p|j9IJkR%2~AN!0bygKtEx!Ge4pV~No1mJ4j3BVt*&;d;+pN*v-thH zaC&-=xjC)AJ~262MdpayT$B zFezyfJgk$Glb@e@o~v|8Y((gpjI%oyO=f?nrckuBv_SVSq%iK?yT|8;q!*##rr^oy z>ICAHZc49W==4ZUS($Eazvl&$W z(GJE7tk=17bf*83uX{XlT^`h(6YN8lLl>xHw&I9rcsPheZDhX`NzAnS8If{C1qFrX zXHlL$wezlm3+S3%=XXC+S#6C-+BYF>3_mz6*xi_>i`SHm*Wla%H8n$PaH zGasFHz~|(Wbqj`#Kn*BcRlpV44KH7^mRIJR!#uPN9=bKA3udSHs15Q=G7_xo%=R`B-vqT_kX~_rZh-K|OZ8@{}qDMW5Pi^3p%OtjO zdAw{6zUe3-9eH8k_>E(oD^f=!5-Fk%jBj~Ce*G+bH?B#o9gd1xyR>nvJB^5jzrM~Q zX=!T1+gj|#Du4JQ2kS#3Wr1k8*lkn>mMjlGY*G$KERI)Yw`Z=M{p`}-|Kf{#=6`uU z>PqbF?6i&LJH$_3B9X>lQ@sxxZp%5Psj|z!pt7ZSn?e~v;H_&kW#`@a8 zz(5K!s7~ve3mSf7P)Hg)@p1YUGA7iV3HE-WlmR#vtr$Hc{Ltq_Jh93i1=W@ctaM@K2EN~Sb92^`+JlUQu1E@kE0!aljLl(%*%ljbx(ZXW)E4JnHP|No{U>4M~ zjp?v|pvL2ixr2j5>;oE2OCm$SGM23AH;A=Tbp_hnBsoj-?h=mgk96W4|)m>@9*z_ zeU|Q8)p+;r>C{wSR}L5%csyQ1Ln9>~hf_NFMIt#75(3-4y_2wXMkEqFIkBlBB07&4tMYO-;)Cahmzp!f%WMz59#!wHYwSd^GSfJVE>J>{{atn<4K)s6;~wL>d)h1 z|A-&BptE!)v=NKJV1lCEd%qVX8RF9a`Ne=Cy}nry;IGWS>zM(+T)>gT7?%gA(Et1i D&f&N3 literal 0 HcmV?d00001 diff --git a/Doxygen/build/Math_8h_source.html b/Doxygen/build/Math_8h_source.html new file mode 100644 index 0000000..3340501 --- /dev/null +++ b/Doxygen/build/Math_8h_source.html @@ -0,0 +1,183 @@ + + + + + + + +Leonetienne/Eule: Eule/Math.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Math.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include <random>
+
3 
+
4 namespace Eule
+
5 {
+
8  class Math
+
9  {
+
10  public:
+
12  [[nodiscard]] static constexpr double Max(const double a, const double b);
+
13 
+
15  [[nodiscard]] static constexpr double Min(const double a, const double b);
+
16 
+
18  [[nodiscard]] static constexpr double Clamp(const double v, const double min, const double max);
+
19 
+
21  [[nodiscard]] static constexpr double Lerp(double a, double b, double t);
+
22 
+
24  [[nodiscard]] static constexpr double Abs(const double a);
+
25 
+
27  [[nodiscard]] static constexpr bool Similar(const double a, const double b, const double epsilon = 0.00001);
+
28 
+
30  static double Random();
+
31 
+
33  static unsigned int RandomUint();
+
34 
+
36  static unsigned int RandomInt();
+
37 
+
40  static double RandomRange(const double min, const double max);
+
41 
+
44  static int RandomIntRange(const int max, const int min);
+
45 
+
47  static bool RandomChance(const double chance);
+
48 
+
53  static double Oscillate(const double a, const double b, const double counter, const double speed);
+
54 
+
55  private:
+
57  static void InitRng();
+
58 
+
59  static std::mt19937 rng;
+
60  static bool isRngInitialized;
+
61 
+
62  // No instanciation! >:(
+
63  Math();
+
64  };
+
65 
+
66 
+
67 
+
68  /* These are just the inline methods. They have to lie in the header file. */
+
69  /* The more sophisticated methods are in the .cpp */
+
70 
+
71  constexpr inline double Math::Max(double a, double b)
+
72  {
+
73  return (a > b) ? a : b;
+
74  }
+
75 
+
76  constexpr inline double Math::Min(double a, double b)
+
77  {
+
78  return (a < b) ? a : b;
+
79  }
+
80 
+
81  constexpr inline double Math::Clamp(double v, double min, double max)
+
82  {
+
83  return Max(Min(v, max), min);
+
84  }
+
85 
+
86  constexpr inline double Math::Lerp(double a, double b, double t)
+
87  {
+
88  const double it = 1.0 - t;
+
89  return (a * it) + (b * t);
+
90  }
+
91 
+
92  inline constexpr double Math::Abs(const double a)
+
93  {
+
94  return (a > 0.0) ? a : -a;
+
95  }
+
96 
+
97  inline constexpr bool Math::Math::Similar(const double a, const double b, const double epsilon)
+
98  {
+
99  return Abs(a - b) <= epsilon;
+
100  }
+
101 }
+
+
static bool RandomChance(const double chance)
Will 'roll' a dice, returning true percent of the time.
Definition: Math.cpp:73
+
static constexpr double Abs(const double a)
Will return the absolute value of a
Definition: Math.h:92
+
static double RandomRange(const double min, const double max)
Will return a random double within a range These bounds are INCLUSIVE!
Definition: Math.cpp:56
+
static constexpr double Lerp(double a, double b, double t)
Will return the linear interpolation between a and b by t
Definition: Math.h:86
+
static unsigned int RandomInt()
Will return a random integer.
Definition: Math.cpp:45
+
static constexpr double Max(const double a, const double b)
Will return the bigger of two values.
Definition: Math.h:71
+
Math utility class.
Definition: Math.h:8
+
static constexpr double Clamp(const double v, const double min, const double max)
Will return v, but at least min, and at most max
Definition: Math.h:81
+
static constexpr double Min(const double a, const double b)
Will return the smaller of two values.
Definition: Math.h:76
+
static int RandomIntRange(const int max, const int min)
Will return a random integer within a range.
Definition: Math.cpp:63
+
static double Random()
Will return a random double between 0 and 1
Definition: Math.cpp:29
+
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
static unsigned int RandomUint()
Will return a random unsigned integer.
Definition: Math.cpp:37
+
Definition: Collider.h:4
+
static double Oscillate(const double a, const double b, const double counter, const double speed)
Kind of like , but it oscillates over instead of , by a given speed.
Definition: Math.cpp:68
+ + + + diff --git a/Doxygen/build/Matrix4x4_8cpp.html b/Doxygen/build/Matrix4x4_8cpp.html new file mode 100644 index 0000000..2e266d4 --- /dev/null +++ b/Doxygen/build/Matrix4x4_8cpp.html @@ -0,0 +1,129 @@ + + + + + + + +Leonetienne/Eule: Eule/Matrix4x4.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Matrix4x4.cpp File Reference
+
+
+
#include "Matrix4x4.h"
+#include "Vector3.h"
+#include "Math.h"
+#include <immintrin.h>
+
+Include dependency graph for Matrix4x4.cpp:
+
+
+ + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

 Eule
 
+ + + + + +

+Functions

std::ostream & Eule::operator<< (std::ostream &os, const Matrix4x4 &m)
 
std::wostream & Eule::operator<< (std::wostream &os, const Matrix4x4 &m)
 
+
+ + + + diff --git a/Doxygen/build/Matrix4x4_8cpp__incl.map b/Doxygen/build/Matrix4x4_8cpp__incl.map new file mode 100644 index 0000000..d443343 --- /dev/null +++ b/Doxygen/build/Matrix4x4_8cpp__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Doxygen/build/Matrix4x4_8cpp__incl.md5 b/Doxygen/build/Matrix4x4_8cpp__incl.md5 new file mode 100644 index 0000000..0cf31c5 --- /dev/null +++ b/Doxygen/build/Matrix4x4_8cpp__incl.md5 @@ -0,0 +1 @@ +7564e27ac3fef491d766419d5a5fe90e \ No newline at end of file diff --git a/Doxygen/build/Matrix4x4_8cpp__incl.png b/Doxygen/build/Matrix4x4_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c78080185edf98cc124aa75712f91346697df3 GIT binary patch literal 23450 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
8h6kz_dSGFQZ;t9&+ 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 + + + + + + +Leonetienne/Eule: Eule/Matrix4x4.cpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Matrix4x4.cpp
+
+
+Go to the documentation of this file.
1 #include "Matrix4x4.h"
+
2 #include "Vector3.h"
+
3 #include "Math.h"
+
4 
+
5 //#define _EULE_NO_INTRINSICS_
+
6 #ifndef _EULE_NO_INTRINSICS_
+
7 #include <immintrin.h>
+
8 #endif
+
9 
+
10 using namespace Eule;
+
11 
+ +
13 {
+
14  // Create identity matrix
+
15  for (std::size_t i = 0; i < 4; i++)
+
16  for (std::size_t j = 0; j < 4; j++)
+
17  v[i][j] = double(i == j);
+
18 
+
19  return;
+
20 }
+
21 
+ +
23 {
+
24  v = other.v;
+
25  return;
+
26 }
+
27 
+ +
29 {
+
30  v = std::move(other.v);
+
31  return;
+
32 }
+
33 
+ +
35 {
+
36  Matrix4x4 newMatrix;
+
37  newMatrix.p = 1;
+
38 
+
39  #ifndef _EULE_NO_INTRINSICS_
+
40 
+
41 
+
42  /* <= Matrix3x3 multiplication => */
+
43 
+
44  // Load matrix components
+
45  __m256d __va1 = _mm256_set_pd(v[0][0], v[0][0], v[0][0], v[1][0]);
+
46  __m256d __va2 = _mm256_set_pd(v[1][0], v[1][0], v[2][0], v[2][0]);
+
47 
+
48  __m256d __oa1 = _mm256_set_pd(other[0][0], other[0][1], other[0][2], other[0][0]);
+
49  __m256d __oa2 = _mm256_set_pd(other[0][1], other[0][2], other[0][0], other[0][1]);
+
50 
+
51  __m256d __vb1 = _mm256_set_pd(v[0][1], v[0][1], v[0][1], v[1][1]);
+
52  __m256d __vb2 = _mm256_set_pd(v[1][1], v[1][1], v[2][1], v[2][1]);
+
53 
+
54  __m256d __ob1 = _mm256_set_pd(other[1][0], other[1][1], other[1][2], other[1][0]);
+
55  __m256d __ob2 = _mm256_set_pd(other[1][1], other[1][2], other[1][0], other[1][1]);
+
56 
+
57  __m256d __vc1 = _mm256_set_pd(v[0][2], v[0][2], v[0][2], v[1][2]);
+
58  __m256d __vc2 = _mm256_set_pd(v[1][2], v[1][2], v[2][2], v[2][2]);
+
59 
+
60  __m256d __oc1 = _mm256_set_pd(other[2][0], other[2][1], other[2][2], other[2][0]);
+
61  __m256d __oc2 = _mm256_set_pd(other[2][1], other[2][2], other[2][0], other[2][1]);
+
62 
+
63  // Initialize sums
+
64  __m256d __sum1 = _mm256_set1_pd(0);
+
65  __m256d __sum2 = _mm256_set1_pd(0);
+
66 
+
67  // Let's multiply-add them together
+
68  // First, the first block
+
69  __sum1 = _mm256_fmadd_pd(__va1, __oa1, __sum1);
+
70  __sum1 = _mm256_fmadd_pd(__vb1, __ob1, __sum1);
+
71  __sum1 = _mm256_fmadd_pd(__vc1, __oc1, __sum1);
+
72 
+
73  // Then the second block
+
74  __sum2 = _mm256_fmadd_pd(__va2, __oa2, __sum2);
+
75  __sum2 = _mm256_fmadd_pd(__vb2, __ob2, __sum2);
+
76  __sum2 = _mm256_fmadd_pd(__vc2, __oc2, __sum2);
+
77 
+
78  // Retrieve results
+
79  double sum1[4];
+
80  double sum2[4];
+
81 
+
82  _mm256_storeu_pd(sum1, __sum1);
+
83  _mm256_storeu_pd(sum2, __sum2);
+
84 
+
85  // Apply results
+
86  // Block 1
+
87  newMatrix[0][0] = sum1[3];
+
88  newMatrix[0][1] = sum1[2];
+
89  newMatrix[0][2] = sum1[1];
+
90  newMatrix[1][0] = sum1[0];
+
91 
+
92  // Block 2
+
93  newMatrix[1][1] = sum2[3];
+
94  newMatrix[1][2] = sum2[2];
+
95  newMatrix[2][0] = sum2[1];
+
96  newMatrix[2][1] = sum2[0];
+
97 
+
98  // Does not fit in the intrinsic calculation. Might just calculate 'by hand'.
+
99  newMatrix[2][2] = (v[2][0] * other[0][2]) + (v[2][1] * other[1][2]) + (v[2][2] * other[2][2]);
+
100 
+
101 
+
102  /* <= Translation component => */
+
103 
+
104  // Load translation components into registers
+
105  __m256d __transSelf = _mm256_set_pd(0, l, h, d);
+
106  __m256d __transOther = _mm256_set_pd(0, other.l, other.h, other.d);
+
107 
+
108  // Let's add them
+
109  __m256d __sum = _mm256_add_pd(__transSelf, __transOther);
+
110 
+
111  // Retrieve results
+
112  double sum[4];
+
113  _mm256_storeu_pd(sum, __sum);
+
114 
+
115  // Apply them
+
116  newMatrix.d = sum[0];
+
117  newMatrix.h = sum[1];
+
118  newMatrix.l = sum[2];
+
119 
+
120  #else
+
121 
+
122 
+
123  // Rotation, Scaling
+
124  newMatrix[0][0] = (v[0][0] * other[0][0]) + (v[0][1] * other[1][0]) + (v[0][2] * other[2][0]);
+
125  newMatrix[0][1] = (v[0][0] * other[0][1]) + (v[0][1] * other[1][1]) + (v[0][2] * other[2][1]);
+
126  newMatrix[0][2] = (v[0][0] * other[0][2]) + (v[0][1] * other[1][2]) + (v[0][2] * other[2][2]);
+
127 
+
128  newMatrix[1][0] = (v[1][0] * other[0][0]) + (v[1][1] * other[1][0]) + (v[1][2] * other[2][0]);
+
129  newMatrix[1][1] = (v[1][0] * other[0][1]) + (v[1][1] * other[1][1]) + (v[1][2] * other[2][1]);
+
130  newMatrix[1][2] = (v[1][0] * other[0][2]) + (v[1][1] * other[1][2]) + (v[1][2] * other[2][2]);
+
131 
+
132  newMatrix[2][0] = (v[2][0] * other[0][0]) + (v[2][1] * other[1][0]) + (v[2][2] * other[2][0]);
+
133  newMatrix[2][1] = (v[2][0] * other[0][1]) + (v[2][1] * other[1][1]) + (v[2][2] * other[2][1]);
+
134  newMatrix[2][2] = (v[2][0] * other[0][2]) + (v[2][1] * other[1][2]) + (v[2][2] * other[2][2]);
+
135 
+
136 
+
137  // Translation
+
138  newMatrix[0][3] = v[0][3] + other[0][3];
+
139  newMatrix[1][3] = v[1][3] + other[1][3];
+
140  newMatrix[2][3] = v[2][3] + other[2][3];
+
141 
+
142  #endif
+
143 
+
144  return newMatrix;
+
145 }
+
146 
+ +
148 {
+
149  *this = *this * other;
+
150  return;
+
151 }
+
152 
+ +
154 {
+
155  return *this * other.Inverse3x3();
+
156 }
+
157 
+ +
159 {
+
160  *this = *this * other.Inverse3x3();
+
161  return;
+
162 }
+
163 
+
164 Matrix4x4 Matrix4x4::operator*(const double scalar) const
+
165 {
+
166  Matrix4x4 m;
+
167 
+
168  #ifndef _EULE_NO_INTRINSICS_
+
169 
+
170  // Load matrix rows
+
171  __m256d __row0 = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
172  __m256d __row1 = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
173  __m256d __row2 = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
174  __m256d __row3 = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
175 
+
176  // Load scalar
+
177  __m256d __scalar = _mm256_set1_pd(scalar);
+
178 
+
179  // Scale values
+
180  __m256d __sr0 = _mm256_mul_pd(__row0, __scalar);
+
181  __m256d __sr1 = _mm256_mul_pd(__row1, __scalar);
+
182  __m256d __sr2 = _mm256_mul_pd(__row2, __scalar);
+
183  __m256d __sr3 = _mm256_mul_pd(__row3, __scalar);
+
184 
+
185  // Extract results
+
186  _mm256_storeu_pd(m.v[0].data(), __sr0);
+
187  _mm256_storeu_pd(m.v[1].data(), __sr1);
+
188  _mm256_storeu_pd(m.v[2].data(), __sr2);
+
189  _mm256_storeu_pd(m.v[3].data(), __sr3);
+
190 
+
191  #else
+
192 
+
193  for (std::size_t x = 0; x < 4; x++)
+
194  for (std::size_t y = 0; y < 4; y++)
+
195  m[x][y] = v[x][y] * scalar;
+
196 
+
197  #endif
+
198 
+
199  return m;
+
200 }
+
201 
+
202 void Matrix4x4::operator*=(const double scalar)
+
203 {
+
204  *this = *this * scalar;
+
205  return;
+
206 }
+
207 
+
208 Matrix4x4 Matrix4x4::operator/(const double denominator) const
+
209 {
+
210  const double precomputeDivision = 1.0 / denominator;
+
211 
+
212  return *this * precomputeDivision;
+
213 }
+
214 
+
215 void Matrix4x4::operator/=(const double denominator)
+
216 {
+
217  *this = *this / denominator;
+
218  return;
+
219 }
+
220 
+ +
222 {
+
223  Matrix4x4 m;
+
224 
+
225  #ifndef _EULE_NO_INTRINSICS_
+
226 
+
227  // Load matrix rows
+
228  __m256d __row0a = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
229  __m256d __row1a = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
230  __m256d __row2a = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
231  __m256d __row3a = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
232 
+
233  __m256d __row0b = _mm256_set_pd(other[0][3], other[0][2], other[0][1], other[0][0]);
+
234  __m256d __row1b = _mm256_set_pd(other[1][3], other[1][2], other[1][1], other[1][0]);
+
235  __m256d __row2b = _mm256_set_pd(other[2][3], other[2][2], other[2][1], other[2][0]);
+
236  __m256d __row3b = _mm256_set_pd(other[3][3], other[3][2], other[3][1], other[3][0]);
+
237 
+
238  // Add rows
+
239  __m256d __sr0 = _mm256_add_pd(__row0a, __row0b);
+
240  __m256d __sr1 = _mm256_add_pd(__row1a, __row1b);
+
241  __m256d __sr2 = _mm256_add_pd(__row2a, __row2b);
+
242  __m256d __sr3 = _mm256_add_pd(__row3a, __row3b);
+
243 
+
244  // Extract results
+
245  _mm256_storeu_pd(m.v[0].data(), __sr0);
+
246  _mm256_storeu_pd(m.v[1].data(), __sr1);
+
247  _mm256_storeu_pd(m.v[2].data(), __sr2);
+
248  _mm256_storeu_pd(m.v[3].data(), __sr3);
+
249 
+
250  #else
+
251 
+
252  for (std::size_t x = 0; x < 4; x++)
+
253  for (std::size_t y = 0; y < 4; y++)
+
254  m[x][y] = v[x][y] + other[x][y];
+
255 
+
256  #endif
+
257 
+
258  return m;
+
259 }
+
260 
+ +
262 {
+
263  #ifndef _EULE_NO_INTRINSICS_
+
264  // Doing it again is a tad directer, and thus faster. We avoid an intermittent Matrix4x4 instance
+
265 
+
266  // Load matrix rows
+
267  __m256d __row0a = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
268  __m256d __row1a = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
269  __m256d __row2a = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
270  __m256d __row3a = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
271 
+
272  __m256d __row0b = _mm256_set_pd(other[0][3], other[0][2], other[0][1], other[0][0]);
+
273  __m256d __row1b = _mm256_set_pd(other[1][3], other[1][2], other[1][1], other[1][0]);
+
274  __m256d __row2b = _mm256_set_pd(other[2][3], other[2][2], other[2][1], other[2][0]);
+
275  __m256d __row3b = _mm256_set_pd(other[3][3], other[3][2], other[3][1], other[3][0]);
+
276 
+
277  // Add rows
+
278  __m256d __sr0 = _mm256_add_pd(__row0a, __row0b);
+
279  __m256d __sr1 = _mm256_add_pd(__row1a, __row1b);
+
280  __m256d __sr2 = _mm256_add_pd(__row2a, __row2b);
+
281  __m256d __sr3 = _mm256_add_pd(__row3a, __row3b);
+
282 
+
283  // Extract results
+
284  _mm256_storeu_pd(v[0].data(), __sr0);
+
285  _mm256_storeu_pd(v[1].data(), __sr1);
+
286  _mm256_storeu_pd(v[2].data(), __sr2);
+
287  _mm256_storeu_pd(v[3].data(), __sr3);
+
288 
+
289  #else
+
290 
+
291  *this = *this + other;
+
292 
+
293  #endif
+
294 
+
295  return;
+
296 }
+
297 
+ +
299 {
+
300  Matrix4x4 m;
+
301 
+
302  #ifndef _EULE_NO_INTRINSICS_
+
303 
+
304  // Load matrix rows
+
305  __m256d __row0a = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
306  __m256d __row1a = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
307  __m256d __row2a = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
308  __m256d __row3a = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
309 
+
310  __m256d __row0b = _mm256_set_pd(other[0][3], other[0][2], other[0][1], other[0][0]);
+
311  __m256d __row1b = _mm256_set_pd(other[1][3], other[1][2], other[1][1], other[1][0]);
+
312  __m256d __row2b = _mm256_set_pd(other[2][3], other[2][2], other[2][1], other[2][0]);
+
313  __m256d __row3b = _mm256_set_pd(other[3][3], other[3][2], other[3][1], other[3][0]);
+
314 
+
315  // Subtract rows
+
316  __m256d __sr0 = _mm256_sub_pd(__row0a, __row0b);
+
317  __m256d __sr1 = _mm256_sub_pd(__row1a, __row1b);
+
318  __m256d __sr2 = _mm256_sub_pd(__row2a, __row2b);
+
319  __m256d __sr3 = _mm256_sub_pd(__row3a, __row3b);
+
320 
+
321  // Extract results
+
322  _mm256_storeu_pd(m.v[0].data(), __sr0);
+
323  _mm256_storeu_pd(m.v[1].data(), __sr1);
+
324  _mm256_storeu_pd(m.v[2].data(), __sr2);
+
325  _mm256_storeu_pd(m.v[3].data(), __sr3);
+
326 
+
327  #else
+
328 
+
329  for (std::size_t x = 0; x < 4; x++)
+
330  for (std::size_t y = 0; y < 4; y++)
+
331  m[x][y] = v[x][y] - other[x][y];
+
332 
+
333  #endif
+
334 
+
335  return m;
+
336 }
+
337 
+ +
339 {
+
340  #ifndef _EULE_NO_INTRINSICS_
+
341  // Doing it again is a tad directer, and thus faster. We avoid an intermittent Matrix4x4 instance
+
342 
+
343  // Load matrix rows
+
344  __m256d __row0a = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
345  __m256d __row1a = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
346  __m256d __row2a = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
347  __m256d __row3a = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
348 
+
349  __m256d __row0b = _mm256_set_pd(other[0][3], other[0][2], other[0][1], other[0][0]);
+
350  __m256d __row1b = _mm256_set_pd(other[1][3], other[1][2], other[1][1], other[1][0]);
+
351  __m256d __row2b = _mm256_set_pd(other[2][3], other[2][2], other[2][1], other[2][0]);
+
352  __m256d __row3b = _mm256_set_pd(other[3][3], other[3][2], other[3][1], other[3][0]);
+
353 
+
354  // Subtract rows
+
355  __m256d __sr0 = _mm256_sub_pd(__row0a, __row0b);
+
356  __m256d __sr1 = _mm256_sub_pd(__row1a, __row1b);
+
357  __m256d __sr2 = _mm256_sub_pd(__row2a, __row2b);
+
358  __m256d __sr3 = _mm256_sub_pd(__row3a, __row3b);
+
359 
+
360  // Extract results
+
361  _mm256_storeu_pd(v[0].data(), __sr0);
+
362  _mm256_storeu_pd(v[1].data(), __sr1);
+
363  _mm256_storeu_pd(v[2].data(), __sr2);
+
364  _mm256_storeu_pd(v[3].data(), __sr3);
+
365 
+
366  #else
+
367 
+
368  * this = *this - other;
+
369 
+
370  #endif
+
371 
+
372  return;
+
373 }
+
374 
+
375 std::array<double, 4>& Matrix4x4::operator[](std::size_t y)
+
376 {
+
377  return v[y];
+
378 }
+
379 
+
380 const std::array<double, 4>& Matrix4x4::operator[](std::size_t y) const
+
381 {
+
382  return v[y];
+
383 }
+
384 
+
385 void Matrix4x4::operator=(const Matrix4x4& other)
+
386 {
+
387  v = other.v;
+
388  return;
+
389 }
+
390 
+
391 void Matrix4x4::operator=(Matrix4x4&& other) noexcept
+
392 {
+
393  v = std::move(other.v);
+
394  return;
+
395 }
+
396 
+ +
398 {
+
399  return v == other.v;
+
400 }
+
401 
+ +
403 {
+
404  return !operator==(other);
+
405 }
+
406 
+ +
408 {
+
409  return Vector3d(d, h, l);
+
410 }
+
411 
+ +
413 {
+
414  d = trans.x;
+
415  h = trans.y;
+
416  l = trans.z;
+
417  return;
+
418 }
+
419 
+ +
421 {
+
422  Matrix4x4 m(*this);
+
423  m.d = 0;
+
424  m.h = 0;
+
425  m.l = 0;
+
426  return m;
+
427 }
+
428 
+ +
430 {
+
431  Matrix4x4 trans(*this); // Keep other cells
+
432 
+
433  for (std::size_t i = 0; i < 3; i++)
+
434  for (std::size_t j = 0; j < 3; j++)
+
435  trans[j][i] = v[i][j];
+
436 
+
437  return trans;
+
438 }
+
439 
+ +
441 {
+
442  Matrix4x4 trans;
+
443 
+
444  for (std::size_t i = 0; i < 4; i++)
+
445  for (std::size_t j = 0; j < 4; j++)
+
446  trans[j][i] = v[i][j];
+
447 
+
448  return trans;
+
449 }
+
450 
+ +
452 {
+
453  Matrix4x4 m;
+
454 
+
455  m[0][0] = (v[0][0]*o[0][0]) + (v[0][1]*o[1][0]) + (v[0][2]*o[2][0]) + (v[0][3]*o[3][0]);
+
456  m[0][1] = (v[0][0]*o[0][1]) + (v[0][1]*o[1][1]) + (v[0][2]*o[2][1]) + (v[0][3]*o[3][1]);
+
457  m[0][2] = (v[0][0]*o[0][2]) + (v[0][1]*o[1][2]) + (v[0][2]*o[2][2]) + (v[0][3]*o[3][2]);
+
458  m[0][3] = (v[0][0]*o[0][3]) + (v[0][1]*o[1][3]) + (v[0][2]*o[2][3]) + (v[0][3]*o[3][3]);
+
459 
+
460  m[1][0] = (v[1][0]*o[0][0]) + (v[1][1]*o[1][0]) + (v[1][2]*o[2][0]) + (v[1][3]*o[3][0]);
+
461  m[1][1] = (v[1][0]*o[0][1]) + (v[1][1]*o[1][1]) + (v[1][2]*o[2][1]) + (v[1][3]*o[3][1]);
+
462  m[1][2] = (v[1][0]*o[0][2]) + (v[1][1]*o[1][2]) + (v[1][2]*o[2][2]) + (v[1][3]*o[3][2]);
+
463  m[1][3] = (v[1][0]*o[0][3]) + (v[1][1]*o[1][3]) + (v[1][2]*o[2][3]) + (v[1][3]*o[3][3]);
+
464 
+
465  m[2][0] = (v[2][0]*o[0][0]) + (v[2][1]*o[1][0]) + (v[2][2]*o[2][0]) + (v[2][3]*o[3][0]);
+
466  m[2][1] = (v[2][0]*o[0][1]) + (v[2][1]*o[1][1]) + (v[2][2]*o[2][1]) + (v[2][3]*o[3][1]);
+
467  m[2][2] = (v[2][0]*o[0][2]) + (v[2][1]*o[1][2]) + (v[2][2]*o[2][2]) + (v[2][3]*o[3][2]);
+
468  m[2][3] = (v[2][0]*o[0][3]) + (v[2][1]*o[1][3]) + (v[2][2]*o[2][3]) + (v[2][3]*o[3][3]);
+
469 
+
470  m[3][0] = (v[3][0]*o[0][0]) + (v[3][1]*o[1][0]) + (v[3][2]*o[2][0]) + (v[3][3]*o[3][0]);
+
471  m[3][1] = (v[3][0]*o[0][1]) + (v[3][1]*o[1][1]) + (v[3][2]*o[2][1]) + (v[3][3]*o[3][1]);
+
472  m[3][2] = (v[3][0]*o[0][2]) + (v[3][1]*o[1][2]) + (v[3][2]*o[2][2]) + (v[3][3]*o[3][2]);
+
473  m[3][3] = (v[3][0]*o[0][3]) + (v[3][1]*o[1][3]) + (v[3][2]*o[2][3]) + (v[3][3]*o[3][3]);
+
474 
+
475  return m;
+
476 }
+
477 
+
478 Matrix4x4 Matrix4x4::GetCofactors(std::size_t p, std::size_t q, std::size_t n) const
+
479 {
+
480  if (n > 4)
+
481  throw std::runtime_error("Dimension out of range! 0 <= n <= 4");
+
482 
+
483  Matrix4x4 cofs;
+
484 
+
485  std::size_t i = 0;
+
486  std::size_t j = 0;
+
487 
+
488  for (std::size_t y = 0; y < n; y++)
+
489  for (std::size_t x = 0; x < n; x++)
+
490  {
+
491  if ((y != p) && (x != q))
+
492  {
+
493  cofs[i][j] = v[y][x];
+
494  j++;
+
495  }
+
496 
+
497  if (j == n - 1)
+
498  {
+
499  j = 0;
+
500  i++;
+
501  }
+
502  }
+
503 
+
504  return cofs;
+
505 }
+
506 
+
507 /*
+
508 * BEGIN_REF
+
509 * https://www.geeksforgeeks.org/adjoint-inverse-matrix/
+
510 */
+
511 double Matrix4x4::Determinant(std::size_t n) const
+
512 {
+
513  if (n > 4)
+
514  throw std::runtime_error("Dimension out of range! 0 <= n <= 4");
+
515 
+
516  double d = 0;
+
517  double sign = 1;
+
518 
+
519  if (n == 1)
+
520  return v[0][0];
+
521 
+
522  for (std::size_t x = 0; x < n; x++)
+
523  {
+
524  Matrix4x4 cofs = GetCofactors(0, x, n);
+
525 
+
526  d += sign * v[0][x] * cofs.Determinant(n - 1);
+
527  sign = -sign;
+
528  }
+
529 
+
530  return d;
+
531 }
+
532 
+
533 Matrix4x4 Matrix4x4::Adjoint(std::size_t n) const
+
534 {
+
535  if (n > 4)
+
536  throw std::runtime_error("Dimension out of range! 0 <= n <= 4");
+
537 
+
538  Matrix4x4 adj;
+
539  double sign = 1;
+
540 
+
541  for (std::size_t i = 0; i < n; i++)
+
542  for (std::size_t j = 0; j < n; j++)
+
543  {
+
544  Matrix4x4 cofs = GetCofactors(i, j, n);
+
545 
+
546  // sign of adj[j][i] positive if sum of row
+
547  // and column indexes is even.
+
548  sign = ((i + j) % 2 == 0) ? 1 : -1;
+
549 
+
550  // Interchanging rows and columns to get the
+
551  // transpose of the cofactor matrix
+
552  adj[j][i] = sign * (cofs.Determinant(n - 1));
+
553  }
+
554 
+
555  return adj;
+
556 }
+
557 
+ +
559 {
+
560  Matrix4x4 inv;
+
561 
+
562  double det = Determinant(3);
+
563  if (det == 0.0)
+
564  throw std::runtime_error("Matrix3x3 not inversible!");
+
565 
+
566  Matrix4x4 adj = Adjoint(3);
+
567 
+
568  for (std::size_t i = 0; i < 3; i++)
+
569  for (std::size_t j = 0; j < 3; j++)
+
570  inv[i][j] = adj[i][j] / det;
+
571 
+ +
573 
+
574  return inv;
+
575 }
+
576 
+ +
578 {
+
579  Matrix4x4 inv;
+
580 
+
581  double det = Determinant(4);
+
582  if (det == 0.0)
+
583  throw std::runtime_error("Matrix4x4 not inversible!");
+
584 
+
585  Matrix4x4 adj = Adjoint(4);
+
586 
+
587  for (std::size_t i = 0; i < 4; i++)
+
588  for (std::size_t j = 0; j < 4; j++)
+
589  inv[i][j] = adj[i][j] / det;
+
590 
+
591  return inv;
+
592 }
+
593 
+
594 /*
+
595 * END REF
+
596 */
+
597 
+ +
599 {
+
600  return (Determinant(3) != 0);
+
601 }
+
602 
+ +
604 {
+
605  return (Determinant(4) != 0);
+
606 }
+
607 
+
608 bool Matrix4x4::Similar(const Matrix4x4& other, double epsilon) const
+
609 {
+
610  for (std::size_t i = 0; i < 4; i++)
+
611  for (std::size_t j = 0; j < 4; j++)
+
612  if (!Math::Similar(v[i][j], other[i][j], epsilon))
+
613  return false;
+
614 
+
615  return true;
+
616 }
+
617 
+
618 namespace Eule
+
619 {
+
620  std::ostream& operator<<(std::ostream& os, const Matrix4x4& m)
+
621  {
+
622  os << std::endl;
+
623 
+
624  for (std::size_t y = 0; y < 4; y++)
+
625  {
+
626  for (std::size_t x = 0; x < 4; x++)
+
627  os << " | " << m[y][x];
+
628 
+
629  os << " |" << std::endl;
+
630  }
+
631 
+
632  return os;
+
633  }
+
634 
+
635  std::wostream& operator<<(std::wostream& os, const Matrix4x4& m)
+
636  {
+
637  os << std::endl;
+
638 
+
639  for (std::size_t y = 0; y < 4; y++)
+
640  {
+
641  for (std::size_t x = 0; x < 4; x++)
+
642  os << L" | " << m[y][x];
+
643 
+
644  os << L" |" << std::endl;
+
645  }
+
646 
+
647  return os;
+
648  }
+
649 }
+
+
double & j
Definition: Matrix4x4.h:137
+
Matrix4x4 Inverse4x4() const
Will return the full 4x4-inverse of this matrix.
Definition: Matrix4x4.cpp:577
+
Matrix4x4 Adjoint(std::size_t n) const
Will return the adjoint of this matrix, by dimension n.
Definition: Matrix4x4.cpp:533
+
bool operator==(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:397
+
Matrix4x4 operator+(const Matrix4x4 &other) const
Cellwise addition.
Definition: Matrix4x4.cpp:221
+
double & i
Definition: Matrix4x4.h:136
+
void operator-=(const Matrix4x4 &other)
Cellwise subtraction.
Definition: Matrix4x4.cpp:338
+
Matrix4x4 Transpose4x4() const
Will return the 4x4 transpose of this matrix.
Definition: Matrix4x4.cpp:440
+
bool operator!=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:402
+ +
std::array< double, 4 > & operator[](std::size_t y)
Definition: Matrix4x4.cpp:375
+
Matrix4x4 DropTranslationComponents() const
Will return this Matrix4x4 with d,h,l being set to 0.
Definition: Matrix4x4.cpp:420
+
void operator*=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:147
+
Matrix4x4 Inverse3x3() const
Will return the 3x3-inverse of this matrix.
Definition: Matrix4x4.cpp:558
+
Matrix4x4 operator/(const Matrix4x4 &other) const
Definition: Matrix4x4.cpp:153
+
std::array< std::array< double, 4 >, 4 > v
Array holding the matrices values.
Definition: Matrix4x4.h:44
+
Matrix4x4 operator*(const Matrix4x4 &other) const
Definition: Matrix4x4.cpp:34
+ +
Vector3< double > Vector3d
Definition: Matrix4x4.h:9
+ +
void operator=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:385
+ +
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
bool IsInversible4x4() const
Will check if the entire matrix is inversible.
Definition: Matrix4x4.cpp:603
+
bool Similar(const Matrix4x4 &other, double epsilon=0.00001) const
Will compare if two matrices are similar to a certain epsilon value.
Definition: Matrix4x4.cpp:608
+
void operator/=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:158
+ +
double & p
Definition: Matrix4x4.h:143
+
bool IsInversible3x3() const
Will check if the 3x3-component is inversible.
Definition: Matrix4x4.cpp:598
+
Matrix4x4 Transpose3x3() const
Will return the 3x3 transpose of this matrix.
Definition: Matrix4x4.cpp:429
+
std::ostream & operator<<(std::ostream &os, const Matrix4x4 &m)
Definition: Matrix4x4.cpp:620
+
double & l
Definition: Matrix4x4.h:139
+
Matrix4x4 operator-(const Matrix4x4 &other) const
Cellwise subtraction.
Definition: Matrix4x4.cpp:298
+
double Determinant(std::size_t n) const
Will return the determinant, by dimension n.
Definition: Matrix4x4.cpp:511
+ +
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
void operator+=(const Matrix4x4 &other)
Cellwise addition.
Definition: Matrix4x4.cpp:261
+ +
void SetTranslationComponent(const Vector3d &trans)
Will set d,h,l from a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:412
+
Matrix4x4 Multiply4x4(const Matrix4x4 &o) const
Will return the Matrix4x4 of an actual 4x4 multiplication. operator* only does a 3x3.
Definition: Matrix4x4.cpp:451
+
double & o
Definition: Matrix4x4.h:142
+
double & m
Definition: Matrix4x4.h:140
+
Matrix4x4 GetCofactors(std::size_t p, std::size_t q, std::size_t n) const
Will return the cofactors of this matrix, by dimension n.
Definition: Matrix4x4.cpp:478
+
const Vector3d GetTranslationComponent() const
Will return d,h,l as a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:407
+
double & n
Definition: Matrix4x4.h:141
+
double & h
Definition: Matrix4x4.h:135
+
Definition: Collider.h:4
+
double & d
Definition: Matrix4x4.h:131
+ + + + + diff --git a/Doxygen/build/Matrix4x4_8h.html b/Doxygen/build/Matrix4x4_8h.html new file mode 100644 index 0000000..84c8845 --- /dev/null +++ b/Doxygen/build/Matrix4x4_8h.html @@ -0,0 +1,148 @@ + + + + + + + +Leonetienne/Eule: Eule/Matrix4x4.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Matrix4x4.h File Reference
+
+
+
#include <cstring>
+#include <array>
+#include <ostream>
+
+Include dependency graph for Matrix4x4.h:
+
+
+ + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  Eule::Vector3< T >
 Representation of a 3d vector. More...
 
class  Eule::Matrix4x4
 A matrix 4x4 class representing a 3d transformation. More...
 
+ + + +

+Namespaces

 Eule
 
+ + + +

+Typedefs

typedef Vector3< double > Eule::Vector3d
 
+
+ + + + diff --git a/Doxygen/build/Matrix4x4_8h__dep__incl.map b/Doxygen/build/Matrix4x4_8h__dep__incl.map new file mode 100644 index 0000000..702c3aa --- /dev/null +++ b/Doxygen/build/Matrix4x4_8h__dep__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Doxygen/build/Matrix4x4_8h__dep__incl.md5 b/Doxygen/build/Matrix4x4_8h__dep__incl.md5 new file mode 100644 index 0000000..3a01bcf --- /dev/null +++ b/Doxygen/build/Matrix4x4_8h__dep__incl.md5 @@ -0,0 +1 @@ +5154dfffad2d15709c7dfb374c8ae661 \ No newline at end of file diff --git a/Doxygen/build/Matrix4x4_8h__dep__incl.png b/Doxygen/build/Matrix4x4_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d23845d0b7f5f36f2614ea62836f701832fbb1 GIT binary patch literal 41026 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 Bv>N~b literal 0 HcmV?d00001 diff --git a/Doxygen/build/Matrix4x4_8h__incl.map b/Doxygen/build/Matrix4x4_8h__incl.map new file mode 100644 index 0000000..fdee30a --- /dev/null +++ b/Doxygen/build/Matrix4x4_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/Doxygen/build/Matrix4x4_8h__incl.md5 b/Doxygen/build/Matrix4x4_8h__incl.md5 new file mode 100644 index 0000000..0c4deeb --- /dev/null +++ b/Doxygen/build/Matrix4x4_8h__incl.md5 @@ -0,0 +1 @@ +ab989368f6dcbdc7dd60a9f3b05fea6e \ No newline at end of file diff --git a/Doxygen/build/Matrix4x4_8h__incl.png b/Doxygen/build/Matrix4x4_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..3627873f30f3bff881f0fe11c0b508dd07eaa23c GIT binary patch literal 5888 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 + + + + + + +Leonetienne/Eule: Eule/Matrix4x4.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Matrix4x4.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include <cstring>
+
3 #include <array>
+
4 #include <ostream>
+
5 
+
6 namespace Eule
+
7 {
+
8  template <class T>
+
9  class Vector3;
+
10  typedef Vector3<double> Vector3d;
+
11 
+
36  class Matrix4x4
+
37  {
+
38  public:
+
39  Matrix4x4();
+
40  Matrix4x4(const Matrix4x4& other);
+
41  Matrix4x4(Matrix4x4&& other) noexcept;
+
42 
+
44  std::array<std::array<double, 4>, 4> v;
+
45 
+
46  Matrix4x4 operator*(const Matrix4x4& other) const;
+
47  void operator*=(const Matrix4x4& other);
+
48 
+
49  Matrix4x4 operator/(const Matrix4x4& other) const;
+
50  void operator/=(const Matrix4x4& other);
+
51 
+
53  Matrix4x4 operator*(const double scalar) const;
+
55  void operator*=(const double scalar);
+
56 
+
58  Matrix4x4 operator/(const double denominator) const;
+
60  void operator/=(const double denominator);
+
61 
+
63  Matrix4x4 operator+(const Matrix4x4& other) const;
+
65  void operator+=(const Matrix4x4& other);
+
66 
+
68  Matrix4x4 operator-(const Matrix4x4& other) const;
+
70  void operator-=(const Matrix4x4& other);
+
71 
+
72 
+
73  std::array<double, 4>& operator[](std::size_t y);
+
74  const std::array<double, 4>& operator[](std::size_t y) const;
+
75 
+
76  void operator=(const Matrix4x4& other);
+
77  void operator=(Matrix4x4&& other) noexcept;
+
78 
+
79  bool operator==(const Matrix4x4& other);
+
80  bool operator!=(const Matrix4x4& other);
+
81 
+
83  const Vector3d GetTranslationComponent() const;
+
85  void SetTranslationComponent(const Vector3d& trans);
+
86 
+ +
89 
+
91  Matrix4x4 Transpose3x3() const;
+
92 
+
94  Matrix4x4 Transpose4x4() const;
+
95 
+
97  Matrix4x4 Multiply4x4(const Matrix4x4& o) const;
+
98 
+
100  Matrix4x4 GetCofactors(std::size_t p, std::size_t q, std::size_t n) const;
+
101 
+
103  double Determinant(std::size_t n) const;
+
104 
+
106  Matrix4x4 Adjoint(std::size_t n) const;
+
107 
+
110  Matrix4x4 Inverse3x3() const;
+
111 
+
113  Matrix4x4 Inverse4x4() const;
+
114 
+
116  bool IsInversible3x3() const;
+
117 
+
119  bool IsInversible4x4() const;
+
120 
+
122  bool Similar(const Matrix4x4& other, double epsilon = 0.00001) const;
+
123 
+
124  friend std::ostream& operator<<(std::ostream& os, const Matrix4x4& m);
+
125  friend std::wostream& operator<<(std::wostream& os, const Matrix4x4& m);
+
126 
+
127  // Shorthands
+
128  double& a = v[0][0];
+
129  double& b = v[0][1];
+
130  double& c = v[0][2];
+
131  double& d = v[0][3];
+
132  double& e = v[1][0];
+
133  double& f = v[1][1];
+
134  double& g = v[1][2];
+
135  double& h = v[1][3];
+
136  double& i = v[2][0];
+
137  double& j = v[2][1];
+
138  double& k = v[2][2];
+
139  double& l = v[2][3];
+
140  double& m = v[3][0];
+
141  double& n = v[3][1];
+
142  double& o = v[3][2];
+
143  double& p = v[3][3];
+
144  };
+
145 }
+
+
double & j
Definition: Matrix4x4.h:137
+
Matrix4x4 Inverse4x4() const
Will return the full 4x4-inverse of this matrix.
Definition: Matrix4x4.cpp:577
+
Matrix4x4 Adjoint(std::size_t n) const
Will return the adjoint of this matrix, by dimension n.
Definition: Matrix4x4.cpp:533
+
bool operator==(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:397
+
Matrix4x4 operator+(const Matrix4x4 &other) const
Cellwise addition.
Definition: Matrix4x4.cpp:221
+
double & i
Definition: Matrix4x4.h:136
+
void operator-=(const Matrix4x4 &other)
Cellwise subtraction.
Definition: Matrix4x4.cpp:338
+
Matrix4x4 Transpose4x4() const
Will return the 4x4 transpose of this matrix.
Definition: Matrix4x4.cpp:440
+
bool operator!=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:402
+
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
std::array< double, 4 > & operator[](std::size_t y)
Definition: Matrix4x4.cpp:375
+
Matrix4x4 DropTranslationComponents() const
Will return this Matrix4x4 with d,h,l being set to 0.
Definition: Matrix4x4.cpp:420
+
double & e
Definition: Matrix4x4.h:132
+
double & f
Definition: Matrix4x4.h:133
+
void operator*=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:147
+
Matrix4x4 Inverse3x3() const
Will return the 3x3-inverse of this matrix.
Definition: Matrix4x4.cpp:558
+
double & k
Definition: Matrix4x4.h:138
+
Matrix4x4 operator/(const Matrix4x4 &other) const
Definition: Matrix4x4.cpp:153
+
std::array< std::array< double, 4 >, 4 > v
Array holding the matrices values.
Definition: Matrix4x4.h:44
+
Matrix4x4 operator*(const Matrix4x4 &other) const
Definition: Matrix4x4.cpp:34
+
Vector3< double > Vector3d
Definition: Matrix4x4.h:9
+
void operator=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:385
+
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
bool IsInversible4x4() const
Will check if the entire matrix is inversible.
Definition: Matrix4x4.cpp:603
+
double & b
Definition: Matrix4x4.h:129
+
bool Similar(const Matrix4x4 &other, double epsilon=0.00001) const
Will compare if two matrices are similar to a certain epsilon value.
Definition: Matrix4x4.cpp:608
+
double & g
Definition: Matrix4x4.h:134
+
void operator/=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:158
+
friend std::ostream & operator<<(std::ostream &os, const Matrix4x4 &m)
Definition: Matrix4x4.cpp:620
+
double & p
Definition: Matrix4x4.h:143
+
bool IsInversible3x3() const
Will check if the 3x3-component is inversible.
Definition: Matrix4x4.cpp:598
+
Matrix4x4 Transpose3x3() const
Will return the 3x3 transpose of this matrix.
Definition: Matrix4x4.cpp:429
+
double & l
Definition: Matrix4x4.h:139
+
Matrix4x4 operator-(const Matrix4x4 &other) const
Cellwise subtraction.
Definition: Matrix4x4.cpp:298
+
double Determinant(std::size_t n) const
Will return the determinant, by dimension n.
Definition: Matrix4x4.cpp:511
+
void operator+=(const Matrix4x4 &other)
Cellwise addition.
Definition: Matrix4x4.cpp:261
+ +
void SetTranslationComponent(const Vector3d &trans)
Will set d,h,l from a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:412
+
double & c
Definition: Matrix4x4.h:130
+
Matrix4x4 Multiply4x4(const Matrix4x4 &o) const
Will return the Matrix4x4 of an actual 4x4 multiplication. operator* only does a 3x3.
Definition: Matrix4x4.cpp:451
+
double & o
Definition: Matrix4x4.h:142
+
double & a
Definition: Matrix4x4.h:128
+
double & m
Definition: Matrix4x4.h:140
+
Matrix4x4 GetCofactors(std::size_t p, std::size_t q, std::size_t n) const
Will return the cofactors of this matrix, by dimension n.
Definition: Matrix4x4.cpp:478
+
const Vector3d GetTranslationComponent() const
Will return d,h,l as a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:407
+
double & n
Definition: Matrix4x4.h:141
+
double & h
Definition: Matrix4x4.h:135
+
Definition: Collider.h:4
+
double & d
Definition: Matrix4x4.h:131
+ + + + diff --git a/Doxygen/build/Quaternion_8cpp.html b/Doxygen/build/Quaternion_8cpp.html new file mode 100644 index 0000000..4a63d2a --- /dev/null +++ b/Doxygen/build/Quaternion_8cpp.html @@ -0,0 +1,129 @@ + + + + + + + +Leonetienne/Eule: Eule/Quaternion.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Quaternion.cpp File Reference
+
+
+
#include "Quaternion.h"
+#include "Constants.h"
+#include <immintrin.h>
+
+Include dependency graph for Quaternion.cpp:
+
+
+ + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

 Eule
 
+ + + + + +

+Functions

std::ostream & Eule::operator<< (std::ostream &os, const Quaternion &q)
 
std::wostream & Eule::operator<< (std::wostream &os, const Quaternion &q)
 
+
+ + + + diff --git a/Doxygen/build/Quaternion_8cpp__incl.map b/Doxygen/build/Quaternion_8cpp__incl.map new file mode 100644 index 0000000..e2e3f3a --- /dev/null +++ b/Doxygen/build/Quaternion_8cpp__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Doxygen/build/Quaternion_8cpp__incl.md5 b/Doxygen/build/Quaternion_8cpp__incl.md5 new file mode 100644 index 0000000..292eb8c --- /dev/null +++ b/Doxygen/build/Quaternion_8cpp__incl.md5 @@ -0,0 +1 @@ +57d3a0062141f1640bb90bcf0db84cb2 \ No newline at end of file diff --git a/Doxygen/build/Quaternion_8cpp__incl.png b/Doxygen/build/Quaternion_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..2d003b886a361f7445db6ffc4d2efe64f212a259 GIT binary patch literal 38683 zcmZ^L1yog0yX`>`kZzC;r9ry8l@JL@=@gJqkOt`vQA!jL1xZ09lu$wt0R;r4yQI70 zecS)t`|ca#J!9xNhqL!yYkfKA{7$sCmMT6DH4X}e!oR7eq=Q0T5<;QSw6QVam3NqP zeee&amAa}D>H_(l(@>CtLNTIlD#`14XRVI=m}(wfU~T?ss8Nm;F;?SH^a|HbB?~8u zei{&eZ8R#b$ywmLMD<518=lO@s9d5Cq#c2ict;_sH7_Ir zUS}e?9kYglAHDVJ)hqAKDYQ|3HS~g_4L?1InG2B(Ou8i|Au&^s9mu&>dQ(&L z+faqI`*J@AJ11wViL9(F!}3{?6Crx+i1voybj$w#1}{U~q7-r?0O_sC|3B(|u<_6JB<>f8XkGb2?qfkwlD^ z;QVlwP%7x0cID6e_T#;k-U@5g)sd>=zLK9mfAaD3H|41&Zk`@JXdNsyAtockxOeYfiE$N7wYHIA$!*ppsk@KTP20S_mGN-|krUTYj7i%?>NhvAlK|w)> zhlh;9!sPGF>!b4wH@2>yuy1KcCKZq=0Q;CeTS@;^N|R zn^favWMt@@XuP zq+1K!G$=VQFA*ziYfEQm(__VvdY>H+7xz!5?+Od`Puf#E=U?Be^P-aW6)L+|cel6% zW#Q_Y`17S?Xy@4mTT4?D8lA+W;F1#V)z#IcjEv|+2HDh6Rd70bDeqwASc+VuO1qw( zp0B4zJMJrkr2;DkRSnOcks;>QnaZOGFXg^_hizhF0(+fWCg?GzMs@Y7yqOvOY3)s zBM%S$^769nASF(?+U?t_m3G}lA2-y~c&9g~Th!FlbRDc zmP_D-8GF2@wWu7MuA8>v0s;c%zI*pi&rdd%ATogo6VcL|`u?~gmqDLeWOo@w5VYA?$)haj+W2T)3H(WIJHIKg(2GPttST?>bQCD19%eeh`N z@0E!25bE*cgT5~K%;xsCf~hGjgd<{V>KGc)2hYlaw&!k2d2gb8e0;F+@RY!mj}JD? z5u>;R!8|O-22az?%`KxnmB%E)vL&MF+qcVLR-vJx=x|(DBqi%`u$Fnv8)?zd&^9+W z%kHu z&vdPAaY@ORj*csL@7@(QHY10?v$?ZV+?(UhERylhB9?pNX+(dRChzcYa&p3!d`)Ii z{b8D*fqf(+F|UNpH{yZ=Zbs z*%s3EiGR2jlIx#s zZo2W|{mwam`c!~F=v@9?@$ImTjH|EnHeyQFy1Hl`95mYBswXN9E`0Wsl~?b?koGHU z?MOK=3OZ}uGU&y>bw%=DiuC1_{ems|*ep0>*x2;TIf+S4f~s3Njf9tTlh;R_Pqpc@ z3*FDDL`t|!@1gVAbrDDfa2C;DS7?k!>V!gjs)(jS-CjOX^F$t#=BXL01gAfDzxGy8 zg7=JW6)EZKqZJ#B&UR%m+%e@2dp@ATZRm#m_wOfXRTg|QBvk7pDygX7Fh_gU(B&?J1C~$ih+P$|^xWL3yY%=VH!5oLYZS4Hvnpwwh)ciw=9Kg5s3<8v z{}n1RH#!j)iP+c7y`~~s)NCD69O__2s}l`kr^im%^ipbHYuy8;ruk{RUvPb(EBQzgSxJdRC0)E4<8m$(Hxk?D0Ucr)#4P6__4V98Uz%LH z@xCJdL;8`1aVD0%y`Yi`Z)8OUeZJ->Ivbm-RM4v~FCk{jfA-AZ*?A(RWrx2$nb^KQ zu1iF~OwZAKv>YS{~CTr4c>=#0?F@=#wm zFeSV)vw$Z|iXv7WPv!9FMlKt?KgScTY0~S`LrXL9$T%1%mTegv#Ezw82#@c+J61>8 z?j@v?_%G2g?=EO^nwsuguMXXF7}OxPw7foR)89`vl)&n)r#DyOTP1yd_L$$s<_(|6 zoVj876j5KF$54XGG81ytN*FQ$KUy+{bIZ#&n=9>ain&=(TtdIs+t@%c+I!6`jduk5 zN(Pqe21l*?EIB5gA#TtG*VK+Ao-aap%$bGe#|3REC(;(|D zb$sxe-Cc|}j>-~4y;EzbYK2)!`Zg2e6!rOG3;n_Z-B5z+GTLz~v4R@DvWiT5PcBV` zl``Mzs_#@={Bt)ikvuDvxVgDob~KHT9Ix)~4e(or5aw&`sVXQ)jP_!8F6pXbGY#x6 z>*K(Sktr#n##K5k^PRGmd-wg=IfN}Gjq`E~{?MKrNV4$tkh{AxSUzZ^etVccjV(yQZBuG>asyAgVZm9|=_4i{pPct03AgzJbo0s1r9ZCt z33PQWUfj)>{`nWlw{MqdrM%J4PA;Nn+czw_Gx^0HE~utwo`3Zc3b}x%_OKN{-gk*r zj!m$DbMfBij$U(kL-6mu!@(w= zoxIE~9*u)%qi)P{@!nl}bvT>M4)wwu=1;@!WGQ(ifma2c0?Nm%&BnuAg+;#fky)6IJBVnRy&`;R^YMzrGt*T{#9V--Oc!p>udH<0a| z?{t}(vcMyVY`b$4=igI15Yk_>fasqt6F}&DFxbAg!Zp1v6Blz;r)_aK!gb8>3Js0o z>ESG~nAmFT?}7~o+(l9U66v$7(<}7!^5qr7mpC|hf4+R!{@-!`4ZW_u{@3M!eZ*49 zC~+-qtB7$aXcc^YdEpeV|2rslB<_FOxde_L8x>_g^ubmNiF%7aM_^?nZ%jn#vc&iq zOseDB=Q}HwCNFLyRw2g-`+Y>P{P2315H?;5qtGte-S;xladA>z8P-~}Hfp7AV%ID2 zM~A4IM^BiMw{mhuH+N~{CmI}^za2*)0gzAfb6C#{qi&B=bZl7_}5OajwL%@;pkzl-|iC3Gpcg%58$@EH;Fo$c+IskM6ozl*D@ zIa7IP5{Oyih7zt5r{0h?vkNYkV^n(dNNS|&ci7XXrWu~1&QvDr{5r2|4TH~4-dmm> z3u+s<#!Ln=Tn1xwZol6pP$-*9#LOS2fZ5daxWcZRgNy>F+@^yM8a^TcfnEK(`gko< z{e?>&iC==UjTSB>J@4QArg2%ue8I)ZDN6PN@7qU5zn(8alHR@vDs^6&&h1XmmY$I^ zh3V@z(C&{^r6FNqY&_BGdlGN0uc!Ff7^W`2u4bOf-n&P1931qtbbbT!)ExzH-^RI& zvd$d3i@td~|FzEp9SJ2~Uh;288v|b&V_l&kL;_if&ym38P%J-vZ^D-~uD_A(O-PW; z&Cd@mFTcLIO&x33O}4`4*wR~Yo5tZjr+#gM9Antadj}G?`uQN(1#fO%AFA!W!o+lk zPtYXRx_y1hFHeGA#vhBTI3D`);@LO<?{u_f5W?^_ZBe|6x-2WRUEg2R;uTFhS5?52#A!N-j}}ZWEl_9k*~LM|@}4yPIq%U^S402t5vu z-#vSX1eRMfd0^);eg{7&cwkctvJ()e)y+R-W@38zwiO>2abyXDZRPdE{(fiF*WpS+ z;;Tora!?(>ljgWi3J+DXk#HF#eEk;NY2i2=-TfW^$Gbby+IrUx7X%0*(Xp^3#`S18 zIk%A@dvRVzB_N&I)#LyBXXAFgk8U6y z7W|k-7lXFGz6Fzh%Z^WTyX?7GbXJx^SGFuwotH8r3kz0uP{7+a-h9GmXpsb;KemH9|CcVlx1YI!B@@FX`C)nic$2MQ0!}yjZ5YXolw0y}`Qe5WlJoOA ze|~h70@LP}HNojw0azcFO5*yJCpoL`7F3u71Z~{c?+?w*+agC86Z3;oP_9F6l|}V| z)y9MxMV~Mpl2DeFAUt~ezQWjS(6Yo77Y~O5!RlVy{g1o5nR&Vesn8z1O}weTO*>Tt)zevzg+QGd9w+75wpg;Bpn0V-Cdl8O48-)i0K znig@tNV2u39r`mty)qy#U}gWOVRx4y`$p?hue6a?KOZ^y)>h|@3$EWZ`_c+bp)*!! ztQwp0w{CgSy>Svlf@qW`MAWRT`s8eLj9hKQ2jYqC;U9N{%oRB~J&-e#khssz{f6c| z`bB;|iSJ$?7D~v4GxiDkXl2$rOHTHwmhk}gte4$A#c48gb8pa|;f19=f6iMY1CP+2 z_$giB8|CH8-#qCIta|me!iXx^+1VqY1efwAB19!Uol#)4_{xXpEyW8v*#Z^8ONlBa z=q7s$Q$#XF3xPWa7^9ga8AsM*pIxj{sl61=qJ-P&5O z2o4I}3iu#9HyO&p!pR965~u$1xZ~W?2N#7RE*2Ja==Gi3-z|!1>sQIAu(~wyU1sOJ zg`RzZ_U)VF)Xr~h(^F!(BYGNl?YnnX?Ck93xdwyZzrSH>YTDZ8b#L0kHaC}_=I>u7 zc23`RuPkGCFRzH~>}?h-qnQ%ZMAbdBRTw+%uk+$hbO+mx*hH_ zW9MXYZOcG3y4Zd}T{BbYNkl}%(811ie0=;zD}&Wq2S(XjN0SUDs-YoQnBF9(>{>+- z1ta|<)GergWfzmu3{o)`K8}lvbK9JfueMH-P-w4nCpvJ?hxDi80(k7^!GXObCet3Z zNj9nbT1{indSMRJn*`H3FMP#Fg7BwLNdP?RskFbn3J~F&6Fw1CIF1K3J!t;5Cg3$EBS4V;*EHNnfaF|LavawBLYEL;~sy zTZ0eCZd<|aY`0~y@s^mR%-66CerqaB0B7C2yxLs9oM8gsD&#bXr<kf&hdH3&c z$RZY2R+muUJ35-0!*P2*dpf;)_wMW9AcecT``Z&f0fA-!UMwCwNXXZGF#{+Y@=B3@ zF`q*ZBRdC2E+BN+xVT*73oB)dfB|Zx^Py2wQ}^`uxAqt6Cck=RX2(EYb-+_mQ88d_ zPQr(WZeU>0mClb22vyjVCuno?^Sy7?DNm0Uv)}Fv_wVnGRlCpt%#;iK1R6T#)I@_H zs_}xpa4A54_`LDY!hwMQZAGaG^B^ra>~ildD?BPbR7_0FQhy=ogYnPdnlD6h^^5O< zFSV@>S9Xpal(3HaJAE0D4xBtTd#6=5$uc5zuK`n zURTrgd4GRDuBu9S=XlR)0noX)x;n|<4StVR7>W4sTKK@G;{e}$xHcjj@oO?-VJ0`QXo$GaTeU3_?gZc}o006S_}Suv9`F#H0Lm9Hg|@Wwqe zBR})v_2bFe+1VBVbqt(n+^a8+8r){v;&J{IcduNfq3HyGPSD`JnJu7k8L-iO>Z#lu z<8)XOU z+je#A6Df~Lbyz|I0gyWpg7!ZdIXDVO)&?F0+|=&%o30#beAU<2 zmz13R1bjbJ$ng>>DJg)Fxwnouea-b3z5A~zf}Kr%uxPpjoD?aTSh|2M4$w&Dww)9J z@#iAozLdAyr-_nG=bfs|`bNaSTd}dD2@Qy}V*j9Yz;|<1 z6X~_}^e`e@5O3RBA3tzqKSa2M>#{kt1X%C~_Qc4@=xxC#l$?P<%~-X$))p@t8y0Gk z_G4yJ5(=>7rN4il%M8M@`fLYW-si8Vhr~?aW)JM|_5b{Z#%yS z$$X*Y%#2ked%p-j=C;3TG}ahE6N-r+0$~vn5$ah`qTYOfe#ZOJ5^nTD^G46p;E{kE zU!wv{`z=qSC>ZXw{Moi zA8g;QLEKhkCsQyox(aEu)@O&c+Id*V&YZ{iqnw6@#^1!`vNB$k1lnlF-}%!=JB#0e zDg#&=VR4$96_TaCh`5Y=g|r4SS?$&>1>hI~@kcp1t#BSlAwY6ppUyR(WkHC%uCA^S zi?C$Rc1aOF3N~IU@RW+{ZV3S9+NI{d0E|67-T4Kz?)8}1SSBLuTa%JddSxZ{t$JE&Sq)^R zH*ep{o0!m4S62fC_2{pFw6wIhkB{Z);TE`6^9-7_hveii0)={s9b)>AlOh508Y3f2 zoiF|?eu^aSR12|AJHQG3`2IaOGn2Zxx!J=J|9ih9W)Y0M(yPT?m0LKs4;1s=*%$F@QZ#n;i=yc~c8LO61)B7(YkR2W! z*cK50L<@2H+mGiLQ?u=~C5D!rw+IxlbD^lY;&FaT%6*R-17Mg0`j??-=y*d3VSj(0 zVtDnc07^Z41US8MLzSJYvy!g(S!gK# zo3}m)b{i9WWLWc)*p!!CI4tQi@~J&jrB*?1BNFTy(&+S*Cq zN{sxHQ*@)goM)mO9qC6a0Gh(+R#a4ze*W?viZGE;BXbVd+FDvkiMzPwTbF%m>Pxq! zB;23bL3s9y4eZ==m2}ZWeQMhB@QFwBx404L5c=rpMNxbi8Qt8XqOV>hoPS4actS!J zW`4dD1#lAU9}dPGCUglo?8Lc6O3Us{ZH@G)P zZ+fYgltFf(9C^ZEq)zU{!HKD`(_~*=tI5-Ru~6&pbCs61Rdm+z-u=8ZAO+gJExfeHNz);{|XvN&{R|dsrzCIc5>DRN9OjY~4^o|K`149#g4>8|I1QMQoZRz}y#N>Oa zYidBUh5W0{e;3>=uNsd5z^kdHg}SL}C#T>~)|z1nn5(>8upkt3xIlj>smRz%k}$nN zL(nw-nVoP1{ENUJ#V|5*G_5Tsd+;EX<}4rqxC1x=d=Zg|bg5xN`(H9P@FAt<-i9n} z;*_Bw8*bxAR23B+o15hk#Va`~=HLBq-inFse$g%uoC{^z8Iao~Dsg;Pk`zoz3UE?U zQCGt8&d()Dz}S1Liba~6Q*&HQ@T;u{)TQVtX++|bp(NvbypA@vKw&jjE92bG9Hxfs zJ8^DpZQ|ipJ4;lIZ|r4U?h1!qqD}8db~VgUUwk>gAGy#?KD|yKwYqu<0Jo$y!!V*N zh>tKsPfS4fIeIeigu%GxL4u%tAaune&h1axVTlN@JL<}o^z>;wIhQkXV95x+prgLE z#W1}dNLKTpAtE;RvXoQ_6Hm9bWU3O#euy$fTtenM6VXwKBXWWuDT(@cjBDp)gDod7 zFXDGWkkX&BQUDUSpwY%v{>ExpyGit+a%XEXn?NW%lSqdHmQ(oT@rD4@`gg|ak4SiV zDGWb9qO!4Bn!U!kzb~Ehjy-m`@_>o0fXJjqEBF~%yfSl`KSO{bM9=~)<(41!S#)$h zxNXlVK-^LP7Dr`h$o|LcG-ibaKLW-=%! z4BT(Dg8F0N*~rXP(=gCG*X_CvX#iVrR%H(B*F`qqGIF10D`_xex6@jh`ua8nEv<+( z!*~URlUyA#MOeya42FMPSTvCiA)Kw+WuTY%9xhC#3$md^M8@5wL$CnRwUE4<_q+53 zfr7%qZ1)QxF^Tnmz%!Wn9v+yvfBS#<(n!@r5@IqTN;5NSrW>~#1e_iJXptghXTfbB zNcUJW{)hiOR~kWW%#U_C2m!)w&JstXlBuWRHQSZ@66i9VpbW|ik(RC52U9zj5kBJZ zF!A4_NMTXiP+z|S3LiH)`Bz2I7eQoE^75%`hI6wvpXkFHMA6q^a)%>1f6G$M1?om4O)sfRgWizn4_N@hk8`qEy%k z>IU_+S52^e&CT?d8xt9uTNyaEwm#L?$+sY^v+%j`LMDIGoA;QRlQRMN5C!s~($&?c zW*O0>0hZ1skwCFhNqoc|txyw&Ds5`2$%v2NG1Psw-hFQw7l}rOun&&Um|3!|fyT;` zJ|PMW{EY<5q9Pn{8eu>SFPl#~mX|LD7wVo76K}=+yAL9=8zPWbyVvpSM)N|q<>r1P zHZTe$_f}BCRc!{}5tNWd^i^r!=h14-u+Y$obkc!Wa*VBgZ{>mIjD0D|24rLs5^X-G z+>{o2Bd@03DQ{bKG+y`LLHo030<3q0J@zV!O8T??^TCwlY0IJVGAk_>YVh$FBI1@K zAI}kb+hWQES;;aHxscKfIVCQiOC|#WZS7X~JlLXPB`aB;ii_$Ck#1;ykRWT^&apxX zEZx$W5e+TDV%>_`%`H9~H3NX2e%h`eVcE6C zPFP7v`+e7+)z#06?5F3B65`@l4GkZ?Yf*YVzaT;ddBEa#ekCmP*_v1w5q};%HFE`M z7p51yh-eAE@}aVCApFB%DXuc4=$Tnrt2JXRjVuS9>B8r2w{&%{H2Bptt&O@elHqi6 zr=%`e&Z)6{|E{)g03gK~5EC^3_UmZgCb+cE0e$!Ls_v40~GAg8KkW|kRd zn7K(!>*Hy?pB}1bNiGt==5ptkT+q_Sxu5K>cqCH7nfN{;q#%i&Nat_U)^olDA^rPL z-meSYvrN~OU;Yjg651_fCF$r~!F!!I3xx2Oif3poD5$MGU#a&E4Lw3nGdXvX)7PiZ z&&OYk$Wn~-YI-I8o0$3-wX;B{gwTCp{lpMM)v}5W%qw`QhL`%?CtS+yRp&AtcFBI6{L&rxI){9)GN#i_$xHALf#BA z{>>#uC)&eFRItM1y@IV%ACH%FPi?H*cDZ$FDJXaN@9VXQjqeJRrZ5me)B&kOx>zq3 z;L%99h=Tm9WQC2PfXEvjJg^KmSVUca_ztKuNIS{5{n;O4hst%1!;6z zZZ5(3kv+ZH7p<0|iaO}QJHh;-upxq6Yg_1EbURo#**uzWm)-Op>(jkfRJ08e5?qKt z&A(i!?+xf&L5#!XariSbLeLI~N$lU>GzhP9eIGvCzQ}z2Ixf(@hll);h~pW*_7f+L zcH3KiC?>wf+t7d(i4H2Y&7(`~oIhR%1)-;BRJ8}At!=gtQgatPmsJalw&2dB>1He;Xunr5*&;zL+9@`m+ae3SlDd$KY)wn2N zA7K(ih7J_3F>!H)e~V4bsZCFeCe?)Ohz(?IuA>s@Gx=;9jjfNLUrTQ< z@eQ+jIXyixz@PXYjEO-Bc=e{ZR<_IdXL5K6EP@MqEQBl`D86k4eMI#v?9UUpt_}2U z+6D&gPtdV`NUg7|-~!AAusS|y8VzgRn4rqTCnqN#8W~~c(^?_~eACwt zkB!9zJt05bP)S+Y5->m@oIrw%hC*bBprHnRYH)r&YrfV?W4j4T78aHg!-`7_3ky(z zb0pA9Ls>1-G%-OB06@>cKzL=P;QBsSHM z-OG9S!`oZGG@mB^-u-(vJwK1_x)EzwF~h)z*M0MrT0=8YwC(?fEuCJ-o*#z(1>pSe z1tkTA0Dx{?fEZtmu%zmM6=eYm<%{t}z0uiLKD_@zczpug z4<|3y`9FVN@9KN|Bu-9yZxtx5A2}f^Ap>u6Zfa=Qz=0qDHUc06z-X(dr(}97Bcfwttx$)6UU$-hMm7#0knevDjk4SK|I}U zmc_q+jmkIRG&+HbcgTrfFCui11Yo@lm52qs;iax#vgir0}O#plV1_l%~ zmG?yBA5se4Q0RXYy}e(8f&jfB1m)}Gcv?hT(Bq+VsaGtrvR`hAujCyEW`WxF62NlK zlZ_3=zlw8d*+7>d_UQX%NB|L)J7#1QG3OIjVM)umA^F4}?(Xsy7L0H*iGUUL$>)Qz zA2Y2}+1S|lliyMt75^nb%89Tsy!Vy|L`Ua6IvZa;di3b);tnyx#bkiHS);$v=T$+1 z#nHz<7Tm-fdS71-gzN_n|NOzIVgKUnBan2$87Y9MdRGih4lwWvn+}rRdeoljWTOjG z=09GqZ+df6=6g2}(ox1!lMBW7zyL&Vy$?iLK}=BpF7>^|4SpK*B#~B}1h%1NXYp4u z2)iX8uYUyx3=a=S91uW5yRP&nz$?uFLjicHqJu++KEr!A7J~K13x$^!CBFu)v!P53n)KXXPl<ySsoupE7j)Qhup%P`M{R*Z&H6pBlzisF`@v zVu4$j?tURU&x=L?TH;6oItv#U;6?C((q}-97Ge_$YWvWokt(hT0=gK$Ul}<$aX_k% z`oDloUsgUoB7_neET!??U%leu;(~#J;V(*)*xmxt|LNsr9ARN$pyQaixNu<_;q6uG z*kk{!??Im*^{S|S_rG@SO-rvkTi@@8(BrD*wOUer-q+UoKM{Hm)6itdt< zl51sWZLNR)P}0-W&o3+$5+b0>+#EgtNgxr-efzcxS!IgGKP-_L!9n0Ao8G2z)Kzq@ zllc{N(Mc-dfJR^w6KiT-$GF^$wDlIQU+4fUfL!>d7eO5ql-~I~RK~!nlUFUcN=x^6 z2GqF7n|J>6rpC>i1geQYj`Mek}&_lmBi@4?PFkw<+)B)yLoJ@*vvhI zw9}V!N1o*gLTD$mh$d$i{q!PJP`ivk7%P(aEs>95s{+OR_L(51I+ni~B9P-uOG-*u z`D31Xex21$PD=|@M`s%pMqzpi0Alc%w1MaohnM#RNZo6Yky`<-qo(C_Sk8U(M#Hq> z`1Qx&n`&y2B_(8W@q2uM{tV!r1k%1A+hDo?wNycuMx=9vJ~1|)rv0^}u2I)ZKNR3& zRH9{sfW|H-~ zpCjI>EwbbnCnyEW?gzIDOSm&g2SLpVIy`phcf;%a7@-N`a~hPZwkGbg=+S86Cc?QY z6_^#(nP%+{FyVvAKtves1egD=Hsa*Sz z4ejdHPk_>a7}ziU#pAERXqei%y6@aafu6&@a^+~5pNU@j$JgDu)Zg$TOHS?pyP=DT4PW}LN=HG#Q#>9K7l)@3Ppx0-vi#y+9WPR#biI_s z=DIudfi5yBf-warQ{ri6W;|%=YWEPn<-Xicl;=Wq$NFj7Tpvo3H^62pHP3H|19P; z#wiKN3}UAD3g3a?_+1Wh0f2^CvKLgAmWhB{Qke2$0oB}=#PpKiA{ZvJ9Isb1EM!_y zVfyVWS?w*S0Db`oHZ`H`d?uj`g|hsPXPHbu;Me^%(wst$b6v=W%26?#;&fE>=TyJ4 z*%ZNt+uD5j1O*YpfM_|xFatNFl?|k9Pn>LuBs4;HCohj5#BzV$MM(#pUrFV~5Bn%Y zh{!xI&M}1pd{M!b_6$~SabLEU2Yf+7py&7k1ainGfb`62R;7S?&4As;ZMvD%dE^lR zXxWzr)ERab@FSkX$6t^7sK76G<2j^&L)j_BOz_i757| zF3xE}4>kmQOEQ?bxh1~-C=!H!?yi_md-8A3$)hWiSasATv^CcxQZ1=so>X6FHtB3-O{{8eXZsfH} z`;E}}c&6$HFHszY5f@okh|xJ6?sIW)kWNqEb~`_{hOl`lJlr43bsQiZENus_z-5X& z?`Ttkp&=qfW#vn&6VjI(eE-J2xp#+B2$cjJMs}b?L{gF;Ot_%}k8H02A;RqRr3m8^ z6TPe!x3sk9Y#T0icrb|mJs#rb<}ijr_ykS7863=)yBne4f^LsxadNez@M*G?Mq&}7 zfcKtn1V|VMCSbtk_vT(h7%3Zt-iWR~Ih-e8Mr9t8UMax%|wczED|U`G&-O54Nt$5=f&pzYh^XQqv`xQ`F=kP(YBUsXJs zL4EFD_7M62(ZGcZ_B)((bxGmTeZF#hye#&}p<3-WDIgBOm^;BF3SIi94s#a7jY&T!jc3a8>^X)sfK~Q0~}rZa1mcmpBykIRfLU$L{^fu zK=hpQhK$8vNdN#bSdv~E&5&omePD108`aipZC@TJ*gTj_rV`9&8!YpDw?!^X9v!c# z0x>=$WSx5F%hKhINDTHqs1}R`-{q zw`MiVEuPrMkJbjs((mt&@&`3u2P86v?_M-e92l4rh#Mv+C&wnU#Fx9}k_R5jE6$x* zjl!G=pI3<}fYOM(UQhqqJpQP_9n(NRztAWh|LcF=1g$SvSERN{Tuu(3AzZy6bWZ$}8*&FL4OBI(tr31Ep(>=cmU-O3~=K?G~>5XTcrLKpql}jV=C%% z7=0Y;d2c>yTq7EE&IDp$GE2+#p24yS@7(1>|Bi!H9!uyuZZyn|_I*fE!fSpX)7ttE zmTQ^*2g{ih0W6nvT(U(Wq^#_3+ITu?p#{=h=<3|u_#(oU+c6*iom=@+m@e$ZKtlQ( zVYl%ZCQ7yTP5xZQ*Y^5Jt^2zghL^0~7KAkh%DR1`1z<1|=;R3e70$ut8=T8L6ueS# zA3xHTn2KLQaM6ccap~z{_hAM4126U73&2D`dG*94TU&7qtY5_`zk1Ws{2#BE#Dm75 zd7_blCG^>UX#wm*5Ag~>=M6&W!(9#rdHFJCag{J3?fBxHBdPSA{z5G5E71yec4mJq zwERx!t*$=4!vG=;WRSsf>2G06yFDkMHh1k$?DBGskQuPrPjqr-X2j>mPM5m6C7&6c z&!0@gsc!!L9khW3{I(TC5^|Vr@%9ydk1;^8QttS>*42!OlHsD_W9=u8d2yI+3XM?d z;QoF0?)6#M`@ZwKnydrG8qUrFC8eS*0|S@T(~M)^bQgK=vJ*EprV){N5SAJjS}kY@ z0@J{`Wq=!S{45g2Lx>qbT&}v9W8I#L^d>U*X)kw25@x#{Zt~EIdysBS*yg~5AC+Jm z6(YnpsG%XM`W0$>u=*+FW{L((0i;VXeDAW8M}KCzU+-*0r1dI}SGs%u*ppL1G0z?5 zgIe2zxar1Lrh0HQGjDl5U4dZ;gj4P4$c6!2HH7teyVm&XWMQG(04(j%ddWSBitOkP zLVcN^!pI?=9GJJnkT(GxtW|0+P*w)z0Fu8HBOl1!xkI5_upe4kX;f-gZ)XDg38QbJ zk%W`ez&{H&l3!uMH*Dc?po)-(_6Y;SRMl{Z1?Z`kjzUo=k8%V2c&cZk@4piLR6pf?#L-SJdPvEATKF~Q+D}GnZ z%r2VyKk|sU(i;?45JUe{8+dlTxrG7L0QTMoyy!SMA3%R83~;*jQV%br+>`bFsti~c zBn#w6e`cF=_I-*k;)LQEmKy#g=o)Cxva*gX)=hCiuA5s0uE!ngZL%eakJV*WGW;om+% zD9WB?oB$|JpsjPfp=a!Z7~9>uGB7gu`ktgFtr%ZyRnupn7sPybDUh+HM23eJ_J8Ph z7EO@%?{4?2xL2SaJivmwQg?M&uwl$mPl383LbnI96(9sONHl`Fr@V3{0i-0NMLXTV z;{=_NN5GirX3*-mr>UMJCD!I-7mAq!Ggpm0_XD%zrI45>jITrP4Gqzi)HQN>&4!Fy zRlXZCq_TL;_>S>9KJz%~!C7edWxAyFu*H+3`s{$0wFi6;?H9%tUoA@IsbpAgV-|FAQ0pUzM@vv(?0zFsv8g5RRA4Nf-)`vh0O-w51L6(22?*$X!+@0n z0Xq80z9x~Hfi*>JXi}0lpcN&9C;9Mg5#?2Dm?kFZ&O>gccQp3`=eu8s#Zm8xia1kU zF)&bXT+J&>*AOW)!*4o2J0PYx!AHmPYI&_3YH`2ldVlS5Z1)0;8me#Z1)#fbbWq7; zebGI+qM#A=SV8x0Tk~@+SGPGeMrM}ZJ$b6C8X0|*2??zJ7s({T85x(|9!iG(d2c;E z&5uLMHdx9UI*F0o(|>pMp04}G+9*T0|Iy`-PHc(jSot|7qUYBdlan0{Kg`j>#o(=Npr_L}YpsCky9iiNJhb4wVlrE8{f1$HVVtVbExrFkH1laDIM*_F&R1g7;p( zcjMV{QTq1U->bn;ILFLCbB%euxtML>KGP})g&>7>`#zbM8U~Z|Oh(V#V%k(!1|xu7 zQ6(h`pmdLM{LS5yhvl08A?8I+jzjIIml0W6LJ71PtU7r*ry35N5(j3VwlU4Wq*5M8 zi0uZ)s{b-xQQ^GCW^a9dT8WLX8C+L~Zuj%!jFB^Wo`9s+nEb)|GRWWSzk622C;ke1 zJ5RB+#LmLYOKNLd@}pC?x*D_mL*HV@Q+jR+EEZMY*Clb`FGSN~^di?{I3^D^f|SyD z@25-tF)qpX-x%}3^4lM4F%ODwjk{Ve8F)njFWNvsx9WT1H!JJ0TC;S~U-`o#S+Ch~ zCMF0gJXd(|=$(V5{aE#i6NxU@YdL^Y0KOT8z0A}nw7k6a$IL{9wV%j4LAP(VpBwzp zVdfxsysll?cdPyIP=ouPFa5?Oo5i=7T)4f;HAxKvmm+(s*LO+}AQazx9$R*Ix6!fd z$JW+X1}I;mjVh0=2RNHF=gW!{8FWEX#bVk(eMz|LZn|)>EUVTk&#rp4=k)v@>V@cJ zSY4eo3{qiB(uNRGY^gcaYPMwYx5O+K6U3&#F+d|n@he+(_F&RS^7B{qdNqgb?OOoZ zV2#xh$3zm!%HOTNj7cam<+wNjM+DPB6ptkE&CF7Iiwz2VT|-~9A0F0!jleg^eg8hD z!H+HK(X^woZbJ^^LH2!L0fFtUZCkucmzdoy&Q<5;$a3#V`oOoDTn)v1{%5lPV8@_B zDCGS{2xdbgv?H5zstHm}pB~--Vn5vRck66j{!G`80)tGca7zeQ=e4@Z<-bI;1U z=8pt=lF0^*$cxa)K;8ES8#FPm`8=2J_#Zt@2o8S!y!dJCYj7CQsR+_a?vrWcd&gm( z95*)gygZB}Pl66G+`NmKLH81t%Uo!HnwR$$6D0^yQ^*Z{?#jDmTzm3Gi zi^+>JdBr?om@oaFqRf9eH&=5H2Une#WSjh8T^S_!Zr51t%KwGYH}&xFxA3hl*9qwT!(1n~r7y0)Ln&?^z`tvla1NaqqLp@eOP9wrR$`kvmO1WZeZY*)Ei%dB_GRJY+0Fb z-;+?{{`qzJX^)cf+os8j#Theu`-ct=*bg!yiXhy;SNu5I*vvtHwpCsweE66D=FMTl z>QyPT`lzNXaSw5=5 ziGSYD=Hw6Jz#xyCJHILf8iknZ&reBMMO;4L8LrH~Z=T(mX5KPBPDv-h4vLs7R^lxW z&QAqlglXPUR~k}8B17km+v9bVPikCe<@0)rc)EKE5(yT%#G|94$fUf>bxH=c^Vo49 z47Hx05pFJMW_{N>A|Oa;>MvC7se5csD#uMx~KZIs~Lq3F+=oDFJB&0qF*%LqNJkNl~P`<9p`X-#Nd|zT9hFdn?m9 z#(2k*chE_m0Ur+IKD?llpQ&RLAvER(b~loi(p zLz#YUV+EQXCp%c9YW)&vM+?#$Ve1^q_|uUJpORqx;&W?5htE(8`IUo>$yIUHRy;OvoZ4f>vVC zzcekN_cpyyThHgr1BO3y&`G^%J$mBuy2yN!izA*uM+XC+=5e!aeT=GJ#rfjp0oM&I zLW#~AyKUqmzc>Eee3HlRtxYyDbxJ6F>V4Ic8{XblczJ{|Ou_OyII6Pk?)6RQaD#@Z zB!7_GO%YPgb}gN-i;1CCS!c>CDl!~xXQI>6?i!S_^YD-)^R={v;PGkd>*KzB=>WP! zFrC$|cD!wDQUq6Rak$oB?{$|BC=~bMyoC}7b`GZVnl}XsDrgQ*8i%Bd_n3dD63p(@ z&}#4eq4kD|26S%%j)R*c$0#MinIL2 zPdiew_<#xvqAXXtCm*DxDII=%!x3f(Tp(*>7gFJ%El`sL)^uIg=g%N@)zdnvYeHJHunzA^BFc=vX~Ww``-zJM4&| zR?=@e!UY~540S~hHj9I-hjO4%Ct_o#-Z{#^7Ze=f#=lG~QawC7Br`U1gl~+AKaB|$ z(D(OdA(VXPx0IYm$M%P7OX$uHMo#OzT<(7QG%m5M^4Rj(jit_r0w@TnA)*PG2a_c6 z(&Ia9y2(ZXk%E?&cka!btmUPy*T31`*+inp4+n?cwAeLggifR99eXVt;?T!)*ICsG z7(_&VbkbMkrKL$g{USZra>bljsU1n1ZC%*QXdvM;NlR zlV|(Y35vRdgU8oKNisxVJzYstJa0GxM|5XM+G%m~k{AbP9!jXYF!PkR!T3#0eM%*L zg}}vq=(4*ck=?S5-ez&3Y6IovmoE&a$6HPOf@AF&lFK0?1bPWwT|ONfGX=;L3H$4y zuU~D-G7PlZDWi*u&DQ*NIJ{7@TJHj&&X^D_ z{%mWKW&Bm_zep$$h#3D`n8D;MN=`?2l%s(6;N)!ZuV+Nzr%(7!^GSRI#Kgn_pFRmy z+jC(E3YI|W6dIayZ|t+Vz;~mjEtu$5ys#p#(?wh)r5OZAkP)$Rae;=}ce02sS)4$n zljPw}_{QxaQsLps-9KuM-rpO0_<7J2V`b}?Gmo)1VQQ*_^Xl;9w~}_|Rrj!QBfD4n z%hq*%a;xE}8XF5pNL;ua+4FZt3v~P$uvmMXMMIMs{(4`HRk{V;>o~TjHQ*OIvBR=Z zbsDN4x9$Cx3tJSKFnr zDS{>Zwh5-zZhux1P4|9xob0jFOG&*nwg1dq?n8#oxO+3Z!G)C^0=a*!oA}1Ov}WE^ z6$u3dZ--gOw%K!L#W<0!qfK5}Y3)DxIrYasYKSeLT~0Mj_4ekeb%iXw82 z>x-&Q=ZezPX^6{!Dt_*LmJmoUZU}NHWkbpsTo9tBN<$uVZ@D_J1_)Su&n|q@@+dSX zWBB(OYj_;@b3*%Y3v zZ9gKt9PAq>z08`TqrJa)Q)_S57O3YU!!4ZhGPkB2^GDg~Bovg%X8V8AAQp0MYTQ?wFOTN#uD)VFFKt%p*`4E^OEj*7=a2GYU%qzm|h=ET29o zN!Q?m#62>HS&^1}RY-Wbu68ptc;|Nn@t`()0vC$r?vC~S!*lip>}&0s`s1TbB2I3L zwjYgn$O}B#VTgHH`Ql~N@Yi$Ca{Uh`Qf_Cj@a%sGHMX7Geu5$lAm#U!3!IpRuIsZ6*Tb2f8c6c(so9R^wzCNhzvoH z`LHkVJV9n(!e1Dm|3f9v9$t3d_nqgyv-3gAS0^bJNl9ep%!aCX?k)^$i(PA6eYvT)tamM@GbLr*gUBj7MM1-*cX|vD2eX9nMva#V3 z121OzCtvID3RWRPL+J&qqMxKkd9B;_CFFWsoQ(0sr>;*??p71;_Qr#b;PY{PFJ#S7 zYUJ*+&?<*dHGD(dtsdJx^03b7RKNNgmW<2@6h_2T8N!gVaL5SF{-|){({#>0(Q0cG zpprb>rrG+47`~r70@4bBSVX!J^44=*QA3L>{rVEGD;2Z8TEX==U;CnGNJIc-y#k(^ zjCK_PCc&N7g*HsoZ69rc6|e0%FPM4-Y)6@SzLo?O?cLoTMpl07Sl5+JxM|ML(^wB4 zh#5Cu$mQXF##u5UP`6=_Jj2(UvT%NJr)x0XB5gBaqsls{!gk`>u#JD*kiEV^GM~0a zjZ&{aicy8rJbD26nNA|~A<&{M{%lANk2(id^$l2J1drqnoVZc=ZvGJep6Q24r#29l zSXqfW_jR_litqQHW7Vv{t5v6+gAXTTmrnED7Q0I?zkTOv-EI*#9nF)Hm~rxXEXe?s zNI=2gPFuVfv|(UH(Yfyw&HY z!k>Q-6*JwSOa?T}2_#H2vk2KuA8psZx&Rrh?-{=s)ztD2n}sg8p?K)nZn;LgTZiK8 zUZ-ShO9&~LnU$3Y9!dDLcqsb|1G*;c&1fq;1WiPOZ=++C-o?9ZPOUgzDE$CEmc zJMi&+l^)>4uV21peEyh6V)<-K4O@ zL@9fR{&goBLAlaW7M6D|tHTz^3@C@i4#6ViLHyapi{PI_d;n|3crUO#mHcJs15W#o z8a;lCP<9516JQ|ol#HoPqOW94g^8C((N;BI}lzi0&A1 z5I5ON+CVTdxA|ve+?Dd$}i*nYpbMT1yc9 zcoG!pMQaCbUA+ry^`7hLNDvnHNDa3W?^g$CRiKFqglMByAYEWsN``^YV0@_k2eyt7X z$>8oudUZz`3fRcVaPjbnwDtCq`(6Fx+;A>BtvDWtq7+zg=4?J_HoG%pShs(;?vCsT zrKH;4#M=cFYM&!t?@|H`uE@Zc0TGy31Q5{D3E1ggn`}+>{KbHURM^467uz0!AekO` z2e2J}M>E-Kv;=cN=yP-PLe6u>3aoK1!n6_q&49|SYuFiAmJy6juc$}^9i7$Jp<9eF zNSUcp2T4=%PP!Ki#Js=ywP=t%y4ip8{Hh@)HC0Wlx6a|ZPJ7tZ7RHEZXPQLT3B?UXJ`LzE370$ zgPaQW#7)6@m^*mX@LG@@TCesvMt2$ln<+JvGLtAPBM>_r0uGWdHohV2f%(c0a*8At zPEHyW6cPxRg74n-dCk9nZ__?GiI5AuK%UIIHnY%7fFfI&z~Xm^1%=u}&Iha7Dj|a;S=-`lH4uc7UcQC@;3s96vEM#H6Hjg8K7P{El{dpzI^SVp^w* zJtqtHAD7JL;^hs37XvxwH8J7Q(w4-y4Y!qo!a(!!<2`LzG=vZhfl{nWP}M%%vkD7iiHOXCFw5RpoY4J_&WNw&K21@|PC+H|+h*qvG@{ zQBke2HJts_d`oxgiUb~gzG|+(vxoDF+d+)bd>|V%xsKSA^X&)igav~|N6oL{&OtR$ zblCiFz6Fn*-1n0H?9vMbpWqsypouK9+_vZpEPQm}i1HeG;5coEom_qO?mKP|3Cb!i zMpaT$hagcRg1h=hgm`O9+T`rnotgKdyZkWeSxo(oSh?v4^9JY@Vy=0}(Bt6NJ*nHm zg{35*Ad`g8F*piT?gjS5vD#gfkJ%vmkq}5sSCv(c&$;lBM^gIwOUY5k&&C=$S-ER0 z%%Ir3JbS|?ia_X#SwxO#U%g6zsn++YrMd2>Re$aP_49O$ozVF6)^~H4h2PbT+1U|> z^Jp{#z#QxzD_9>cO_xZ%jcsE1^DaJJJsLYZ&xPna9jGG~{jO=B6r_eVg2)Y{miEh{ zUz3eB_;X)om_`N3%V3fZ&5p-~hp@?c#SUInmyEKq1S+bO?z+!di2>I154WI_5)|Ka z)%5ihFXo7MX=HNyAuVCUfZZ}qt4 zq;dWfdt`AO$EXz8QRtJO17q^JFQ-*%5!5o+_X#b4&rR!l`01uPONH;H&c-isW2TUg zIU8_*c8+}Y*LfJSyc<_wegn`vy_n=bZ~-8u8uNFk<)ZrQ($XE6%$h^XIbFXimXk9I z)Z=iVH-hfp;_9rP5)(!^0sGCHF>pt9uhJBA+lDph@hF6@q8(>z4Pb#~R8r+8N{6ed z`5ZF1!@-qDNp(WVNbc9S=|=kNahM7yLm55+&|;`tN&1|;iRLpIy%i^ngCmy2#~2FG z?z^6|7kS0Sfp$}K%mM;Y*1tYrM5q;HL)3@v%?uLrdyx`Gd;;;D>VydRGm8stJ)*Do zsAc8I-liEuyKVmFR%#`J`Q@iid&kiOf3iMD6Tltr?0N=75uZ}+Z`Al=@YCjyRae)G z7oh=#+R^!P(DPh`;q;U}u}aXwq6L=Y8n9H5lMU2dKc-7lmCKfi1zXd==A9B?(==}8ft1Z%*?c%IfP5_ppk>^ z42dUbFePax4728pl$DpqMMaZlg^w;X?h5F&%(c@KKG-gcg9iz`%bkM150r;T;J|YI!AVXL{;42|Utiz;R^Y<&~_kilLW~P<&~G zxwJ83`aR_(F2r>jCF)zD?=LSY@A8IY;QwF&V0Z_5wuYHKiyEA_%$JtB^uG0S1%CXJS>rOWLxuSSXs3re9R5|;9GZiL0vEW64uslBgv~6&Zn2=D?)UniPInMeCHJ;t1 zVOv*J*_u%M{em&{(W`Wm_KtV~j~%sP8zJP5rMY>Z_RDR;FhH=~HExN$EX1qGV?*Q7 zJxz89BP=ns7(1MAf8-NzSI|Bj$`o`=MWDD7!I%p@Ob!B`&LcN!d>Tkzs1_D6nA>3; z*;xg36bcF-f%nxuTj%#8eTln>*VsEmr%Yh7o^?UfTvWtjZ{OJ7_mBuVA^)yY7TVX(-JPqH>GF3F>u1X~PDltl(5PX) z5SVXe0EKsvChN!LZu-{vo0>2dU>ZuL#l=k<2uPgJJyg% ze(^YZr^MJH3@}SOuf*tCl~PUTn{f=4yrFh*{E6KK zih`{L>RhJ$RHjuk?*%$=Y43^&FO{)}D;D3&?(OFecss%fqe>-}^dDuKUZ-b=+_<>7 zG&KZfKk9c;piu)|;}SEAF=`5mry6=?UOh7)o3zuzhyt_(%yhM~juqCTAJiK9(3vgiaw%`+j{amEk3BX*YHAEf3I1sY9ck!iCtrZ|<#lor9rW&< zO|-E975=M#qaW4c4tH@vo6e;@E*qc6VJ9T;XP31cCF5Z4?7K$<%5ohXRJJV+LstuT z{r+<e-o>xHNxw}%6BC&7 zgeEV~mQmFqOs;>41d2EtjP252pi&@$?4^5;Ba+V!JpllXn7s@#iBcl5hG(G(p^QNGJ zf{KJURnSb8S6gQuT6Ik#jS-QYCOOddMw%u4C~!Y=;)3Oa9GF-zan0DbRP2r!~XUiOW1GA*EV*4$4^f3LwhZk zfT9KF4YlQR%vU-VvVa1yo1UTG`-}-v{{TZ=()8C)3_#(3Wz&%sOHGA9!#YxY_z)NA ztzgzRukcHL(^Z5YQC%%2qo?<=ZI=J;Uk3t`s4h@q9`a~Zbrcd7&d%#hQ){_@YIo0G ze_8QSO^vIWg$2i*U-8^hl&(O03fNut0wr-K9z#)OwkFzrSxrr@eARU<1qEuLg5HP3 zijPT4cC!(fnm$w__6YJD&w_uDTqwZ=*j%%!n|o$v#^zU}*{@8TtA*5I9sE>b6k`cMMxL*jd$P zu0`EHNq5$huT+^Bof#Vz5daWH?)tIC$pe|>(Wip{?EiiIYTJ1K;m{KA?c1C4-A*Y8 zf1txHBT++AbKkyUgV5ZK#~$c17qT!YGP9W`xv93(LJ?`>`OV#PtW!98!cP;V|@OcSR%v}U#9;%-d^ISa#p!uGeOOpjMh3Bh2eM$w0K1pNaWYsS!{!!*X(1tcEfO2>-Tln1YHN+?=ejf5`6| z7N%6=wgpU9X!#{E@u?6P7#OST>&x&+g}ZGmErY>?Lb&iaH{YVM_S{x%E+#s9VQY&J z^!|`sI*=EG8FVWsJ!KabM(CD2MN%DjCh?o;7a=^1IoqdtZHsEH9T2*wXs| z^hP=m3Gz5BlGx>jp9IY-0qemJnG6QAE*hE3C2Q6q?Ccmo=A5wA1s)j+(D%w`u3af& zqoZNXd|m;E%T_@6=u{XqjX&>-hY@R&Qwmzq6~JD)ce51p_4SqHA$+E%q;+RFNkT{n z#tjk@nP=A4+CcTnxwyP6gcjzZmexDqY*FhN8meGmVQGU%)+g_b!a^=rm}J<_R#sQ% zDaJ9Vek>@^9vK-)0Cg}7|Ffe_S{O-B6zlP=fzL}~-1Y9fq~}3aLPEkPAVX?4G&GC@ z9g_?0-Yr(v+(AEe@FY0|=|j)2n1>T@rcQfWYW%LR64KM@6F+=VVP|900Ph_5pGGT} z$j_;+uKonla~h|or{nNbTtF(c1zE9iph?1(i}Rt5P9nJDjH;iTSLin#b_dHl7NlZ-CDVr)PU2D4h5&JKc zZX5X*KGxAG{5zDX%|j8D!x;(u-W+Jk6uY{+wUCzrzCm0T78a2MR(f8J4%?b?^T$7S zmR_1YZ%BDsH&~}RON<3)jvTQD$Hdil@C~yZr@Om*Uq?q!s+cRx+{srqH&yS6ifVv? zQ37!4rv6U6q8mT-INuedB__V#+uyGZ3V(TO>0%0Sc^ZXPLje z_T1OynSH;5;_VNOHs8)=c63ChNN8XUnwS5=q}G@iXoE;Yp%0=iNb3@0s^a%LvPZr~ zz$w(y()#}$PdtyeV(7))#_LPKY6uiT$mizfkQ%6e2h#xrHR;(SskQ}3m&Rpy&F!??8bv$C=f zAk!#=bj&F(1_fCxU0SnGt)~2@_V&?870$E6^@%NmFCGF&vLF!q>Khthh>8aLVd3r{ z33GAqV9pq}Zy^0#fSnxJW(rDzI3P6!=tR!yni`~1B`_daIXEzZOgNFDH|sS%e4IXS zXz1BKw0*m;Pak!@t{#BL6ky2{2{#;Q1jHa3S0mM2yX>D<)I$qv0fKh0K3Z5^4adNv zKpGtZ`?}yqaWMcECXz;5S@~kc;b-kRce`e`!4(YT6!z&0Xex92} z&C)lfTI~#$3%I^A*3gd~O3rZu+4=F+b$z`k0?FWn4FLRtdks^Ou#*!HgsWHF+Icfx zByeGni=l1f&N9ZIDqP&$NDnWhyAv)Ro`5Cxv1|F-3p!`*LyzKKxEs5N>v~8*L*OYT z*7;qWfZi1ykTuRv&n_4zjv>H>>CUJcm4O~xE~v}YHMqgLH!M( zG>fz72MC1Fog6XX03ns-^XCKSf23T5r7>w~wB9~G0&u`f@xDy1h<@td?IwUv1QkCs z5E$e$X2@YlgwTr&KK1d6|-9tkl??YGQ4T;xMBNEP%Vl_3h*|6D#BKhI) zE`oFDXmfKD7_N~(DrdfXmr^N~4rm5*^AHu0Wh&E9F&PcyS4a& z*bRKvF3%1-0x|G*HfQg`>tzo1UWc*&fNqPl4)XPtf~n+luF}dwqGCo1Gm% z!m4Nr7F3`>3uPFIaf>ej2qz>YCGBlWlI8)paS4{X%IZU8P%iY3j*^lqOq{TqBrj+2 z!n*<_TcqvSzp(<~eceO4pe-&gBK#l3bLc#(0QEolNVA%Mo zurd=Vck2w&zttd2P>FjDhaVE_eF#&?M+FgPTs#9l5CB{B5C_8I;)opQzC3ZjZZ53% z*ku7(VN*b>!J&AyI*bC`YsZ}hY)(TDy2Chkl0(sRt3NtzraXm1ev9R z0Tiy8Fwujlg51;89V;7BbY=-*4j}};Pa}ro{FOh5AT$l1+kWz z_{9P4RHjQF`Eh`7@z@VFbYlts^Jy{|6JhT_zz?uwz-9$@k#30HMwcNzgk~4x#f#sS zWHLfZEh;t$(~i)$;Zgm;1=fg`WoGO^oASMWwU)R2YUm^Q6I|KRPwoW#SJN3U!5WGN^L>vfE@gLdK9t=mG`$n4ng&h z7@VMX-vAtJmk5j$>t2RoZ2khHQ>8pL@`osVA?z!Rl<9 zIUK{-j~7Va!*ykZ0Ip57lwDq2WZocdHRY7m90AGs-^^hcq?uNe8mPb4X|lB7nFax?uW(V~Cqvp{;)% zC12$pDs38Xy_x$!+FlRQ3KeL=~2LN{#|Gj2R6Zv&tvdoYKU1lc{#`jyl@F?A= z%=vh?Xg4;Gk$a`Tg9GsXpoP$relBTRSesA)ynIMdhZOAEcsJf)lMFAw5d~Tvj`|Re zsP~D$pFzo((b2OT9>|Z3f{%O`U$y&ByQo}_!~lu9ZY#H+q&dY&~AYitX;6N(IUD2kbSf0c&VJ`~a8NHt-@&YK+ z@$jkQHxBOrBBKko^KeH=#wRfJ__XzqcuBy{Q3-vbutG*wA?few@V zcETuP{tR{@#BhELU8!LT5r9fA4yRnB8U4U*?DdzQ7&652=}!#YWnfcOX3~QrPX5+? z+gNmC<0wmqoBC%%6+S?$0p~aeT412u<1H`GX7O8DosIo1NA3WQIvGutgm%WgFQDjy^j_#6|DOTzn1cgD-_2Mi?7-ry z%ceKM`Is{^A;{m0rNaS4hed@?)1$9R)g(GaMUgxE2H^~nLdg9UnDFUNGn1gU*1=Kx zz48&PcjOHle*^K?@?gD=8fL4l=5GUU2Qr~|z+972Iv=*ECezvB3E|! zV+Ss@z?OuGS*B*i|E^nQ z$u7Wc0gN*eE(xQ4zK!w|$M)bkQ7<E{Mz(f7VvoxwO^&IdM3M_cK`mTS+}`bM>g+_!ju zWG?{FAdoh&Gz*j8dEZKwii=zspC9W1IL!qc|03G=QUnB2)`5UbuB(hLBc$nb_Da$4 zXPuR}00GedriuiATY#No zCGkqe!L2b1Qz8z2Z#Scb8ydO>AVdl`PE>78zAC_2AwjwT0FcqtRGc=8K!;fybog=7 z*RML0Zr=rX4m<25&B7Ff-UXMVeR>Gb>d*Iz(BfitaC*IsTxYlXZ^Ft8vHzFIzo7v} zh-}!hDu-JoL0+&LrVqWJSMV3SBI8dk?%fC@R1E=Sw^owc z%*k0z?xrt~7SV}45C>~ED)HKz4ARCiWH+stxQmHnV>4Fg{kUTR+}_@IHr>;Kle~tvVtnf88N0;^J~A=X{DPDwrSzD`zzqDexAEMzAx1@?+ub z5cD^!sXY(Zf^Qo*ws%^BvruEOdZtzgJ&O#ndHYX8T7b#%nTY%nO9hY;GIKP#>-B8T zJ_5MJt&KOGvUQG|F3a8KoSe!XZDuA_nItz$<;AiK`-aO|Yn|NN)~EcC^au$bnh=>F zx7MyM+NrV@x#wJurkSCLYKJ!%J}49j0wMIcLr_5iElc4uz(uR94VHiRru-g#AX)f{ zvwg}P1^V#d-DRSs(T`K@gb|-^zAefwjG8QY26-3p^6!rYB*M~l?H*Jscu!_108SYS z-P`x?$|VFc#L|Mo6Y|Q+V{2L&si{FJg6d2F6YYsr1*f`SA@uL2-@%S&BzFv8-9||G z3KEVA`)?evbdHVTa53Vh;C$3{wGO~z37Fp3g9ix&4_FxZ#t2#m4rd3ED#i+d@R3he z;f&&RHe419yv6X^a`UHbaEv_Of@qK2|KZ}^hC4;Nx>kfO&Q_t6I|A3L0qoD{kB^2x zNQ4s7$}ptrayeFC8GGJ)6N(B7D3B0fg}YMk<$f=ea5EN<(m2PYMHQfHP9G#rKk%qP z?WUq4qzTAISedjFejEXKYxi^o765!B4C<2JS%&r?zud=1jvl9XFj*Bn-p$#VXFXsO z(s2cJFo0W$Nh?u$;+jBS9wklWv}61gT6gp=OD}3B+v&L**7H;9>MoJ^0r&!P2<(}tE-sJRv#lgXM4z^>24{km`7E6S<;NpcE(7G3kZ` zbpglkR#Is(!AWmqM5Jq=p%X5w05xLLaKboK6s!zy?8;Ypb0pIaM*aa!5;;P zJ3B^^EHbYEI0Yn>X(mgW0)PLev!DI*lP$78Ez;`J?pIC-I?wGx)8~a@Af6II#P|-z z66jD210@$9tgHaJfHgUJ1|CVM|82xmn8FqB2#laBXaa387@%urVcNwIF_6qVBo;eW z*bQoota3TqBM#LyG*?%4P&2|65THiFl#v_?aURrxywH4RfLSBSZ0MN2-B6Fc$uvPF zh!I(xH(`V;gtCnY7dMYMj;T{KQ;Gp7({%mGL@+-Wjs%pV-qiBR(QQU7A~jIxHtcHWrW+nVEMzE<{NK0y0S`lF(^Nz7&Kc zCjJLfEG(pWT5U6lW{l1(^7H2)6Cf0@pvBJFZCbgLEPTnx$;loP6+ET$r01ZJ(Rz(bd9dvgmC+IM^nT7Q@?w>zDzmBD$cUL$$*r++J+i;fD|3V-u-&0|y6yX$+B3Aen6eVe8?$>gHYqf+FjI zyv$=1gqayF#??%8L@zS&!hU68b>um}@C51V)#>xiAKc&iZhgMEn>Nq}C`91Qojyky z04Qgtr=}{BKl9}TxG(>rp^KTE-g%S5`Id&-p5+_+O&MjC@Bg8*_c<8g1!cK&hXCNA zYUw}PAO*oa;uo0=&d9*+UBd|^LK2BLXUzb>DQj*HX57d%vX&M;%tF9`gP^bX0qZSW zJoRIkjDyP+rGB~pd3gUr;#Kg$x| z|Eg?!?E(g9zKrRlrO>*&X%deaB~GXc)UlXFMZw4Zb6_y~y@-_?cVt;n0Z+lgs*U7H z!v1de$_EvQPFP`bNXR^#DM%FoFdOM{YH?+fB*M-C2Q<-eU?H@bS2WD=G0TKSJyHi^ zbCUJB_mu<)tC>8t1)w&85;A5$z*_)A&?&~;Q2;(qzN)zH>)zgu4xF(916=X({6NDO zq&gTFA0cc(%9fb>`slum4U3j`zn&M^dC4QkGW@Il^S?LaaeLO^;W)C@3QE?k z-Bz>^!>7*K*{MNxh2iDjr~8(Ez#BZ+Zn^Q`!4uOeF6I9V0J7+Pw+{d&&{*)SsXESw zy#u3C9A?hvjlY)f)C%Cx;raST1rt;I>ClIyfszg~+b@}0t&oaWR*rh?wx@r{+rxZd z)A<1SJ5qjX3i|q_?d_xxvx48h#|QSqxBf@Dk0^za?-|U&fhA>XnJ1Iv$P|9-=dWuR zcnr0fyQtd^en<%kKx^8yG?}fN?*?*wF}nsSDLy~dtM{q4U@7o?;7=HjgamaE*7k2t zMgT8PmRRt+m@}d%v5P{wsj!=(hZ-X@7Oaq8Zv5zK(rmMeW)oV9?X_eTIWl+_NJfzq z4xJG>WilYVP#`bx3q20YHdCUaNs3$h)>ljHHjU0q4tV6%nK87}(=NkpBEqZmo4M(b z2f&SS@Nka;#^``-EVqg=$~|UPJ3E|>uCI5J{xxViOhR##tpB-qg81V{o@ly%5kSmt zwR|DX;P_L2lt*#x1ipzXY`@!*`JO{mQ3Ub<3rpX1TCyHK0IMK}3{UBWl$PQi9P}x@ zeD&%v6RRA>7uM8fRwdNkmTM!lFzw4?bs%$1PjAL#JpZ<+0dbTJU{}JE>rlMXi3!~R zS$&!sK9@?U+JJ0Q_G6U_S}(|SAMOc03V*vxq@anE2S~dsXGeD<;Y}7`t_a+>d9l*f z@?YFVePELsUuM$6Dj|Ubq5$EM4?B|i{)NX50`3AcMp3RO7P*GO_wf-1LcN@NnZ&=s z!emsLa8>}1KkB~?j@+1G`}1+pv9Wgmgf_dn2`DvKbe3Ku@arh#qJXOo)NHS-o}h68 z6X){GL2)9J4lbLotQRWN(v_4YJBa_&O?MG3XDJ^?Y>+Pm3{JSRzNNCg8y0ehOxW8y z17m&TlvR1fd}bCFYFIHN5P$;!ag_^$v|L;t9~}Vr$vk;t{B49xz5^Xy-gIp|H}N`u z?D>Bs5Pj;8Pn-D#f3rjlh*B@~q$9Nd?ddlLE>PXL2NOj1$! zAePYYJSpx$JmE65bIQv6wsa+EePlnO(ITe%lELHo(>aew_2o^72#{z2*BtQiqw&fn zMCs1X&wXz{03Pv?K48l@d3dfXbphWF&la+mj6u_F_?Im5Up2FDpD|#+wX(BAz#8O> z2W0Ii0?Z&nNy!OCrzv0(t8f%|pL6?814kEfEH&Jb8T)tC2*4|ch4r|W>yxvwQBjF} zFMq%xh(JPDx8{sup{WA~Fs780%>NKR*U$6m6%zS;V9{#?`e(UsSSb7~gF`>n!H`y7 zsbG2kuTW>FC6m+@EdW8^rluOa{_`<^vgql%+>a9!V6X^uo>{9y47Ko5_+$XZ(%Xw* zz>@=IiV2$eiK&jTO#bJiipB-}G@pc*b z9&OTAr$dpauWt|gcqz_E)F2rwfOi@JZ=GI?W>oQyo&(%!q3up7aqh(mx3wZeZ>9#B(3r) z!Ql9K9N02Fusdf&mO>!@@m`{V4@nbq6O}y%VFJJ{hXD9Br~W+-LiB|tO(>C*l;DC# zFq=^D4s?k-fc@|6v1Vaj6o;Y;GzyJQ=QlR4b=MqzJ*8M%D*=(~;8^

*DMYOd$6H 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 + + + + + + +Leonetienne/Eule: Eule/Quaternion.cpp Source File + + + + + + + + + + + +

+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Quaternion.cpp
+
+
+Go to the documentation of this file.
1 #include "Quaternion.h"
+
2 #include "Constants.h"
+
3 
+
4 //#define _EULE_NO_INTRINSICS_
+
5 #ifndef _EULE_NO_INTRINSICS_
+
6 #include <immintrin.h>
+
7 #endif
+
8 
+
9 using namespace Eule;
+
10 
+ +
12 {
+
13  v = Vector4d(0, 0, 0, 1);
+
14  return;
+
15 }
+
16 
+ +
18 {
+
19  v = values;
+
20  return;
+
21 }
+
22 
+ +
24 {
+
25  v = q.v;
+
26  return;
+
27 }
+
28 
+
29 Quaternion::Quaternion(const Vector3d eulerAngles)
+
30 {
+
31  Vector3d eulerRad = eulerAngles * Deg2Rad;
+
32 
+
33  #ifndef _EULE_NO_INTRINSICS_
+
34 
+
35  // Calculate sine and cos values
+
36  __m256d __vec = _mm256_set_pd(0, eulerRad.z, eulerRad.y, eulerRad.x);
+
37  __vec = _mm256_mul_pd(__vec, _mm256_set1_pd(0.5));
+
38  __m256d __cos;
+
39  __m256d __sin = _mm256_sincos_pd(&__cos, __vec);
+
40 
+
41  // Create multiplication vectors
+
42  double sin[4];
+
43  double cos[4];
+
44 
+
45  _mm256_storeu_pd(sin, __sin);
+
46  _mm256_storeu_pd(cos, __cos);
+
47 
+
48  __m256d __a = _mm256_set_pd(cos[0], cos[0], sin[0], cos[0]);
+
49  __m256d __b = _mm256_set_pd(cos[1], sin[1], cos[1], cos[1]);
+
50  __m256d __c = _mm256_set_pd(sin[2], cos[2], cos[2], cos[2]);
+
51 
+
52  __m256d __d = _mm256_set_pd(sin[0], sin[0], cos[0], sin[0]);
+
53  __m256d __e = _mm256_set_pd(sin[1], cos[1], sin[1], sin[1]);
+
54  __m256d __f = _mm256_set_pd(cos[2], sin[2], sin[2], sin[2]);
+
55 
+
56  // Multiply them
+
57  __m256d __abc;
+
58  __abc = _mm256_mul_pd(__a, __b);
+
59  __abc = _mm256_mul_pd(__abc, __c);
+
60 
+
61  __m256d __def;
+
62  __def = _mm256_mul_pd(__d, __e);
+
63  __def = _mm256_mul_pd(__def, __f);
+
64 
+
65  // Extract results
+
66  double abc[4];
+
67  double def[4];
+
68 
+
69  _mm256_storeu_pd(abc, __abc);
+
70  _mm256_storeu_pd(def, __def);
+
71 
+
72  // Sum them up
+
73  v.w = abc[0] + def[0];
+
74  v.x = abc[1] - def[1];
+
75  v.y = abc[2] + def[2];
+
76  v.z = abc[3] - def[3];
+
77 
+
78  #else
+
79 
+
80  const double cy = cos(eulerRad.z * 0.5);
+
81  const double sy = sin(eulerRad.z * 0.5);
+
82  const double cp = cos(eulerRad.y * 0.5);
+
83  const double sp = sin(eulerRad.y * 0.5);
+
84  const double cr = cos(eulerRad.x * 0.5);
+
85  const double sr = sin(eulerRad.x * 0.5);
+
86 
+
87  v.w = cr * cp * cy + sr * sp * sy;
+
88  v.x = sr * cp * cy - cr * sp * sy;
+
89  v.y = cr * sp * cy + sr * cp * sy;
+
90  v.z = cr * cp * sy - sr * sp * cy;
+
91 
+
92  #endif
+
93 
+
94  return;
+
95 }
+
96 
+ +
98 {
+
99  return;
+
100 }
+
101 
+ +
103 {
+
104  InvalidateCache();
+
105 
+
106  v = q.v;
+
107 
+
108  return (*this);
+
109 }
+
110 
+ +
112 {
+
113  return Quaternion(Vector4d(
+
114  v.w * q.v.x + v.x * q.v.w + v.y * q.v.z - v.z * q.v.y,
+
115  v.w * q.v.y + v.y * q.v.w + v.z * q.v.x - v.x * q.v.z,
+
116  v.w * q.v.z + v.z * q.v.w + v.x * q.v.y - v.y * q.v.x,
+
117  v.w * q.v.w - v.x * q.v.x - v.y * q.v.y - v.z * q.v.z
+
118  ));
+
119 }
+
120 
+
121 Quaternion Quaternion::operator*(const double scale) const
+
122 {
+
123  return Quaternion(v * scale);
+
124 }
+
125 
+ +
127 {
+
128  return ((*this) * (q.Inverse()));
+
129 }
+
130 
+ +
132 {
+
133  InvalidateCache();
+
134 
+
135  Vector4d bufr = v;
+
136  v.x = bufr.w * q.v.x + bufr.x * q.v.w + bufr.y * q.v.z - bufr.z * q.v.y; // x
+
137  v.y = bufr.w * q.v.y + bufr.y * q.v.w + bufr.z * q.v.x - bufr.x * q.v.z; // y
+
138  v.z = bufr.w * q.v.z + bufr.z * q.v.w + bufr.x * q.v.y - bufr.y * q.v.x; // z
+
139  v.w = bufr.w * q.v.w - bufr.x * q.v.x - bufr.y * q.v.y - bufr.z * q.v.z; // w
+
140 
+
141  return (*this);
+
142 }
+
143 
+
144 Quaternion& Quaternion::operator*=(const double scale)
+
145 {
+
146  InvalidateCache();
+
147 
+
148  v *= scale;
+
149  return (*this);
+
150 }
+
151 
+ +
153 {
+
154  InvalidateCache();
+
155 
+
156  (*this) = (*this) * q.Inverse();
+
157  return (*this);
+
158 }
+
159 
+ +
161 {
+
162  return RotateVector(p);
+
163 }
+
164 
+ +
166 {
+
167  return (v.Similar(q.v)) || (v.Similar(q.v * -1));
+
168 }
+
169 
+ +
171 {
+
172  return (!v.Similar(q.v)) && (!v.Similar(q.v * -1));
+
173 }
+
174 
+ +
176 {
+
177  if (!isCacheUpToDate_inverse)
+
178  {
+
179  cache_inverse = (Conjugate() * (1.0 / v.SqrMagnitude())).v;
+
180 
+
181  isCacheUpToDate_inverse = true;
+
182  }
+
183 
+
184  return Quaternion(cache_inverse);
+
185 }
+
186 
+ +
188 {
+
189  return Quaternion(Vector4d(-v.x, -v.y, -v.z, v.w));
+
190 }
+
191 
+ +
193 {
+
194  return (*this) * (1.0 / v.Magnitude());
+
195 }
+
196 
+ +
198 {
+
199  Quaternion pure(Vector4d(vec.x, vec.y, vec.z, 0));
+
200 
+
201  //Quaternion f = Conjugate() * pure * (*this);
+
202  //Quaternion f = Inverse().Conjugate() * pure * (this->Inverse());
+
203 
+
204 
+
205  Quaternion f = Inverse() * pure * (*this);
+
206 
+
207  Vector3d toRet;
+
208  toRet.x = f.v.x;
+
209  toRet.y = f.v.y;
+
210  toRet.z = f.v.z;
+
211 
+
212  return toRet;
+
213 }
+
214 
+ +
216 {
+
217  if (!isCacheUpToDate_euler)
+
218  {
+
219  Vector3d euler;
+
220  // roll (x-axis rotation)
+
221  double sinr_cosp = 2.0 * (v.w * v.x + v.y * v.z);
+
222  double cosr_cosp = 1.0 - 2.0 * (v.x * v.x + v.y * v.y);
+
223  euler.x = std::atan2(sinr_cosp, cosr_cosp);
+
224 
+
225  // pitch (y-axis rotation)
+
226  double sinp = 2.0 * (v.w * v.y - v.z * v.x);
+
227  if (std::abs(sinp) >= 1)
+
228  euler.y = std::copysign(PI / 2, sinp); // use 90 degrees if out of range
+
229  else
+
230  euler.y = std::asin(sinp);
+
231 
+
232  // yaw (z-axis rotation)
+
233  double siny_cosp = 2.0 * (v.w * v.z + v.x * v.y);
+
234  double cosy_cosp = 1.0 - 2.0 * (v.y * v.y + v.z * v.z);
+
235  euler.z = std::atan2(siny_cosp, cosy_cosp);
+
236 
+
237  euler *= Rad2Deg;
+
238 
+
239  cache_euler = euler;
+
240  isCacheUpToDate_matrix = true;
+
241  }
+
242 
+
243  return cache_euler;
+
244 }
+
245 
+ +
247 {
+
248  if (!isCacheUpToDate_matrix)
+
249  {
+
250  Matrix4x4 m;
+
251 
+
252  const double sqx = v.x * v.x;
+
253  const double sqy = v.y * v.y;
+
254  const double sqz = v.z * v.z;
+
255  const double sqw = v.w * v.w;
+
256  const double x = v.x;
+
257  const double y = v.y;
+
258  const double z = v.z;
+
259  const double w = v.w;
+
260 
+
261  // invs (inverse square length) is only required if quaternion is not already normalised
+
262  double invs = 1.0 / (sqx + sqy + sqz + sqw);
+
263 
+
264  // since sqw + sqx + sqy + sqz =1/invs*invs
+
265 
+
266  // yaw (y)
+
267  m.c = ((2 * x * z) - (2 * w * y)) * invs;
+
268  m.f = (1 - (2 * sqx) - (2 * sqz)) * invs;
+
269  m.i = ((2 * x * z) + (2 * w * y)) * invs;
+
270 
+
271  // pitch (x)
+
272  m.a = (1 - (2 * sqy) - (2 * sqz)) * invs;
+
273  m.g = ((2 * y * z) + (2 * w * x)) * invs;
+
274  m.j = ((2 * y * z) - (2 * w * x)) * invs;
+
275 
+
276  // roll (z)
+
277  m.b = ((2 * x * v.y) + (2 * w * z)) * invs;
+
278  m.e = ((2 * x * v.y) - (2 * w * z)) * invs;
+
279  m.k = (1 - (2 * sqx) - (2 * sqy)) * invs;
+
280 
+
281  m.p = 1;
+
282 
+
283  cache_matrix = m;
+
284  isCacheUpToDate_matrix = true;
+
285  }
+
286 
+
287  return cache_matrix;
+
288 }
+
289 
+ +
291 {
+
292  return v;
+
293 }
+
294 
+ +
296 {
+
297  return other * Conjugate();
+
298 }
+
299 
+ +
301 {
+
302  InvalidateCache();
+
303 
+
304  v = values;
+
305 
+
306  return;
+
307 }
+
308 
+
309 Quaternion Quaternion::Lerp(const Quaternion& other, double t) const
+
310 {
+
311  return Quaternion(v.Lerp(other.v, t)).UnitQuaternion();
+
312 }
+
313 
+
314 void Quaternion::InvalidateCache()
+
315 {
+
316  isCacheUpToDate_euler = false;
+
317  isCacheUpToDate_matrix = false;
+
318  isCacheUpToDate_inverse = false;
+
319 
+
320  return;
+
321 }
+
322 
+
323 namespace Eule
+
324 {
+
325  std::ostream& operator<< (std::ostream& os, const Quaternion& q)
+
326  {
+
327  os << "[" << q.v << "]";
+
328  return os;
+
329  }
+
330 
+
331  std::wostream& operator<<(std::wostream& os, const Quaternion& q)
+
332  {
+
333  os << L"[" << q.v << L"]";
+
334  return os;
+
335  }
+
336 }
+
+
Quaternion operator/(Quaternion &q) const
Divides (applies)
Definition: Quaternion.cpp:126
+
double & j
Definition: Matrix4x4.h:137
+
Matrix4x4 ToRotationMatrix() const
Will return a rotation matrix representing this Quaternions rotation.
Definition: Quaternion.cpp:246
+
Vector4d GetRawValues() const
Will return the raw four-dimensional values.
Definition: Quaternion.cpp:290
+
double & i
Definition: Matrix4x4.h:136
+
Quaternion AngleBetween(const Quaternion &other) const
Will return the value between two Quaternion's as another Quaternion.
Definition: Quaternion.cpp:295
+ +
Quaternion Lerp(const Quaternion &other, double t) const
Will return the lerp result between two quaternions.
Definition: Quaternion.cpp:309
+ +
Quaternion UnitQuaternion() const
Definition: Quaternion.cpp:192
+
double & e
Definition: Matrix4x4.h:132
+ +
Vector4< double > Vector4d
Definition: Vector4.h:107
+
#define PI
Pi up to 50 decimal places.
Definition: Constants.h:6
+ +
#define Deg2Rad
Factor to convert degrees to radians.
Definition: Constants.h:12
+
double & f
Definition: Matrix4x4.h:133
+
Vector3d ToEulerAngles() const
Will return euler angles representing this Quaternion's rotation.
Definition: Quaternion.cpp:215
+
double & k
Definition: Matrix4x4.h:138
+
Vector4< double > Lerp(const Vector4< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector4.cpp:287
+
Quaternion operator=(const Quaternion &q)
Copies.
Definition: Quaternion.cpp:102
+ + + +
Quaternion operator*(const Quaternion &q) const
Multiplies (applies)
Definition: Quaternion.cpp:111
+
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+ +
Quaternion & operator*=(const Quaternion &q)
Also multiplies.
Definition: Quaternion.cpp:131
+
bool Similar(const Vector4< T > &other, double epsilon=0.00001) const
Will compare if two vectors are similar to a certain epsilon value.
Definition: Vector4.cpp:162
+
double & b
Definition: Matrix4x4.h:129
+
void SetRawValues(const Vector4d values)
Will set the raw four-dimensional values.
Definition: Quaternion.cpp:300
+
double Magnitude() const
Will compute the magnitude.
Definition: Vector4.cpp:38
+
double & g
Definition: Matrix4x4.h:134
+ +
double & p
Definition: Matrix4x4.h:143
+
Vector3d RotateVector(const Vector3d &vec) const
Will rotate a vector by this quaternion.
Definition: Quaternion.cpp:197
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+ +
std::ostream & operator<<(std::ostream &os, const Matrix4x4 &m)
Definition: Matrix4x4.cpp:620
+
Quaternion Conjugate() const
Definition: Quaternion.cpp:187
+
Quaternion Inverse() const
Definition: Quaternion.cpp:175
+
bool operator==(const Quaternion &q) const
Definition: Quaternion.cpp:165
+
double & c
Definition: Matrix4x4.h:130
+
3D rotation representation
Definition: Quaternion.h:10
+
double & a
Definition: Matrix4x4.h:128
+
#define Rad2Deg
Factor to convert radians to degrees.
Definition: Constants.h:15
+ +
bool operator!=(const Quaternion &q) const
Definition: Quaternion.cpp:170
+
Quaternion & operator/=(const Quaternion &q)
Also divides.
Definition: Quaternion.cpp:152
+
Definition: Collider.h:4
+ + + + + + diff --git a/Doxygen/build/Quaternion_8h.html b/Doxygen/build/Quaternion_8h.html new file mode 100644 index 0000000..3f5bd9d --- /dev/null +++ b/Doxygen/build/Quaternion_8h.html @@ -0,0 +1,134 @@ + + + + + + + +Leonetienne/Eule: Eule/Quaternion.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Quaternion.h File Reference
+
+
+
#include "Vector3.h"
+#include "Vector4.h"
+#include "Matrix4x4.h"
+
+Include dependency graph for Quaternion.h:
+
+
+ + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Eule::Quaternion
 3D rotation representation More...
 
+ + + +

+Namespaces

 Eule
 
+
+ + + + diff --git a/Doxygen/build/Quaternion_8h__dep__incl.map b/Doxygen/build/Quaternion_8h__dep__incl.map new file mode 100644 index 0000000..6c700c6 --- /dev/null +++ b/Doxygen/build/Quaternion_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doxygen/build/Quaternion_8h__dep__incl.md5 b/Doxygen/build/Quaternion_8h__dep__incl.md5 new file mode 100644 index 0000000..513a0cb --- /dev/null +++ b/Doxygen/build/Quaternion_8h__dep__incl.md5 @@ -0,0 +1 @@ +0219cd7956ac16cdc9c91c9605d3285a \ No newline at end of file diff --git a/Doxygen/build/Quaternion_8h__dep__incl.png b/Doxygen/build/Quaternion_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..542be950400a346bda85ee03e65999aecccfaeae GIT binary patch literal 3640 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 literal 0 HcmV?d00001 diff --git a/Doxygen/build/Quaternion_8h__incl.map b/Doxygen/build/Quaternion_8h__incl.map new file mode 100644 index 0000000..774d6a5 --- /dev/null +++ b/Doxygen/build/Quaternion_8h__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Doxygen/build/Quaternion_8h__incl.md5 b/Doxygen/build/Quaternion_8h__incl.md5 new file mode 100644 index 0000000..b35b1f6 --- /dev/null +++ b/Doxygen/build/Quaternion_8h__incl.md5 @@ -0,0 +1 @@ +634a4ab00421470b51e923cdf9e8b35f \ No newline at end of file diff --git a/Doxygen/build/Quaternion_8h__incl.png b/Doxygen/build/Quaternion_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc20f07d628ec6513413940790d93806c809a65 GIT binary patch literal 32059 zcmZ_01yogA7%qxOMMMcPXpwFOq*J=PTS}y*r40|unw6T)X=;)_CW26Tp&y<=9dpV^d7jRb|F|7~-@d#qcu$1iDUo+&9kQ3|23Sgt2JZKRctU}_{>yd3G!2(7Z+ zPINwrF9{Y1BfHO!c?bUM{xBNK_20ig*ISZ||9g!;O{jzz#q$M(?jgIM#MT?-z@vsKt1~ZDxNO8yT6H{&aN(%s2aY5(XtV z3kV2&JliMVnW+osdcxno-$s7;cB0JW37uNV!AfuGyKX$4+K;~-XWgO=tnYiiFpLso zy~B@oez?{Mi%@jo`19vaQDtRoXQ%(4uMa%zE-y}Y&aO^oIo!^fVV8&UHKWDDDdel| z)`kpv5_u#CGo^2-m76}*uC^0bJS!9QL8p3x8bzlru+ozNpFh(lfJ@F_o*lr;645UM z0|U{}(Gj0{MyK}X?b{cU(JzhG1~P_nlpkPYN55)WUtJZ0@2s-lc=q}8XQ>3vNQ=pe z{yg>9mebYEbuK3iOicRoO}^Ro(y-^N0~rtC!na-_ z(Oc)>9i7R#bMM}3r~So;M6g}U-#G9+UwAe9V;@|e*{bAgH1{NMWvdmF94vP)G z_a-(E41{ILChhMpNpjk)?#gp*O_U3Yic%htB!nJ3=W{2})zyWy{|Y4)Wp~)bLE^jI zy*-?(YTOclOTg#OZU2LmwD|gej>3Bta^Z;Oa_+%n_d=kWN#mmBgTiqRiD zXzc9`HW|#6&y>PNeM-}`+MniheaXSk&yOS|ENs0q!-L0aE+!;&2Z>xV>hcFYAt7Nv zK!8GUI~DvXM>$udP^XUFc3G-I|L*E|DP?A6=IZL@jjCTl0wIgpNcx-4|BX#dU_E;D zJC4nYms3g_r9*O@;msaUPjUE*S}FZ*Px?5E~EAub|*11qDU6 z2Rvqikoe7X?uvkl=<$OGp2<##62StWe)Ijo_=+>0l$4Yl)sxNHh9nYUKiB=3QsdqM zh#@2zmAr4hzV~NlW+32byRAiopWh8zVRxkt+TH!&etl-_e!fPD$Nc_NeLb(s@uoPT z$gP1xDMMxzq^|;@+ZMX|=H>wk*<{Sj%q%8|eg7re9{B>LDjY}T(H)i_8s#)M*B7t) z`}=F1k5JjzD(!+Mu zlKJ?NT{%Zd@9(eAi=ENI8>5B)o@XO!R8&-+TJeAIDTnQ;b|@I~R8KB<8!^f(r#X*) z_BQM3>;L&7pLTk-lH}{>m+E}9uBNVTeQ~@s1fQKvf|V6J?&##G76$qIcN!ZgN1q+6 zl)~?NV-N)iq$JCyi3AXGsaR}1@O<&=D_N%T11Bk1iin5^oo0m;ZL~o3&z~WD9_|E$ zgo8X3Pzv-Kz5ASnLV8CW&u2A`JBd@oD1TJ>pB!QB$48{<==yu!%}puP4d2}r zd^5t=!^w&K2{m%v4LNu;ON|kqgj6;p;_zrYQ={yCztm0+Es6kM>W}D^1V>Wj;z0 zW4=Rtfv71}A+b%!q?rW8 z^BB=87qLWxk^6Fn6)rFT8!t0qZ@4yJD};qX^&c!YAgmIUh%P8V?~I-_c&~;;nbqCY)HGPA`?#tR z>kj{eZ!kiX$tfuj@ZGqEq+{#1 zNBN8Bl9+d55wk~G*VhNZr`H!-LZYp6+q_?1YIiN6QxCQTS)4R9Eg*%4T1&+a$Zv<- z;SUK#M2BQkGkJ-A^CK7kw)9&b*=N0^LdRI3DGbrgtt zM*rc=2J*)L^LX`pGc&lmLxPZLCU$v$yt=o{@fSPA>rNg zd=XBon%I}pXv1p7+X!njA7|Rnm1I^>(~K)|IuHvYsA~T92wz-GEDW*VHX(3F#6IK{ zH0s6ky3U7cf>k!n91i9!s;|xWIp{T%3_7Di<9RMV=`~)Hy?ps^7uty7hQ1Kkt@J!F zH;=b=9Oi}kGBa$<@(Gvx3p0(f2VqoRjw;*Sug`lzLQMmuD^^gdWe^Xl?*$@zyh-5K9xGiEN6ZUs;_R$0a1Z%gftdhg)4e zpB9y^1Ud=|;njWvddKbB5X3JHNx9xe_59B5w2#bHW8W29dXF-Tm4Kb$bB=Q0 z5<0Cal|~sRmqS2`NFdYUdU;T;YEm0v*b5X>G6;t@3UP_;?)RhHsxx&iy|W%3y%E$2 zLRKOaxHwP#7B+YfCi4rQAKNb-u3h}g!0+Fz1o_*%|NgBUo2+4QIkv37C?LPN=E7AR zw6XDtG+WzPF&?B4ohZw04ne!Y?ly|zM{zF<2Xa+IrIPBy7g~21OqK96r8k7GFXz+J zWvZ(=^R&h>1RFgAo^So$UvgWUtSp|=gP;(e$5+5)`rWy~IheKcXKXCQ>mH>-p^k8s z;JGO^Vy;{j4<$K=I_R~!%I=L(8OBA&k6D7)_>fyEDe_%0#gDCaCLa=vMI^bef3A0T zuWIagoGG*QrQV&_{ZxV)h(le5YkKu0(vWJ{%^TcD38mn`m zgVqPpxw|Y~hNu#|M5y9nWK~|6U*hfd=1D1}CuHpG2>h`p`!oEjrihn*YS+A++rST5 zwmR8qAn|bLp;4v@UEaAmXGxKc`_6%@6UFWFEU2#TfwME`N9UjvsaSnPDhMz+LP2m6 z(b6J;67qZa2#1yR9i5K3s4v#nC3MMWS+cXOGc!y6tq^lPi3tbt|E1;&2&S#h&PJ}T ze&pt9m8-H5N8Hmb#MH5?toF0de`7Q$)8%5RlfTTWA)q_1x5QAKXlmMLd0gmrvU+Kb zuInZ0SI=tu&Xw;%w_yej;c;n^FEP}E8rwKsLyTC}fBHS%yH9ubsseL2tXqO-0mv$R zpPXL^S1Vh^KbE3}q5w)HD)3Hgmj^96q($tCt z%x8JMB_bsTa!0MSYNFh+Xix-tAap}=c|4x?j1_AleY`wH>x{aJbDkW|l`X2!X<6|^+5Gjj559G3N0^9zqd$?j(;eD&{S>`8R{<@fYP->k;lX35WXGiJ5>G{X6a zMj^$spVDfuU%s!*L^&W3&6b_!sDHFK*ryc*l0u}xeS^b(9VV*#0*QdciAOa`78ynh z`N$dfZafk;R;h4!FJ-5uWQq)Z2`4K8Q_a3CT}2Jy9zqEXzAZ9{u*NHQgHb7`%s)Fq;%R^XeY-7<;Lo?|n+uY4 z`%1H#DSZ@RckQ;dRK33q$*QW}GhVr7XIEpgS)_2-swP8x(+VO5>~-p0eZmLd{T=lE zqLAG*ctEn!!_zhX%O(ZNceeWA7Yth_ZEeDdihN-xTl;r2-$4u{d2F|Td!&LWViuD< zolwpfsUg{Io<>UiX*YRYTzucPKqw#xJ%Fe|cr!ZmmV-lJU;o)n$`kRh)oHF1jFii0 z7+`#e%wstQy-fxk=9e7=5D%jF-y^2eJjTF&h3w|=^zJ7G>b-g4I}Mlfk%FO1Iy}zI zZ!#1zu4~@h;+d!{q&E=y&f;Ls_3Y(lyXW0|>Se1TQ*$T+iOH0XNS-0`Su)cG-FUNh zF3e9*??U!KnSqBSI+&@Ptx?WQ6Zs`5D5fSf5qf-oGCz5Nj+Kj?^Klw zwMH2dy{1YuS3H4%nP!r}*ZtS1h@j8Mk1DpW=p7ZCzb)MTLr49Maqz;5oPIk5R0QOzWQ&&Vn3w zf;tI1jGxkLM11>(QeNS7ym{Lj{fbbsGv{XwM#h_4dt6eOLv7lwsWw#(TN8{ni(*xc zeK9}T$=R&xGc?LmpU`H;Ci=(3-~eBh8Ct=|?6|G9J~BKr@ih9Ck9?{Se~uC^y(85c zr}H6IVq&7HRVCD#kItNoACmFW(Jjp<7QaDrDo+x{+@}dOU$g;?_j_hWXPd#Me0O)3 zK%6x%FOPY^HudFn4W&Zzr$iOmh=6b3`ov0Z$u+nOL#1PQ`w6~i`{T!eUwuW%B0c0N zPJuY_Pww3M5?4xS(!+(USf5?u~qk=c9|`Kv7jypXWRy`-|=P|K61*!xtz}E!5$uFdrvz z#QB50STUMyw??u#we}@NkAHJ>WN%eI22mmk{*iTG>>}vYW1yl!^@@PYU}5h5O9@r1 zc9G}$W@ep#e|zycX~wZy-~f|WF<~`UL=1oFP{BvSc+UOy*QZ+%G|GMo84~@KR=SCN z9*J8Hw*FK5oEafxzCa|U$Wi@tzp9>?7=9+~x4N*#;r*SZvky^StM=6psW8jzOp!SW+!GnL4CH|@QH2N5tHwkZphg!D02Pi3E~RPtt(Q8U)?aLM zK|TYAdiMo0bHuIN$ZyTfrGTTuWimvunyr_%01n9+$U+~WD-GVihkDNiNct|Y3F+`t zDNpT@sHo^m-TKS%R=8K5i3$tJP!eGv0FZ%qF?C(GQL%JNcyZ>WTjN0A)6;|NY+iL{ z-;tz?!B$CJW~Cd)@5TCIv5g+_l&1u-Z1Rt{CMAJYjjitWy!#-%+I}PRnv0iLhekOk zqRe_h1e$*~uowzJIA#E!BaR?-Go@llh6{Cd6=)*E$ix*+wx=_m(QAlRTFpiQ8B7jz zTYG1xB)nBpR3v6WDGZDW89qM#8W0ZygITf}tQHeutgNirm2q)#lE66)#J)C8hkt_S z-L5aIhU#1#vtcLJcqwdcZL{^8{RRNTr9%dq%>DTqR$N@1u8_@i7+>plq4FP@mDSEe z!X$Nd6F#VY#bhnFRabjX(tQXp_3Dd0+)1z=3?cLqdGywR$gGaxllVvbF z?W4n&QxE+1TI18<$5g2DH6+FElqlH)?owP?}s3@cXdfQA8)Ex2e(g6X=xPe3$HgQzT8f#>GdgN9B)G_90Y<` zG5l8m1^&2G0+~2h7#iF|qy%|)QiCjwu6s$D+l5nAiG}-qoQ2+QL9sUds zhC{MgU!Lv_-S>es5fByi0Rod$T;cl-L?Db=k@7T=+^(m);alsg>26%gKjc2Ar;{b} zx_v*dyod2TeI|;e4r?5GIg?Qb04eiCZl^Hk*;;`(-7KK>_Tdo*1O_VVQhqu=+IVfh zu5`qGtLoQS@m35^&4YuL9ph#{QX3yq6b(r-d?&fqAVO;O5;EYwTY#SCv|mSRZ_ol# zsi!YR@czSxWUQ=FK&1DV8q3ZvEFk!72rHwpBE6|9TOY@rnPR<0WZ0`aZ(^B@c27FQpMed}(uu#8%vRF3vg$qB7zI*x0fMJ1iI3>< z@9!3;A4g0Uz)c=U{( zlgyFbGdU8f)V;OURR;Yg6nN;o8X{|RbNt=kS=OeiUbnQg1Q78hrU?2dB){2rnAEH= zPXWH)ZgVUYmgxEu|Qi!tL7N0@6xIQk&JSvoDrI1U z#v44i&ki>F(^~O7J^vssY!mULG=)4YOi8QZ`b#+Fj`e&KkLA=y3577f^XBjO53*)jCnmo8U=Zo+>813KVPV;|CFy4L+qzy~RxkDz4yj!Lc}~D-7a#jN z0rzz#CG;#+vkPi_#GEp)iMF5e<&HK9397z%e7UuoG@s}Vxp;_7O#a!+@*;^%m7r|8$l z+mCT^MbGw|fmx$~xv+7dgeF4*H`CRdL=5|p%NijbfhjS?+XpRy)B1!xD`@1HOy7ApSJtZC!B?%4Zw3JzDhpXh9zJ*PI zS<^Uo3o+556Q1|aMoJLQ)KZJ7sS(fA(S9o^@H;=!HKH*Q6YE==Yn&GnU1|M8LMGW8 zERpeoES(`kqWRtGl%C$#k4GJ!CdwQ8+6`w{uP&PJqp|#IqYAQFN~KaD;~m_?!@((n zDM4yhRuhQPgK0+(n}g-o6_$kJUda0FN~i14Z77>tC_XH87|0}`Hub*3^tgF@cyxe3 z<#~BIgC$1xU0pP;RVf6Rk01AznQ(D@_=_haV*!{0S$n!GxY}aeCg|&fx}Pp5(R8i* zC$rbU&-xY@6K{-SWUAzss9SE>A|j&h9ET_g2`J(!rvo6uP)$c)`jp#S~$H6`75aU!Sc|SX=wT6!es<#@lX9KQX(h1=yg{cUvvLl96atkF%T( za@75(8FtC@HD4{Q_M6~3TM_}!(9#mi>xNhSL9b9M0h+(7+wIe<6UEcBy9$+-P6UMc ztHYfnk~@V{>sJ?d2ngA1_Vh7zlHWa{N{-Grwux&J zA~$HYTwd+xy4-7Z96yi0@2ODM9r!=J08xPJtAPmS@VF+fufKJAI<>sFF#6<`<(tWh z@}i0YX}ASyovAn541?t^Cq@ADgr}>Q)EnFxU=Zk5aaosOeNnZdcVud%lE0rKcu!F! zZ#8<(KaF#$<^)T3b~2vxX&VsjVq#*c3K>{sR#p-|=$Xuxm(t%K7=75)M1Nk}QelA& zrHNid@(eKvX z5j}Qe#1=tTerGA=J^2eOzufa7iepR4P-ApMMl)>z%AZPMaYJ_^UnwVsb2z-trSR`O z)3<+Qzc?l{pqF*b=g%A022b{Ykf}VOCm~%J(E9S7^-5*K`PDToFRw3z|LK7&pEsIW zI|iSfs$|!?6stl!$H6D-g^J{?tj214bhw|uiHV*cCp(XSx^irVsQval`=Q%F((I4F zd%9<~J$3*0*iRJgn(u@8aZVNU0RgVPf4=INLvC44ukURXx>0E;@%WDTJrx~mxS?@( zFJ-cCNGE#=&7s!$X*=JIRHj&{=eQp!GqWF1PDOf+;$-(XxA0$EYE7C`)=tQTkuCSm z_O=9Osn^%Oa=T!Sf@UMf7HV#&jM!qL{Qxbo)S{Xl)W2BM=uFHYXt=aVt|{w2NQFb z#NK63zxmK)rk0bCGe+OS;`@?L3~<0q_BoUi8DSZcTWe#*L7a`o>q@dPQg!wu7%;ib z78Ox(+Npi6a=OcEN#IRFE2(r%3cXCW*FR6wF=BUDt=h4$HC>$WbU998+)^`+UibP{ zPtOdUTA$ZkBMYAt6$(cikJZDVoc4v*LJrqcWFPeDzb%1p{hrYaWy#oourc+IR6a5f zjO$#Q^{`?x8E^oq@N?yf68s=`6vNdwH2jq*-FUWu!T0RtA($F`^0YTT`HJ^kqRLpM zW|i7{aN6fc%E{q?2!;sVq3pyTN?4hhOYg@^I8{`JUk^<_1tqDMkH~OiZozDCN(q&DuMy)yTuhGXofHBi-zk5@gRi>_fZ5g6a$(6np);CD zvFr!$*5qiWW~DQfCB+RN(Sh)Ybp5q~25V~$k)4@mm*=@WcONV(UN|uim+qxNHZVGu z-P@UIp5L4zGBZ;QOxT#Ii{6}Zi%sBql^MG_o+j$W%p%A81X{p&DF!f;-R#Das&E5l122~o9T4lqR(jq+hX~48s;qMNo$<$h6o7Yx4a!iFc`Of*U43I! zHYDRn--3dSe|z3GpLR~vYt&$}(qY?QQI&0-E;XJbVE+)gHTi0HRUSt<7Y~RazRt%y zN!(6eNxJ)5!H+4ov7Sb9w`Li2t}~nLqp?|XFZA-s0`trP1hk%E`uP237PB7xo_NcL zctdoZ7Ghyw*?1n$b@GW+G}G{7q|7_*+S70L8$ojmw)mj21Q3j`=W4Om821_>BmysF z7K6DzI;OaZSa)!t9}9o{_|OOAq7>TTOKsFtpsLHvR3E@&0YT<#;>_rt(J~aiFZVS8 zEimA-x{3zkQQ-0D%8=tzBcuh32^mC0=WhI^3qBAPYO-1FLj$t1X{j@qS|txtyE;bC zcvLR`u|jy5(w#fpt*tAp5ONE@z2uN+l&JVmwvP}+z0q5_M0s+-7O1dn9XEpUDf5%5|4P%3a-9NfY$pJX{<6w%na-viU#<9Yz4<+*)gg z<4o084**_-Z*|1rh7PtPlgZB5+e~zUoE^(kW9DsU15zp|8(c?M$+@{+<>l1C{IY!i z(DJ`D*#254mTLRgt+O|{qQNu7WMu!5lHUH#Rw#mKxsw&oj5>1)M_-iQtz#NU3=DiN z=u`1_d&<)E+wOrvRJY~0%`>1EAL0%Wh>Fsd=MRO(69ZiuGMEgo{`o@^%T>t*`)Fb*i)#Z-2d2{#*f$A6 zo8k)A=8hbZ3ct5T8Ofv3n`73WsTH};HeQKNRQBpviHm#%Ms>~_fQ?LwLiXxp<$Z(J zitgh3jo*?&PWUpZFgT%+F(0*-=xKSF}Q>qLO

%G>-1v=p4)1jT6 zADYDEqXtz07ya`mfkAs%1MI2MaL#p!l3@hb_@~9h1mDM%^DEe5rSFuTuDLyZFa)#Z zet!dD^Yz;|k8_mTtMJfo-Fg+nphx@rw^b}#A=mADtla~5enH>rN%Hs>+-m_N=eKX) zGL)zVVMt&tUs;gEKF@o0cperL^O4g*i$9i0c<<1zV~@BUCNBsYqi#H1Kv3^T3s@gh zs2S*my0Gy8>?glEuTsdAVyv*hk4zi3y-OTd-($G2)akf6ZX3&Y!`%&V@BK_I9z+UQ zHQek=NBGFOxxM!mDs9$>c;0mt>4A6&HVwy;y;;XZ>|sX!dOpcKW=_;TyDFB3Nx2raiwF1(EZyLRzwMFZua1D(3LGoQ4o*k zuuY=Z?AZf&00b=#SB(f{Ry>r9PC}iaDr?f1P*S!OrJN78_+gypFR(en0#8rLWD=@d zx2L1ePG;jwD4d_YvP9H8gdJiy=T@18CatJ`wJqfr@$d@kn`_!kskOEkMhlj6vztaj z@47lGcrkZq;yKYa12<6MEiJ-`dkkdHf(WBh7-_*K<}IJ5F<6=< zT%ftMx2et!bJgnF+TS$}5rfWvyZnJR9wji5H-kDhUVX$3)My&S^TX#;1ZHM~S|{XT z+L{&d20igSWv0qrEM~~2!fa+xj+5d}FJSBC<*mEotNgDn3bXBrVr0c76y}y4;&nZ) z?%5vr<>^fGiTao;xT;MqEVkEVU!2ssU`rk>x7&&^Gj>skW8Fsn`H0~1nbl6V2IDQR z7k}?UHW|acMbK*^N)s}=xnF(#WwDXc`}a?-E^4p{2|-nkDRfs;Ydf;BD%peSa-@(i zC~HOd;X~9uaK-?6c(CXLR^6a%MV_+@D-R0klI4pXF4OK3ZD~sUn}k*My6XGj1Z|qB z-@~SK-kz}cRWEf=%-1l{(!Q5_RcE_1BMAa*OP$Lr+jKV4G*Heet@v7dUxj2y-iTx? zrKF{WXU11&7%7*NZy@%{V$x`AVq_s&cXMbUlat%+98sW(?Ke1JMGSWDZ9%^u@FU|P zB_YwrW$z2benm1??`BuwF!S^dTBloki%)|DnBEYRy3KSUmOW5&90-pKCuflT26DDh zr?vfn5b&i=?1*G)4f5x9#gPCEUtDeh`lK|IcGCtlx0ZmtziWeR2ywSi=h=9WY)07W zLGL1uCdd{(r3Xm)T4;cSLs1$Sux# zT)ftA$|TT6kCQLd6+IZ$%|c9zSdSwQH%7m}xbmYs(Kk~_q=oT)2p2!U9;mQ*|C|+M zC`n;1VSyN}nr0((jjLc^t5r@wwC1kZnrzj=|6acIvbFQo6Un9>|9J8e9{HlDCMeKZ z@8#X99avg>3Wx*ol-oxP8z4ClvuQ8i)#~)5XS4rSiIy%fcx^92vq!9wr_Xcc5;BMk*JJH4Y63#D0Bg8&gdbG?7jhcePcS2K`C`stqn* zeS(T^)8ogH0k{jleIGlX9rWs%&OVgIED`4lM~jruhYZP6v;IOUt1}358qCNsUrhpl*IVqG7U6HBRCUWMmz274F3VVRWQWR)>EeQ<^?L;liz? z!yIg6vV4Te&=^$;pT7avZp%Ef*=EUKC_8*CCZ(iMSKWRikxjXye=$4lxY9j&(r{(` z?)_5VY*sp93ya?2D(m5D|C^043Gpznp%XoSZmd?EN(8k7VIo7akYJTbs_#t|);Yc4 zOVebt1p`iAWcd1GNJvOiFQ3a^D^b>m4@F>=p3yiVk523*$A6_GvPf(a=r8uTQI?YOW3n+cLw@)^=c%N# zB8>3}6xZmjNT)sFbL;kZgnH1HWX|pUqy>cXz2kb}8i(>2j#B@TVEdJHa5H0geyAPsQu~W??zv)N zVr_FyiNxUDx`C17pQ1qWf{$JRCRO11?*P30S&g3Qax!(4=)IWmb$VL1#A4D3fd!`> z>2X-|GE}xo!G|mFezwHGciEQ!%?wUJgjBXin}Y#vesi-sQ#$MHSku7$vR_5Y^c=%# zM^h^PX9DU|zlCjHW>s{`3^II32dRYB?6kCB9XZG_Ov5Pz%YxO6@$wC<*Y7qn!7PxP zIs-$HqWgKaXn~H+bY`~#rz5KY`0nudMt#b86uh;7>04c=0Tg?ekn6j9NqlvM%LS`< zApRAU+QFt)%7NVIyO4|J%ca%UX+*$fHG(zLcG)hHi-341jB;2YIUZreoD_svio~!% zkvy7_kxT@Mr)u#U6F=@348_*AT>N5UcMyK5j){7rwc!GOIlT zYz^o&0kAc6_Najje*`_f(%aj)=bN~`dv4DR`wd;jit)o+#dqE79UYOPATubAjk9z` z`o6gI;4kcs6YVQVa22jVI9R;AxFn;G`BUWnu3)$AEjWG)lF^(@v)}lRgJ*i^$qOS&vAVa{FNzc=oDd&`+X5ATjLqziAn;*BO*qn24e>Brm=h z4%fn59# zaHg~FTpbyb{BSnqIgCBdMjkT_eUfvSDz8r)g8{)QuTG zDtO}-C$=wjT$}#>#{Z#N$sNbaVS0suKbM;vYe>5EALz`t^Jj?!WLA3l47*~wAw|97 zCgs*gN9)NWs2}sx)mnmC@aasQzjVT?iJ9h&|H5h&`S`bh0H8;_{$E@u^MZI|>}w1# zaUcwRd73M47FuTCGfZrDTJpcLSIj0ew@^h$%V0-g;`ZGGs{f@fA}QYfc4anIA}_BH z73s`giRkO2Lb##5(I`X7iYl$Tep*}bX*wxSTh6$)e7a?+ly4f~)A~(|kw~O%cqqx7 zO!o~>9~jhXF67pS927Ljs3rQZlVsWhHYIW5fnJ>*bh@t-$Xh%DpA4;1F%L3Mk z%{h<34+{hyi3zB&|3!VuL`^tBbwmIdu-F2LIj0jD77#u~?B9DMwN^!Ca!t0eAOK~3kx)YSRi!`e1*Pv6G~&HzKG)b}CcR_9MU zvmU~;^#wTi*m{!{@;JCAvVoX$xoIZr4T#~48}4`s)W%lzU~o)pXoV_=~dh5lAtl2h=s zoCguOAS~soULff3iSpd;lUc{MPaCL6`mjs}bsxJn5NZ=;ephmDtxOjLesZLcMtdBZe>$gtUh{ zViF~_g^{}f_o8Ta0mq;W4&P%yKjWTsXvUic zKwH~MnR!(V7~Is$epG5q2KoA~Y>wYUs3ME)E+8<%QK(BbHKmpbPN#a&WElW0&_6KF}fkYmjDWX9E{-!xMg{jEw8~5pPtRr2Ky408SZTCbr<9o@r=fW%Z4nHTSjPxg zT*+P>l;ZUvYQzZ&=4$g}utuMs=puya#6$yLjtG!HoBXlol(I=E&L6}^)ftk~(fPSw zX+Z)+K{Hz%Kf{%bzLo}hDs%h?tuX9_VwSVb=`Py;0H+-aM1NsMzc|(=CLytX%=0?O zVlrc@?gI7naLRogBnxoh3r|y?T$EwCV|(ntUgn4k*4?+1AYceVbiz;2|S% z)DL#pzw4ar(~M4Rm5+fnE;#Op^}(2ZyV%wswv(3VdMlhtOD(B0+9Slx-cy2H&tL&u zQNlKK#L^N9k1%%$Ko>kcz4KvXRqh? z(}G1Y47_pKS6ZQ=I{<7G0LvA*UBJ1`>l59Q zKdYA$AT^gGr+h`;ae?h<`l7f+4-Vcla5&(ayo;Cx81RUc6~TiwTrKam8ww37P&jV` zSx+e&M(OOZ@h+&&%^=WRK1u71QFSXQeXU!Q{zDat?|=~lU))=(*)QOPds#<_ z9o+_^(g%AUkvLWs5QnUSdM)asF)U}@e{YU!^J&bx&ix^EKDiF`M$1LmxyyBi z{`^U0V7r+sZ3UWy$;sv($P~#H2k%-z9VjZ*^g;OAEAkQ-Ry^PVlp2Sdxe)L;`-Fs` z1Oz-pa8@9#XIV^YaGWPZmzXyXiZboBucKc5?6fx_7L^hz#gO zIT~el4vS?FsX%Li6EBSe`C+z)^_!g`&YJo@Pi z$VkUqap2oPuW``UU+$WYiBtVGY%dq2GX<92))YZD1ak|zYXr68Lr^Quk1g`{X0m{S zct7->zq%py=+JI$VweET52jozkU?q<*LOfVS!nXbHEEeH)N=ZhE;q{?bi}b2)}Y2CCS0kb|8$q$0s&1$pq`&92~yRQG4_g2NZG!2H#wLrZMl#6mWY@&;cx7YDIJ6GS( zT4vPS94)k383De}-WkSNf-(Pxe10sCW{tyLx7`;J6&BGY`oes`^MWHO`~S-|zY;Zb z`9Dy}frE9uZJ}}OZs%|)G~h~qt_;?<&|)#ypC$+LEPsZ?g*u#QEu-Tp7bu9VG9(31 z5<-lRg7WeAT;uG@c*^5XpFUyRZT_53du8=i0KxLA7bP2Ks>O>!bBx z-FTsMAO%6^P|07Mt-dO3=wWc&o{`lV1EW*h*5rd>EKL9n7892ec6M6p(J4Ve{~?Y7 z@wo>>{a~=taRkaQ$38brr_Rst@-$!T=Wa+k899+VDugP+WD7%F&KAp5?HOIE@s2p# zI2_USks6k5r-qX>2=l>f<9B9T-i~le27VRV;N4FfY?;2+^JIb493VJ>jtvx<&ZBp4OU%2QGMh54*=?I-y<;j!$3$6Paw6^Un0P@D`uefU*gERQOBy{T=RcWZj zgcI227aJxX9>PMNWYxJlm-JG5dxxkC#;kGB z!{_E0q2(gTzfsP=jURyYb z`5x6gY|ju$8{KtW#Y_(5Y654z)K>p#2plPVOi^Y$!F)s~4M!2bR9JXit?s}nC#Lsu zw&0Y{jym|E35;uZ+$;TgA+wf1GfGEx-E;-oYOx_36aN@Wj)@m`*XUdX>E%y02A1Ebg5hpE|*f9rBK;xi7$(~ znJlIebGvimxEkxLaQ>%1jYmvOE>(#}p6b_78NtkqqGIsJLceij>aB zYlC7V6G&^g3~zbd-B0+OgN9hDHluaX=jLrT)3&w6+^@|>U$)LQhL=@%8pC`<$Vmql zwQkCAG$d{9yB8<2QYW4vxM5`SX)Sah9NyTX6ZRy;tY;^FQAFurZ~7)@-OKMxKmvkWKmRJxE~^elqm8vv`$PCREBFz>4Pkb;fR8ZRaNlBM z!CPVjt$bfj8;-ZRX#6&|Zl5~h+pE6`C8?uQTlIV4>4_)&J5eYAl{J-0-~0^MU_LJ7 zeSid=nz)>Pp-=!`ansm?7bq&}*lTq=+qE8;tf>zaDsG+FqTd^ftvZkzA2;5as=`LA zR5&~uw%!=gV2CYI_Y!Lha0>t*ZlRS)&}-w=VyjuSFFvneXj#25T9pzID7cYK`{hSD_bfV7A^0cN=IDc)^k_-4#4lgo_Cm(B|9N#kSafcz_yP$psP}YlB!*?<%3a*B z|JUd0v6>SrDq7mNeJ@B&d`PkEIMFmTaz1=ufO!V<^c>wQGV-~p*@pF=KKGwLmMK4e z?AI;f$wp?$mRhe5364$R38<=`S`_v5;s3N=5H4L&H6XD*Hm5^=xQeEzC{0D%X|O5> zevpm-c

m#qQqH((qe`)tyL19i7_-27wfWpB{a|?57_w9~wPia6J`a=ZMwojFKhC zjp-7X=xA&U<*QSD+OE$ir`zjQQ9;uZTIIcWWE3B=Z@)owFnB}00ET@ALNUf>V+Zn6_JKJc;oHeQc3AtB3DRjJDQ?TJTB z7P|iSx&U(oRa6-NyDchC^CGrsVeb*<2eI8-eQHMU&GSB!ONz|HQoi}B2k$f_J-m1C zaf&apusq8BDnIqoXdFr+~f*T47VO~{Ejr19zq!;!%Lbs7Fucqadm3KL`|%0%uORCM&%JZ|#J3aKiotSfr*lHL-~Z&@J9~0@iT<~jZ{fRC+Mo#z zk2BIst<(P=J-YS5cH;Fhd=673(k{bJp+$!f#QE3=0Cfp+;ly1NOAze~2;#FG8NI($qRxf3^ zAWLRwXy^qc<+)Yc6JcULz6L=fh~(YB{CHrY1_4Spxu__G^C~NeLa!^vee0#;U?vp- z$3BV=`kDUUH{)Wgt9G2s%o>jV@2}2Lz$E>t-0~Z$!^K1llct|BzNzglzsRqs2|>* z7oz5@cRx)TIWI`9l*d8Wbb3}W(7%896X@*-H+XU1H{!Za8AsW2(f!%*^8%TKpHOXW zZ4p)Y2ZxrR%~%TV8>g==C0!<42J~E9xLsXcRBSQ^ZZFsg$p4Z}P8ztlj0Ba~%>AwE z9sblYS%LQ^RTm3MT|4>GjQ)v84w_(7zWl59JbDHz-S^>zXFM!>k8|l*%KR6c zk1mJ>of;#`%U=Tg^$rT!vGh`lc$$*4yN>dzGu}gy9VSff0aCE?Rhd(uqgyT=p429Xhk7b{j<{pS&=un9~4yv zIyOhMvYO=!k%>=C(Oqx^%Jy3ESfU~_Gf7!Ezv4!f2bN-^ZMw^iY_XZ~BtI&xS^8Un zjTVA}CPToVDW;@Upl*Eqp-X7X{Wc4$zLfq9`T9DZy3XCH)hpxC_5L(os4dz>(EdIZ zn8O6#79Nl78`lV;Sa}f<5uS&8ehYJl-hO_6x6W}>4i0+O-sI%O{`~n<*Hn8>dGfR- z`p*5v#u75#0{{EiIyxRgt{sX+GXBx@_weO^^u>H~{^l%^Yk#JtNJ3KV;@THcQ!^9s zEcI3QnVf^2!+VQ?^q}*TsVrlWne&a@G<6*v)T|054-dxU&3tS@L)=m|s_x@0EprD^ zBzt=$buF#n@^U(Dos_(fi~IE~vo)|GK}=(28*RbE!)U%G2le5@XxvXtH7s0Q^6}IQ zm-&&O@iQHNOt`uptP))<{ZmbJ7vp=ZD;l=VL5BS@LV{RUfY0&iSVB*3U7e2Tbz9_% zjmE1>{-+|2j@U(1ae5pEKf~ps=QEpijf`SU19RfvX-%0OZxUD-OGbCujwe~VxeYu| zvBh^{K2AFBOHu)gQMR^y7EJRxRY)YWk+0$P&mQIR|iXty7d;RgGl>ubPFwk)+H`VU}Z|xgM zXUP%0iTRB^H+#<_nM5OdFDE5F{sA}){JSYEyXsbx(^ZyIg`U$DryV`B zzB}w*OfH^r$Y~(V5MBf-1INKS<^e&bV{+P*dq#U4M(}2)yT=5tquzZ=$(u*B`MvzW z2ijTu+SKO&7^Co%l$2yT`$g{7t6Oq%U3kMRCI9>JNgI+<^_6UGpuE-5)pZ+Q_Vn~@@W1>__SxWYabdE#S!^Jk7bP<@b7X8R zI6fXPDk=(f+{w|g((l3zKIYY+4dC2w5FAS2gWeJs7cVO>?-(Bb)Ti(nIIsWWzCMb8 z#0xNwGGornEGTEn@L&f|PU zOe%Q*oRMc_V$uY^`UA8+-T}pP8<=s#(Om^VrIOQm`cw;;V8yy0jac=D78l=Q-MQnS znHn8^M*zrYY!4r%DS>xF!y%VN&O1ChVvQ;&qm>C)2bL=7z`sBLCMPG8ArtIz{nw+s zwl;aT!Ii#i#igvdxmnlwiLNe*2MDMM?uLA}9}WocG6e39S}euGxbNS;7eMsS3VciZ z`3BeEEyUX-BoLfzj?$MmH)m%)c!pbCP$12zSNV#KgQE!YZi;q*W@T2(_I5Tl;!2B( zjLaVx7%2M|f%lMg9JH?*VS#n@^%cPuHDEIk=MIySTRx6|?C&rB-`L8^%2Y4Q>t+oC zlsDXchrEE#rDSNB)d;xuu5~xWQvsVzi<+8R+s%zn$G||TLa!>gx~{I+Tg)WM+E7G( zSNsp>*5+kFNy%Hjho&;Si~e61tldfE+5oI^75MS%+hHNf5dEeFHZmX3bL_9X=-TX1BhLTO3eGs*w|Qso10ta2j|{5 zv_EEQp1sS?ro=+JOF_Y2y}opk@1W*TyW#C_=^HlbXzTEvj=5AjnDvPkWGaNb{!oHO z+(>I+VA;EO?Zd-(u&>Rk^xh;Tp+tNO3J$&niTnfDUk?o@;lAJs*SwwCx;rpQJOTn; za6->fA_$wjz`t`5qV&61PXi8o7mPr(I)jf{SQzvJ=N|zR@a5Sb9Djd*$E6l3QZA!M zYHD$2EudHkc~ojgK?)F3lb4gb4RURxg^%%|B8pD`IL`5Ku$dsF{Z&N;=dD|}T>i{| zVH&@Mg0ix_jKs*ucz$_F&&`cDGcz;TJ)08u7#7BG_)K0om7^Wli|uASZ!$6>;eF}& z`H6uDxa=Y{U28{V(i#xk*;%qnW$@pctTJ#9L)QMYP{37-?9|*0hh8NT0RaIE8(YU) zao^>=y`|MF&K&fPX8#t<2SBpsFm0g(X}QisMrGg<6WBU9+$nJepdyHdrSmI#KTf1F zHc9_%^5S(II7BkCV@JN1c}2w~CBf}xZ9je-f3<^=2mxOnnB8GORW*ladL8Z1B6$O( zSh&f^XdSgap9)L4qy=*D-gRz9#>_7_D}8x+v~(3F5Zpukl#!8vSt77K@jh+Y88#~m zgp2z6U-}#-CMJUaJ$WmJ2_kEiGmay+{NO@c>h~5UBx28umbli8jkmmO-PP(({G6@K z_DzQ~Sy@?;ActZM-wMBZ$gq=BQfLJP?mqe*r(qc1ROELUi2?-PkcNgByy1COJ9~Se zIHLpv1eAUF(3#F_89FqTdGsi~ez^V@hfxE*ot<4}U0qmHQ`7PZcv}lNW8eUZ&`S$^ zYWPW5wg*F1Fgsf%A;&m4IXN!YXvPGlZ27?3`}%L)$d-wTNrU?qA+?w{5-=ef8XF7B z%gx0Wfc#@g-6UB2Vv<5{CPj`67}^t66C$kQ&@0ZX>M z_Oy3!5TS6_a`B4-j)GUi8}vd#WJb?>W>G!r)<(yK7gCSDj?Vf2BqJveRx2&c%R?fT z6Sz1yJS3dsO(gd9l{wxj3?pJzkQq&d4Yme5QLn)ze?%hL;01N-&dSQSh;%U@K6?j;F3%W-t+jacwVfHVcMl!Ythut4e z@RldD(JO?PLNT$hq+!FtW^n}z0VzFfOiWCqSHN@^RD4C@JOdVB0pq0854gFyAQQ0H z&az;VRkp2ew;Eg7w2g9@GN3lm%SO9Wl?}|AFhCafVa2zBS`Q9 zw^+z^HFVkM0CY0fK!OzlMdI32iGV91Ha0dhm@T044!jj_8az0^xG)DPzD`a8K0Bw!-6&FMxppwB?{LR&~_`ePG z_Q*ILR2}v7^xD84zz&Zh-)_J_ICg&Mn)C!dH#nzQN&-dind}b3H((XlRys{>UY5hVKV2gOQX1(*sPUl&01;vedkz{ui7r>JokKG(O}GMtXs$Srx9sr zX>sqWV+4CYuIWRI?rM9ME4;eD;#*e1cqRqvSWas_b9p5t)S!m*Uo6{PIAeu^WHUq= zRbDQ#vlJ+!d4S)EE*@~zuu!l5`lGUz*6k2<3VOc8m`G5`D(SM4QH}$zhRx&r{ zqXK^D&f#%wH)sthqMM@9${3_LBDMV*9M8{d3vLY*@)qmErH4p;)Zo59KYmJzM}zOv za~E_}DFy19x(9ATSfC3f$fPzOmm~U#j;GQoCmp;B|2^SaQ42o9uT68YJI`iDGm*zJ zMq9Zd=mlbN2+Sp~pZC=7g{ElbS=PPG1)nbei!X z&grV;g}ae!{s*IvQCzlv&|mG#Y;1deWrSlCLbo(eva<43IFd&nrJR7d&_4?ynRi7E;5m{@@oLI>sthCL0mL!j|E6n%`aT89a<+kx)aCu^x#Qm z_Y}yjfH(s+v)Z|gmX@6T0Z)cI;LLCU?nOW$conJhUM;WXEpwgs>q)z_K~1y}So~)l zGhgr|F04pz&gpfNT?tU7+V-^vyxjRr_a{)Z0+v$O=9o9g`>B+)@5Bf@&sRt#6yfjz05X|i__CK1ul zaC|$duWczXDQIREN;!9^sSP2~L`_GRx(e5TBC0W8cp!izAocZK?C)cMGM>*EZltYz zL{`waE&m5SUJ}VGp1ZAAgkg8t^ zMFCqT%&oDJ@t`Zz3~JZ%o1RDZJK5$|xo;8pon{clQ5mA*#C{f^WrKt)WwtoQD*}3s z<=wC7J@JxnJQX@cW&ggqEYrA#;-r10o=Obm#RFjR5Lh385P{R`wtd{ym77@LjXc~P zn>#wNynXk&gHY;$0OkmAb1R;V)m;jOH6#mbM(FAgpB>i=+@`z2a^$4bam z{QFnj<<|fqhsjRd$!~g|zyLBOB?V_^ur;7g3!xkIc?Df08ZPik+I;m@eYM3{X3|-8YS#k##q&ESL`(@Lq^Ra)jU=8442 zZ3hRGtBVcN&GE;|v$Tq+AyS~!NqluY-ZTA~6YJ)tHEGrZGwJ&aD5JhN-x$hh@N^Qu z#_{c#^Tk8Bau`uD0j?CjaduMDz17t*4V?+`Tov$QtI^zXShLSU!v;|z3TbvL8J

6WZ+-|GFx#Pk3~6w;mOa^1#fUpN9fHL?_dn0Cltr zDggy8ZzIyvwPEF4XJ!~7ctXGV%Z>~rOOKh;dldqH4Z>j2bPwx^O-x#sC*B*u8*}!` z#&hE0GJ#xITYJcnhPE~`_&>yt0>eUS)*beQ`Rr^t58v3PXT9d1dBqM8)Kh=j(*^4D zycVHhwK9pABqSnW)57lVKX?NCct9JC4VFtRLqU){mVDxVLP9^3sgZCW6G%wpgJ|Bf zY_W?sG4;~mcZ5Vdb3G{_56pjjACxmGhKBrI{ut4~yeWxtWE6b-7y~}tVn00RO$OVGG;XGUgacXyig?=~|W9WWoO0~xlE z+K`b7V%&ATa^?Q%0cc(r*^!$?@Iafc`(ce!F?9Pa<*Dud6|HYx>DOhR- z(-;hc#|E2u9jgifi$zkV0TN6mq<-$kQC?&-kXOLEReB#N?98l%jF%Sj`kn?Pr%Wh_ ze&Bjsk`yZsE@Xf3ArS#l4Rw~FfAEhVw^TA~Q2@6q?R`$At^GquR5qB#%4l!Veq=&t zui8`_rWy+`-VDwXqvi%mE-ruYsimu1cCks!*9XUTBtTz^i;1CwWiED)vMNjnzI6vm zgs<+9wzL&1_nSLAhwimpqNJvpt{n~Ifs_h?5tr$#IUy=-Asnm(L`h7$JhD**ETN%B z*Y&Z6fncZ@;J?Rk-)mLZJm>^NY_s59Ua3lP@1c>-VVm*JN=cDG97Lm|ORICv%(U$9 z$zaW0+^?t+XIxQ{m|X+}M=@1(0^BLeMxvwR-*@o=R*ql3IC==23%~k5xkZH{PJ`h*Ha3~?0u;Hf(0bxHLlZQ(ug=$erf2-Y-Fne+ z>_Bk!y_kv#B&{s0i}9e4xaC|dE5~SYb#CS&6xHBn&8W!V`3gb>@Z!_W7eFFDdq~2G z#Y~Ux^(akAkbHEDzo9YHvL|l%%^UpC%1R$t+n(;&z>c9m2=W3|e*Qn2hxOXC`LHZf zSXdl-dYkUER)tmm04`~@=s-2hmiS5rB}iBm<)c&2&c37@#DDB-T*PUr;7`C!#wyrW1W_M;TH8eD$_xEp; z38_DwrS)LCY_uAbe?d&FNA_?CtI2D)JBfM8a!JB8J@XW@9D#5j$>nk1#M5h)xK;1W zoKR|jQ4n2SC(xP1oKg1vw^(6-gl{SiUVH_j1`2y&t2R>pnT=IZ(2I>*=JvC904LD4 z-j6wk`%Y`?7)N&QJ?{bHgP`8a%WDVH69gI>k-+vvgRK7YFB@d9vj7(l0cIQ(%!263 zng_DRRHRRGZN7DPKbl?f8@V6Y3A$&Nm9;;<0gvLR0fQWr1pt&oFj*lQ;&arYfLGx( z;*=Cy&r9ZxP3;)d9uiySS;4HSbq7?f>A+7$0mHcvd~d+DJC8-^ZTT3U2=GonfA)T) ze?8ROSw#BdM>4Q2n1J66;UL5T5Jld7@JwVS;(keRmjyV0=ka|-mfyndcmyUo|DF&i zD6+PNno zWd7}M+q@A4Ke-P>6paW9c`O{iV1$j=6N27{fqU9rnk%9p%CJgx zw9(W7BZU8XEH6)Rx_5RvqL5{`(n`19o`wwz(*BT#7APnnw+EO``A7{jg{NmYl)J;D zl}+^wwiAAa&{$1FjOTLdi2Z!&Mrk&`nHd7eqhHr()ba69+yF+uzg+}_W=>s@?F(?& z-8(b+W>sXMR&yI3HrZ35+V;Mppa@in5rJpDb8E*!lVU@lqf>_+xq&jhlXri z-1tHw6}jyql<+$Z!R^s{WmC@f9$$b(uTv{Z!y|FbOUui#qIX!dFVwgIY zOSr@1sj?sv*bnxLUsqA!P(#CqXs_Qk$1_kAKxH@~Jv|H^Pji3Y91E(Can;r2wzie# z4s+^9yxx_(koQ-}!V7*=u)3;*O;(A!2~SUN zers<>1(1UIzL}-lr+Au97V)q62L~B&a#3Jn>MJPpN~@_s@}tk{mAr#@YqcIW1G6*X z7P>gV8)#{XbagwNBZx_Kmk}->;0}iMY7uE^vAvU=cWj0iD?R`)GTM<<;8;;sbgWX-C0zpo_paJP^Oi2*JsFA1j` z3Q|$=-BpM@#r)EPqe*kkE>GF>Sg;^4hn_BGFmOHnt@hbjq{G9X`}m7o^70g* z8nf>$w!gG3AJKokXILL3g_jUGO(o(^DtYBX9e7=L^_4scrlQiU9hrsgJCMzQlP^MN zT+flt--kQ(Q5+?A>FUgYBsvn1BO)FJ$X8QcUotXCQaMF~v$F{umu~JQC;vn}>g=*M z8!cGkg*!VO=d4|}jL|@gwg(jb zD+o>PB9!rSG{J=o4N1~4m)6eUiG!&u(0Kj z4XCE+HJ$Ps8DG*t(KoGP;X`@(w^zsx8isRj%=Upd7q=aqtj{!levXP$>jK9vt(6oK zg1#a1^eL6FFyr}VVFe4^5QN}R$;vM% zK)Q2>3TF2kI0EqO3FP>}w#7#qYs(PnzuH%R3(y8+$1gNJgPhd^$QDZg6rrihwjdw?-E~XTuSWdA@9lE9OL!RnVQs0cm4?u>pthDA zFb_~?Qd{eaez@%B14tE!kBKxi-i!Fhs{l^v-smmrWq@|hON)Agoagw^Z zslX{_w*1H#o3bn-2*tP1v~^Kk_fK~02Mp#V-kePW^E&+S(0*r{mk1K~__;XrYOrQiduejR1qX-s9b=k!u-SPYPRZv=81Ot84=pH|M^|Ee z{gIw$pNEc)y0E3ij^Y-1Yco7CEWx zv#dlKssAJhr-(AE9Ag07klPN|doopB07hjqKo*QcA(850MJSgT`v>3{w<06;y$>0P zU^swC!7*talJOVE1K<VNbITMbM_5#h80?l_~MY%)lJ|N9XUnx z2VMzLy?xtSdydF4yo!uO<1#T?bV|H7tT$Ondg3YI6WeFC9Qcm{JuuJfCi(3`X~w#M27j! zrWJt{h4zTe50kYy5j`JAD^g!!_^*Sz)rjPW*oZBN!T*A`3+55u*WE72#Q#2P4#=5u zwCt@1jaV{}g4`St5xpak8(eqtFxc?xBN@)&ufC=-rmYdg^hEKHB8VY7AcBK1vtq)w z(`wAz+WJ**Z?W;mgq>CeNs5KLNs1BRA;`#29mf=6;Ygz|#Q0>gev|e3=PDHPAuAE` z{d@Rj1vo;;@~dBt!t|-A@S9l`AsZW?{23|F+`I*bcW}Aq^#-<5Q~?CovSU46E&hRP z6YuBoj#=9u!Q6Lue>DRv)An}bbB!jc(s3T^C~>$R1@*57$rrW{4dp2_kw21Qw${*K z2XGlbR18Sm+?3j^_%iwNojTVK!N&n?(-MB{D{;YHNzEFmS}Zw@-T@BKR{Vlk&faW7Vd43xGZo&28NqbKnUbfJ#IFPO-Yks}^yAcaWvJdyN= z)H&sxv5AchuaQvz@ocWFW$@_xG%O~S$}m8oQBtai5C)VIgNHp>3qj`JIm*jp-9K$hyY#Ye9+#i05pZ1 zm~@nom>3VCM^O=RUPA-nBN@7a(kT=sCUPDg+p^oE<603d0eG8RC!2}%ri9fXnT!Lh zP82x}s9)NjtwlT=?lwDEU6LwAA-)ZVUih1C6|pq2&C!y4oHIr#=g8y#J%1HdqeE7Axm9H-X(%PO9$ffdRUozfv(pOaQ{s z-j=svi1}LN`1s~>Ar|eyHX&4Y)ipE@R_-zWyxjXlCn!kqY-qrK>TrF%E?xADfsOt5 z%1^7;3G}KECQ<8gg!fu#KYjXmZ;@*6p9~pwe8k3ZZgjDu`PjHJkMklc)Mqhb$Qi%n zPvhX=wA)1AL`Son-cRfA`RcpX;IblIP*`K;{3-f=AhGe2&xw$4HZwOr_|sn$#6l}x zUao{Vbz=uF*JuHj^9D+JaG|xbzDxh024ibW4uH-$h;R^6Nw+5^4i5*I`W{otd9rzMj!h{YPB#$n6eLiKVHvyny3|A)4%NbE4ocL&sj*ah} zw&v>UYQfo>fB`bssF*Mto|E^y8&W0 zt2KjDQf_?5y~QLBkNOib^g|yye~11PtkpHqK(@MP(lXEm_%?XOE@=^aVj?BKVi3fP zMQZDG@+&H^jEy~P?Oag>7~qPOI1j8@hLiTk{4|$Mm$ZFoql|DvlIj>q92;Y6_R$J& zZsvnH5Rq{D^2HjA6yVWJnp#I1y1Mk~rfPAR9v;O^0*r8Zb-o@9DlaF5YDSYB-Uom$ zxp?j2;YR$xg2a|sq9gu7X1Tr0s@e08IHaU2N08T}WiF+~?CWQj2?!8&d(jWK{J5PR zLI~_=xIY<AU~-~Fyb~V%r#*76u8iRD6Vj$!ewVCx$s`hj`x+aw zw|Yj}`tWaYvlx-Ry{dx>0zOt!!cry-abIY8d7?@k_q(z(IdIlJ@k_uZ@Pb}RuP%;^ zSGMeMgoWLFXfXEnZgh4mc*{h)#ZCBVJXaqqSMyK{$q ze@8!V`5)lnzG_y_9FB~r2LT-S2dqp<393L{c4zDHE?$g~|S}{N5p&Y}g z)_*sIRaL(evYRpAy_2Np`XdV9FmhRWu5T;faxEd#3y~&3%4L>!=Fy>)W+)IU@+#0b zxEPUm;xxSJ7|39*bY1i4?0HuE((v%`kjJtc+t%J*T3PvygoFfuJ_uEoTKq*pKpQGG z*w70T1Z8=%pkV21#y!JjJYeiER{LG9%(04$b| z4C|My^c_ySnl7JCJ8-4|iiKLwz(7!c4jjM+x%t^Mg+iqg-h8aPjg&2PDszFTx<6&yoH%B_#~XHbLK3@&MTe7!7oQ z@d2Jpwtkct3Q(f+Uy@|EHaRYrpX@F6v-n@HC&vx(eV=_vB@lS?oQ-3LyS%#k^Tcm* z!2bz6pBG|dXOC8T@}zWre!dLeR)bhh18`<}dK@GGh2t!5Y|L!*J>#l#TUTnYK0Q6v zhPrvu;fIO}RwpN?ZGiLCLj4T>31p#K4=x3a@SH+#VTB}YYJ)tR;5DzB`318t!giz_NrbA((A zR4*?M)_Q(`YW-ZTis6r`DJ>|(mjc3Xw%Jkna&_UFeWxzbyP7~)4xKL%EFZ<6UgThDIDO%g-rpW+U zKnNLRbGvsD(4CQmh2@c=;zym|iU9cl_}iPrM7mA4m(b_1vbI)MO$`_38UcG;amfQX z3jj&m>sz2xYBegf3B8SEWn;6tGgH(1{X5|Y%kdIbz^B3`&?3os8XFDe^XJciUTFLB zVgq3c?X~|WAPWg0EDs8mNC2?_N(LYZ#G%@y0M@X)7BBgH;&Xpv>S@>9Wqt8fCVRx7 zjpgJA{pp%#c-c8Q8it0^DCoFmU`G~9T&}P)df?snw^eK)BtK07UYd8tE;7Y5!L-awEC8Nli}?^DJ{pwg zZ|f{VI|Q+P+wEL4!6j@QY^wGK6(mfI5Jm7nPRYF;P}hB2+;^;^yWy zYIMg074lb2O`=A|#!%fF=_AkKy5fVIEovae{}=Zp{rou>AYBdyA1(nE0NqdGJ}mmO z+ZXBnKi>_SxEB{&J4_r@g%OVG4XupJavL)2CiIq;7Q%ZRYT1BEYg;?m|9j$)KQ8)` zt3CxCS-^jGc}?jh4oY7!BLI)h4eH+NmyYZ$|-~ zlpa3%-o1Nzjqa>sVq$rPg&}YZ`khQXRZvor1`wvV7&SzVx9eTq-QDr;-(Rw@Ff%iI zg-OKJHZ?^GsRCK>oYWG2uK|Tw2>o!>-S=d=t*HzW2z;5O87W+}Q;EP2C&uC)WAX>1q4VWCM8ut zm*a$#rPmA;V6^=s`8Mf1?P%rYtM{}2Kq~;Vni<$w!C$|M13i#{ni>}gfssbQc~@4D zJv=;MAi&`!f^S25^?xIl91m{1pzA0H2M6NYR8>`>OEco35XTcVmxflM%e%WcxDkj$ z!xA(SES8?@GnD&}&booi#1_fH1rTieZq3ji06l^~Kp^wXEG&ZIz-svNC345;`TMn= zc;I57LQh_hM{UkiO~^L-J*!iP7F)3R(j<}wLwaC!broC(jh4(nKcDN~r*7Kmii!$G z!A?KJACr>>0Pn@X#B7I4@?3LsL;aJlx_j0;M?%1Q-)wuTVN3p0|HBh~_}@E2B^u!~5HD5HA;$KmAv2R4fLe;8F>3ihxP@cS!t@DT zNw$Cg?rNb{blCCNns3~`afk-vv?=}Xha=g6YT)WxRr_s|Ux+epdMY6`mFd*O-P-D( zfEiy{>D?l94fp^k+SuK + + + + + + +Leonetienne/Eule: Eule/Quaternion.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Quaternion.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include "Vector3.h"
+
3 #include "Vector4.h"
+
4 #include "Matrix4x4.h"
+
5 
+
6 namespace Eule
+
7 {
+
10  class Quaternion
+
11  {
+
12  public:
+
13  Quaternion();
+
14 
+
16  explicit Quaternion(const Vector4d values);
+
17 
+
19  Quaternion(const Quaternion& q);
+
20 
+
22  Quaternion(const Vector3d eulerAngles);
+
23 
+
24  ~Quaternion();
+
25 
+ +
28 
+
30  Quaternion operator* (const Quaternion& q) const;
+
31 
+ +
34 
+ +
37 
+ +
40 
+
42  Vector3d operator* (const Vector3d& p) const;
+
43 
+
44  bool operator== (const Quaternion& q) const;
+
45  bool operator!= (const Quaternion& q) const;
+
46 
+
47  Quaternion Inverse() const;
+
48 
+
49  Quaternion Conjugate() const;
+
50 
+
51  Quaternion UnitQuaternion() const;
+
52 
+
54  Vector3d RotateVector(const Vector3d& vec) const;
+
55 
+
57  Vector3d ToEulerAngles() const;
+
58 
+ +
61 
+
63  Vector4d GetRawValues() const;
+
64 
+
66  Quaternion AngleBetween(const Quaternion& other) const;
+
67 
+
69  void SetRawValues(const Vector4d values);
+
70 
+
72  Quaternion Lerp(const Quaternion& other, double t) const;
+
73 
+
74  friend std::ostream& operator<< (std::ostream& os, const Quaternion& q);
+
75  friend std::wostream& operator<< (std::wostream& os, const Quaternion& q);
+
76 
+
77  private:
+
79  Quaternion operator* (const double scale) const;
+
80  Quaternion& operator*= (const double scale);
+
81 
+
83  Vector4d v;
+
84 
+
86  void InvalidateCache();
+
87 
+
88  // Caches for conversions
+
89  mutable bool isCacheUpToDate_euler = false;
+
90  mutable Vector3d cache_euler;
+
91 
+
92  mutable bool isCacheUpToDate_matrix = false;
+
93  mutable Matrix4x4 cache_matrix;
+
94 
+
95  mutable bool isCacheUpToDate_inverse = false;
+
96  mutable Vector4d cache_inverse;
+
97 
+
98  };
+
99 }
+
+
Quaternion operator/(Quaternion &q) const
Divides (applies)
Definition: Quaternion.cpp:126
+
Matrix4x4 ToRotationMatrix() const
Will return a rotation matrix representing this Quaternions rotation.
Definition: Quaternion.cpp:246
+
Vector4d GetRawValues() const
Will return the raw four-dimensional values.
Definition: Quaternion.cpp:290
+
Quaternion AngleBetween(const Quaternion &other) const
Will return the value between two Quaternion's as another Quaternion.
Definition: Quaternion.cpp:295
+ +
Quaternion Lerp(const Quaternion &other, double t) const
Will return the lerp result between two quaternions.
Definition: Quaternion.cpp:309
+
Quaternion UnitQuaternion() const
Definition: Quaternion.cpp:192
+
Vector3d ToEulerAngles() const
Will return euler angles representing this Quaternion's rotation.
Definition: Quaternion.cpp:215
+
Quaternion operator=(const Quaternion &q)
Copies.
Definition: Quaternion.cpp:102
+ + +
Quaternion operator*(const Quaternion &q) const
Multiplies (applies)
Definition: Quaternion.cpp:111
+
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Quaternion & operator*=(const Quaternion &q)
Also multiplies.
Definition: Quaternion.cpp:131
+
void SetRawValues(const Vector4d values)
Will set the raw four-dimensional values.
Definition: Quaternion.cpp:300
+ +
Vector3d RotateVector(const Vector3d &vec) const
Will rotate a vector by this quaternion.
Definition: Quaternion.cpp:197
+ + +
Quaternion Conjugate() const
Definition: Quaternion.cpp:187
+
Quaternion Inverse() const
Definition: Quaternion.cpp:175
+
bool operator==(const Quaternion &q) const
Definition: Quaternion.cpp:165
+
friend std::ostream & operator<<(std::ostream &os, const Quaternion &q)
Definition: Quaternion.cpp:325
+
3D rotation representation
Definition: Quaternion.h:10
+
bool operator!=(const Quaternion &q) const
Definition: Quaternion.cpp:170
+
Quaternion & operator/=(const Quaternion &q)
Also divides.
Definition: Quaternion.cpp:152
+
Definition: Collider.h:4
+ + + + + diff --git a/Doxygen/build/Rect_8h.html b/Doxygen/build/Rect_8h.html new file mode 100644 index 0000000..fedae32 --- /dev/null +++ b/Doxygen/build/Rect_8h.html @@ -0,0 +1,117 @@ + + + + + + + +Leonetienne/Eule: Eule/Rect.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Rect.h File Reference
+
+
+
#include "../Eule/Vector2.h"
+
+Include dependency graph for Rect.h:
+
+
+ + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

struct  Eule::Rect
 Trivial data structure representing a rectangle. More...
 
+ + + +

+Namespaces

 Eule
 
+
+ + + + diff --git a/Doxygen/build/Rect_8h__incl.map b/Doxygen/build/Rect_8h__incl.map new file mode 100644 index 0000000..bb6e123 --- /dev/null +++ b/Doxygen/build/Rect_8h__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/Doxygen/build/Rect_8h__incl.md5 b/Doxygen/build/Rect_8h__incl.md5 new file mode 100644 index 0000000..fa4dce9 --- /dev/null +++ b/Doxygen/build/Rect_8h__incl.md5 @@ -0,0 +1 @@ +5b67ebb9ac1fb7c31a00bb159f2570b2 \ No newline at end of file diff --git a/Doxygen/build/Rect_8h__incl.png b/Doxygen/build/Rect_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc6251e32ddde32d9db9860420dde7d1c5f812c GIT binary patch literal 6779 zcmcI}cT`i+*JT7L(xplbO^{xcDm5sGbfigdN)rJ=2qbh6kR~0ZgEZ+%@4fdX%|Jl9 zKoF#tx&FSjzBRLEX3bxdtR!o_ym#Nd=bp3A-us1Vsw)u_&=Ei&5Mt$LPqe{rIruc< z5)_LgKMdx^aOJA@150L5C?(K2`WF4*MX<){`Ay&@naqr!+8ha7C%c)>(h9+ zUhxEsM^8(OM>~)&;OXyfyP_jQzS0NJi%Ng2@EZR0(d(Z1SVcwYP>!v$iIbMaU1O-E zm}0GMtte>W>#M1aea9*`PT|;zZzeX*dS5KHw=*>^4m*SlCa1;Q^{N5#ahspc^kcOx zoNFcrooApDzJ+C|qO9CLlKwb_U%@Jp@i8@zewlScgt}HEW_@F0wJVGwS=@znGS4=x z(PLlO1eR220yio#Yt7gqe?+n{lXl!h=`fDbE_vFiQb|oL;P+}U5&e7ayK2%nTR4q? zA`&Sz`KpkTSfJa`9#NIe6A%#KygOely5RA9_Lh>8Qr_^+#zsiB!;h7|7`E86_ik?H zZ{L!bnVG4kOX{*5o?cvZPEJxx7HH`A!JD6!;|oCGo}LzGf7ZBD1!QHRA|fL9WRP`J zm&C-x;)r8jQOEh)j~_ptot-T#;ZV!H>(~kA5|fz7an@2&LR3~(R#;RN<9Ty_?)Cd; zBaMuV3>iT%J_(7UvU1pzcbRcLmW_>#vp7T1uB4nXRzEo|v4he7~bt*U(@&_wCiYOdB5`8ND*&FxrQ&+eSx8f0Uc; zPe@iqDhAaSi#nkqIyzv;ztj4mQBfcA^6t-+8imkkc(=S;Bj|}@Tv)FJt2o^%$ZSJ9 z3%YHNsYlnltSVYtTbmCi@|_;^LWSHmH7~C(_D?SlM=hM3qD35Ln1zJyUL5bn8J!5U zUIyf;B(41Fk8^f)?d*x9A5Yczu_xlFpsGq_X=(YTCSCG90WL1C30(n*1&x3y*jr9P z^EL>i4G)ThWNU_|r7_IT&*wBW(2+7p`NhS>4V_h2Rguxr5fBoFt4H>49J;IxP(4vp z>{wi6fG|@MG&bR)P^f#NZ|*^s(>+k_VoS(CPK}JV+1a{5t4jIuJLNfEsGJ;D$gsR^ zXFeh9(pIg!8Lbrj?7WKq`~ei`9Lq7 z#_a6uUrS&wAfJ6Hj`W&2ns&#>$79Y}^mKIkn#)sCXvG;w)YBz#{NGI}yE?L+U#wa^``;V1Yy_O3#j(x+!PaPfkM$#k#i zR$#O6iHLL-St~Wm?>K?2F*Y&DYgt)Yfjok8mX?$R)z*py1O}p4Rwnig+S}VJs;Zu7 zYLcP6PfS26gwyO5moY&&QrUSogkK&g9CX>OHki^RZdGXM_ZG4 zplV+?PzD>d`bev)sybhuy5y^D#hZTL&`pSsk9Rl1eg6K@3Qj63qqJB27I|Uom^7&E zNB=7d{HNGixVXXqNT|PjNec!_=Fgp+5^cJ)t;CGPX!SiyL)sfCivN!e8u;NI3a8|GNYN{TTp#1a&Y*w^u>D&T&lj7 zl+hj+fp|!z_eH`Mj$ zy)&?eXaLq(3_+pF11G;8tT~H2yH#~8w_nkI{d$s%*7fs1*&(L<2iMvbQo*TDz^Oew z$OzhpUvzimFvknI_llJ%#xUG{zvt9reGlQrb#=3yv&p08Pn)5{@;la77 zC(CPVQ|)Yp898WOGH-7a)f8a{NLJ}^aO%Rd4?Npfws5L{bB454*|D{6>vAI1jWJ>tL3?RzKsCeV&kBfP^xu3sOD6Y=*@xmvK*0i;= zLkU!yG`bhL$>ar}G@qbe%#7KqJ$UnEsl_{)Kk#mEG*o{J`MDOMDXd1!Px0Sfj;(X& z_wNXW5E3Di4~8zz&T`h)?31tD!W2IwZ8I8BnIaH~FJHcxpC4^4JBvHEkdu?g%d{31 zajg%havr+t>+AEHwKOTYic3hK8~0mw#_vHsrKLq|O%`;vwL#X`*9~gkfRKLmk}8w5 zP=iCI;C>%J5`Z}3LdeL-Ah6J>A5%py5@c>_mwdu0IMuUqVCNJaw6wI()YW??@>CM^ z6!e2Wd|(w6Bs)7h6ZgHA;y14IqvFvMG)aV2ax@iaWcGm3+Sc5SzXb;ePnp(bWkDE7 z3e=Vjr>3TunVBJadU}G79tCMWc=Gmb+0faN&xIpEhkwwdT??i|HZn4DPsCm)WK~yJ zmj#?JDk>@{EF93gv7>skjV`OBc_`6@B*5wQ1a33F^I+s=4kqqf@(5J*DC0Rl1>y2Uz%*|yZfyxlU z@U>sOxb>(N{o>`zFxl%gq}kg$j5g!A)+-Wyp9x$7it~N)}?5k}}?|0iC}8s@qcNF8=LbpwA0$2=MZ< z8yXt2i-;tU!TLa_2+huBDJm`9b#7W*G{*7+eZCJ_78Mos3xn>A-T(gW8$Kj9E{<*P zcq7x79P(>CS1E`LrWnnn22)U2D_hEtMmz(JMfvsX{Kbn1Ch5FFi~+k>N{A&H69C8eeJ7d{Zt zveuUd=jG)M_3i^wW#)5sA5@TJ+T_%f&L1afX=#X@x3_n}wlx+H|B2iAksTZkcRRoK z^77ISH#IcmK4}5zyZo;H0Uuwt-z{uO=~j@JuSYW?*9Mc=z#aqMxiVPSGMrKq6P zRQflLj(`^90&IiG0eWF+WtCk}z$r0LMn#1qlNqg*tJpq1eivX{XlUrC3#7fheTCg5 z$FH@ub`;9=n@mGP10$bU@qGdZEbSkzUGtpY6P^=j)&j-0b#jSxHt8z zdg+k+kc^goz2Mi23z|1uTU&I}viCFR_dU6uGyTtcB>Y2?C0`z+qpifcl3f(YpMH9t zuUQ!B{pI#RG|1*ni)kztIrkct4C%NVu?LdchV!J+&=XyA-R;h~Ia;tWx^u{*Xngl} zP#CjKXG9~JX2IDCjVDUlFqk?k$GT)}>`dEG#I<8hMwYY_=h{XR8!s;j)K{u>p&iF> zRE8qQ_r}NIyJEF|(pID`{INe-z;to0h20!}ye0jcO($!_GuNnL~ z>_aVu&nXL45`Ui6Ld{85>CY>l+U}k51@r661N=J@VJj=oadZk(z+jr%+QDOE4>2d1 zx0RF}f+JNHLNapEyKM!T8Gio$Ojy_jJZ{GGGDi%=PLHoImX_|)c+fA@wid(}%T63; z+iYeFOK@{<3%aaO*VQ)%I4;C{l%mhi6;)HdG2Wc^s))a{uAErkirmc5j}mAR$Kg*3 z{6w~v5vslrvX_faKu_ekrHQ*Rrivjt+vLvnKa3w|BWxGOo|~Ak<*Ux&;^Cx6mH+q=uF4#n_!H$5R!nT>Q!W;P#FV{Fs;_ll=G^(sZShCf~XGLmEoTc&kYc z0mYrHU4@Nt3|5`T{@s>q$-68pOchn}-p#_gIp7al~g86x=%gaNh<#!9F z6;XGpyf>43_B~JbHM*`Yp5hZ8YNak?frCVmBu?t;wC;PCIR5@`D{A+z@2n5N7DA5g z-Ym%B`$v!Z#3%h=7In{qjZEs|&dc-_R3cEJp*+vjhPy`6U8h9rAdb-a+!!<;S5epc zu+2fauUb!`R^VeFNT=-ubE;wuF(HjlU_=BtJA288vNF-hH8%oq#YCO-et(=@Xmo2} zMTJDk9saRJncuVMz@XdnGF4-Rn8c(XmRIL5lEwDbB517!-6Two*HaZL%x^hD4Q+Mc zvKPPE;ZjU9W$Ep1TtAQJY?zJ$Q+>yiG1nl+(j?zw8`XL#FppU^q`l4E?Ob}q+B7{q zTJd_=1@0+fF<+&h%wNz8Vy?>8K~LvJH<}^cOJmm5>BdE%uz*L5@AUjRH7nbT3YT1( zh{!Y5q+CG|skL5DditmEol?e%Z*+d4q4&XYN){HO&@ko6zGC&`ZR!0Q$I1u%WnD9+ z%_p!QpBH70<}s-H7oix8b%~J}1vVa?uu0T}?YoP%bBy8>V|hizuqn})!aF?rOo4H6 zA}C+8_em)>&k;({?H&3`r=^>FUsdZ3ps4cJYbeOIsGp6i2bcBtAehV>c4oHR+ZGnC zZRo;Luwm@Q-e5yIy26aez;d2Gr6STRU??HkU+op?8{`Rj#@=(hTbV5R{_#k9V;C5w z(tg^_z=-~#NzOpitPI2BWBQrWi#w*KHzAr`yBt45Pd5Z=(_PXyXJU*8Ed%wR&4Cv zLxc2p6_QOf{8DX)8#$s2PjfgZY4kgKZDa!ia&nBe}kE@P1;xn|)A=i%A;l%UITa-7eB1@r6cqhyduF6kK1*@>3@v%GpJLO{p^ zn#>w1x_5Qu&l(YxUOuvfcz?QB!nWLKN+cE+TtdUS9&3boi-XVV-|F3V5B4x>GVY0!afcCcuo@#XafX&ACZfv zC!g>`71}~|2?JWx{5XKNyD z_YjED15>>ZC+B}dw95;tt38(w-yd|6UgHy`mFXopT6WaAD13^ij1WUr#26C7#)?Ux z--Mfrie8S*%wUZ*iB;B$DZo1HRg(qd(F0Q`@pP+!HcRI7c7U8B`B2Dn;|($}A@YP`bTs^AD#c^SFZac7RVq zTv(#BH2PFT^rOq+YbH0hstSuhvbS#qR<~ZPF(AbR1^ob()9%q*lWhGn0AY}A!T0x< zMIY}fg@#`+a&Y{ve~km#+}?&UlRa~EaDA&_XUDaNYA&AWXjr+v;uLq=Bt`z|rxz5{ z-&=|V7MHlHnp%ReD8&vhHN_L9B?Su$5xr8n+=+U`Kv&o8e^h6F=Jn`;<-`}|fwBUl zh=@N2qrL>~8$34Av#eZP%0;WSntvrVQdT}rP4S99UMO-yWz@NDL=Ek}>ntu)jMlp$ zTrGMmic>3Hf^1jRf&jzL(jJOhS+N9mn3T^YFnIn;LiIPd0u{i@#-^*w)XiK?>ZBw| z@NgO-L}$v$$%#Dq=^;(WCL%%=PBR(KSF3b)rzFatbtCUl60E~WS2x(t4+6Zow!S|6 z>+9>n(o!7AKT`w9k!-xT4}cH_bfVkl>d%@MfQf`348y;T zMFf>$5E2sF9pNi>tV5jegNvBS@G)_agCF6aBjRckcYks?r86=xkdc!ID93Tg zo0&m@QczG+BgVqQGJo|72N*j9vm4-42X5!2&ucXbK5`y4{%_x z024xYhO7edpaAlMmzUSv+}sbCY&k_myS?!Z!ByJY+Awko3L~etKZa5s_5+UHpZ?gR z54be_{@8eZKqB@B;*o{|$EMzGi@d13oRf=-%X<2&ZfviFq-1Po2&qcs+R6&7sj2B1 z@SpmJhS=5B)o(+%czD=?$b?@H-6LmW;;;AJ*;fL@KO!RH88B;#N=n#`YTmG5`TGH( z=DsCypMxV7y!fT_c^VoS~dCpDW3tvN8@r8h-Zk^K)y! zB!RWa$u2FOo}7{r1DGCv>GbYGZ9n)dyxDhw11WI_5*rgUzFzbD_nV1wGud}LGkhu0 zj?INBDJi%8bZmhvXkb7sFPj&6n);l*dbix>uP)08n-XXObJqWn@@f4&0Wom`GBYz% z1M=ygf)cGXP`!=izv$wzk5WS-kzaZi>shA8iR9#tF*&Z!>9XegC-`U@PC!CtEV>nf8ElO8Y)6eJXTsd8X z*JvgR6yc$1~rGcNRM){_Jaf{`Kn@1Tr){+>Ukzrfl2lfhI`e5K<@> zBnm1U^}`fFjFf=_=(=_5mgCGcnAIOA6B8347-_D~|HjShnVBu^zK3f?cRDya0{<_f zq=Yx676FGd^YfGFmz#EjhzePB+@6}A7SR|<$Ut>;U{zOFKj6E%$mO1!n=>gZTEjb7 zxkpV+ZNjAVv#K`H%s5j;(TC_hzyQU)^*_#eLVJy`$% literal 0 HcmV?d00001 diff --git a/Doxygen/build/Rect_8h_source.html b/Doxygen/build/Rect_8h_source.html new file mode 100644 index 0000000..efd3dd0 --- /dev/null +++ b/Doxygen/build/Rect_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +Leonetienne/Eule: Eule/Rect.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Rect.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include "../Eule/Vector2.h"
+
3 
+
4 namespace Eule
+
5 {
+
8  struct Rect
+
9  {
+ + +
12  };
+
13 }
+
+
Trivial data structure representing a rectangle.
Definition: Rect.h:8
+
Vector2d size
Definition: Rect.h:11
+ +
Vector2d pos
Definition: Rect.h:10
+
Definition: Collider.h:4
+ + + + diff --git a/Doxygen/build/TrapazoidalPrismCollider_8cpp.html b/Doxygen/build/TrapazoidalPrismCollider_8cpp.html new file mode 100644 index 0000000..35fa5be --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8cpp.html @@ -0,0 +1,109 @@ + + + + + + + +Leonetienne/Eule: Eule/TrapazoidalPrismCollider.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
TrapazoidalPrismCollider.cpp File Reference
+
+
+
+Include dependency graph for TrapazoidalPrismCollider.cpp:
+
+
+ + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+
+ + + + diff --git a/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.map b/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.map new file mode 100644 index 0000000..0ead1cb --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.md5 b/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.md5 new file mode 100644 index 0000000..8ece64c --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.md5 @@ -0,0 +1 @@ +35039ee1e3ae4141890e6d8a89d1e486 \ No newline at end of file diff --git a/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.png b/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..19f4f0c354e48a91c9c7427b34177f92c46e3db8 GIT binary patch literal 31904 zcmd3ObyQXB*Y2jfyBm=PMM^p)Bo(B?K#-E|?p8`bIz5_&!_c_1s z8~2X;-T&`6j&X+Dz1Diy`_6dgGoQJmwC}1A;L_qE5D0=hs*1V@1S%>5fs%=h37^z< zAOC>=VOpuHC?c+q|K+xnyhI?F5qA{j^gXjSW<3n`j=C^*URIHy@Tto_s>dRv&%HnT zCJfgoc@dS$ABZJw}NU{zcgV_Rp{g0(?KV?bu+fm+=zi19P&d9+=m0KWv zEouxVnh&*q-a?>_pw1u2Y$)FwH9}I{ZE$ z5H%s&9|EtH?z%osaCv#jQQMlHPTd@E#dz&*R-h_7DncXk7J;|7H?@qvZ`88(Ev74( zqM{-eK|$h|*R*<5`HU@WY`9dj)zkPF)6D&YnwliT2^ny$t*yIzdKQm&m+GAsQ3WiE zSo>II*%4Y=TIc8c!+R}gI5;>vdwZR&erLHQC27{D2M4a`n3z8|raq`@YARiv9twFM z*raD<^p}VST;8Uqr~k#lEb8y?@8smvj(i!PqbpPNy=8S?!zu*aGNQU#$p3t|@7cg0 zkGj9Bo12j5js+|lOVn{raUhk?W!B8n(sD|8^G6L{US6K(#i@wxSZNRmn{uxA;h#PG ziF#*i(>KR^G~wpus4SFq+jxP6f}?QT0!@!I$Dm}AKb{g?WNnAwXk53CFMg2K7_JknMh@CZx5#{&zi){%#8T(WLQ~N zR<>g5$(M8#1qFp?Q|~dJK7E=lWUU;(nLKZ&GqyU-!^^92IrFVVtNQt}8n4kuY}m&3 zi?bu=^J8Z(5=7vQCqove2fs^A8ic_FIj<5;+We(nym%pKJH|CRJ>B*BGmcjF?T-D` z;n8aAzS}phH_q9M6aU2Fg0f_#N{BQz8}OWXx>sV_mLNG&C|ygY_QA)NWvEy@H&DO5zW z-x(!%n9@s5%{|j>aDzYN?=qJXY7BXm5C420t+6x6lJwx8c6lx7p$t(W4=!hv@@}7; zq<%7-&9`%oa5~rj2$*rBEAh!yR??t_%^oTzDM;ZZCTQgtneuNMoY} zm}_2HS(Jp^AB#_kEK|k5f7I}Rb)qmZFt~0^lKlStn_AjetUpbFNL^k1ro#+1SSdo< z_Zt?1jjcdnMc=h)`C8kiQR0!g+4Oa3X+|)dKCob&8ryqozkhdp|9;O5HSip{e^)w- z&It$|q3ds4(6gm{FcCXDJD+xE;5aO;twX>8^ZYMPN4|d_^zh>3o6M) zq37YlhX~pD*@_hId;PmU^78UQs|k^j?O>|ap1W51Zw*P>BZ#m?L`2eGz4~18p{fe8 zv)Hwo>DcU9_S6f@V_f&eYysQj|kB<*|E1!+oCXcCNO%09npWYO+4kw=- zn<#%>VEKAUN(EffTUCqoU6pGsA6{~Q+CM<14)oljB95yiqVw%c3x_XXzA%$URXrJI zTw7mXl^8tPUmeX?ia~vM_HAjo(!8zr%c~ngey6U;y_S%Wm~3!?pevSSpPj&jnR7Y! z{?P#HV8GR--B97|K4;3oE?h!+}+2IA1A66MaIOuq)Hw3`+ae5WcBy@&Ilq20Xr715JAYo!GR%Q z){H!tHnDe6Q8-4m&!PeY5x4zL$+zcPy1>i@-Tvr5eEb-^e&K78`jmSOYOwkK=3eW5o98YnxKk%YhUc>b7Ehi; z^u$mtEf1tY2JC~)8EN*~H);Exk(pTl;ob24L!7y0uMlu2%fSp0+_uzwauSlD_IBCs z-dQH`mtI$h}{|zI46dP_KIWjT4{l7Cv(8!on~lT-TTd ze4-ud&VSXI1~tzIU+LOpOhC^j1yA<9TH0{;Zu>DH;TR4>aOp>~ zD8=+!_C{sR;XXal6eD9}U);SO=9v zkR<#w4~3P(W3e+#o`I5?71h%wQ1v&w?wvJk#lmiIIWDcBpdfjbTw&g}BdYm;o`eWY zB*LSPL6DFn;adM6(Ciu>DTTH(p@xED4-X4Vp0kHR6 zO{b|cva$f~P3m{{s8hM0`YUEQMlrCaMhHNSesEc2Xa}Hm?h+#rvawQ2%p}$1_5DA8 zY}e*m9^jO)l48Qymaz*|78A#~T#==xa44nm$Ek^tBng5&sB&B!TU)CZeWg!`>0uqK zbd2J@*Gj@nq4ODO3n>pB93p$;%H?^7{5@rPDLV$r%Vf(U)fkbtRD0y) zV#lQo?+>t5k$Zig$hX=MU8T=f@D{(oe}7zV)$<%8mBiTCU5lQ^~J~Y1IE9At5T^fs!R$S;jQ}T2-WfnnCpWjS)>i31V`U+b9v}PoowTGj12V9NwB>pBmyh41ey3;i z(5o0WqZ9DTa(_w}JTRu*pz`swyLDfD5AyL+Qc`1OdRSBfX5F1(c$QC};sBz@r@e^{ z`3(WtRS+WS!S*~89wo0VBo8D`g`jUalqJ4b&AvD7aH8YdR9skS0RX<#sD>M#fMD^@ zpJ+&IPkdhIIF=00w)jv%B@zNFwH<#O1&D!MOaKR2`o=y0kiGKdRR|P2xln*jwgt#M z6s8fraiiL9f*)B_09GEjH4G3z&}Bsf2?d~BJzk7pN=!^dAiRd)8Xet!Tg zP>VXygYCtp37G#pnhzMRZUvNPz5BDr^YUCAYQ>Q}1*{o(4Jg=D6cy3`ZcbmjT4?b* zyOm#1u(-aS`GoU7Xs5NcH8MK76SDr!ug_#-Z|>o3ZEfwLzMOYQ4TKT~9UXlE{9xzs zFf1WKD@dL8-)-218WBu4x41ZU(;1NHP1`YSHs#oMSlI_D(TAUi#l*$s%*~NmH55{& z`}Uma!U>ASQg0kKE^a5#0Z{TrL=Z9kgpDw4^%egzIH=R`{1LBdBRLikV>clG=U=WC zI?#~S2G9Msfq<@_+1ry46DO|QeGyQ1c=7V3(9^H%fVn@%sF_XUA#UEhnG2W|3=@fT zJ33I>t}cCQpDM@G{V z=w@opdF?u~;_^9ifMN}4fTyRY=`sP*jJG`lGesRKZ6r~c2s>`tjpH{qHd5buM*VYX ziG+%(#L0}?3#!aV8UQKZUog_rM)$_iDQIaC0RSmbj_ZV*e$WI);N{X$!Z-4VmtayB zP=Jeh?l1$`K_G;LgtQF|B2rRPd>d`QzxkYVhOGQ_041iUr+;GlP*Zd7xW?Dv^9v4$ zNP?oGeEs-w6L=z3=DiZ{FR&N%+q^ruC9pOPj~$b zfA+A->i0$}vYrGWL8+AYL3?G}Wi&udIqnoI!1UsGxzCR+cSgG+h`=KsiUwGxZG(i(t+5uD?lt)YwG;VrGNNWZ0{<5Nh{bzArqK48VY-+R+{3!9N~t_lbi)goPLYHC?MJ+j5cMX&{(_}};68HK@KBa2}q zI?R^#!}ahu@?8x$KNd1EHAPn6AD>MLPYc^Wdxi|A_)OCD!`V^_8XEXW>w-M5|3?41 z3MLd#@I6u>kW^Jw+u?PP1{!9rt|I{i4X0LiEFfmK8#l;EqZG3X1Oa{DuP}*nTOVIs z%?VJ}*C+q_^{dnVil)XZVGK$44QPjloV;C{iUa*P#{4%)YY=!eh@H~zz|$CL~TZxk#~k7dGh@uJVJUg zgthgO@9KPukEoTkHEc%G`aLuj7M783-$Gu$W&oxQNSvUBg$02X0vsGUI1=zbh>{tb zg^j_j0Go?7>8NRGJ9~OCD7f|8p`@#_?jr<0qwsz;G&CgUcX|_26b2R+7UZ)$l>|mX zLBYfTGy`M-UAc+tD>hmQ8}H=o90abd97`PpG?=`)dilsY`!dUm-H&%!W@&4u!(WLjE)LT&+e4&=<10$AHJb^ z@!}&zhJchQT6Og@-t87e*3LLOPR|ovmC?v#EFz)=`B|-?Rzej@_IzO$;XNGhL!%I& z7Ff7G5qW!KFfjrxqKZ%Rp2XQ1qsb#kgR?97x@7eubum=5Gsw}6VR4%5Vp{;siU8!J zd3wE*eaU$r4ysC?BNu5ZkB7G~9k(Cv>`w>2ytYlgei|7~24L-ajdhyslHgy=+`ItpbtTS@%)53LGe=r{T)t%eCQNFd*nMhK3dLw^ z)rSv?!`bD|+jA~*`^49Sk<01tBONJFaY0A-#5O~f{yIM1-W%s%YBo!roz1heAlE#S z6p0&({9FEaYDy;of$Q=puJ7X1k zW+-@ict+WFFU$*bS+a@yq<-! zvN!OR)GuCs8!ex(Ei7rHk|5QofN)bf*7$r`==8`u;_v3VRR`*}Zrim5m&cDW;aG_o zZ>zQ^vUGgve}T&o#f1f1$DIPeEF@u=7Ge?u&;4UrO-=DDlkcUL;e(l2i!%*eu?$TF z%`JE-xB5>6Vj}xLMi7yW6!dW;vHkb*v*hE*AfuVg%v0^9>+rJj|RXrYjnzuy!IVCQ@Qc<6i{o0fE z2@gJe0yh%!n+OSs40#o9-PuNwju@)X>CzVh`lY#eTEoS#fyP_%a zcashS4b3!j#U_E?;jPUQo5Omzel>QVG&BF-BTu){Z;uy2odZy{{#mC!4*9 zzYG$D#p}NpeXRm+y?e9W&)HF6BVMy#)uHKyKiv56Y_e*SuHC*o-;TYQ`W$MOj_Cw&Yi`TT~`jd zib%T&D?$HrLVSiFlzyil$tB_~xbO2uyfcmfY^#q?OCI_~BMR=^11_Tz<+IC*b8-4k zA%^n1;8Wdec}v(sU*DtNvZsyYF~}EkwkjQQ{?9l2KYdc1Z(Yx=tPG*x@lA1GTgbm( znT>J3ax0{&YT$T(cuBsGg`zVcNKxMkK&EoST=X?9GZroz#KB<=?An`;b_R4VE1p1Y zqfNG)y@4AmImxoHatpbvGPchL%(nw@w0!i4-8Dx-!yJ^SX^0g|9AW?b-dob%anmLzjKWg8_wfar4NJ!|ciRt$uJ2cfzK1br5 z8k0dCA=6I27pTNBO0dkis*i6YrTtKM|MCg&6#j(5N3n-ndIO8JkH+qx9EQ^_Bm*>*>j=V6*@0=o-5-c?AVc_;SyfK9igrn$zx2 zg)gstWa0V$esij75#N2gHTcnhch{FM@VVOOp$g%Z;iK+oifdK&#`Po4rT9PZp(*O~ zva;m>Ki)zuIz(gtV+;;WcYXXFj>Eiv_~(}%`O0x>RdtozuI$_j$RrYNqN__Aj*p}K z;qfhMq5PH+=l;;oFHJ`q-8Av3s|bg)cQKXpU6F46DUPv);K2jZw?;ilXfgeLJUICH zuA^;N-oV;|GxuZvhwO>$k55cgKmJ{^iH%1`h!ycw)T}**>P}T%4q@5ND;dAR%xR0G zEfS8zHw*a%WQ#xFV-F1-R@vwfB0YmP_o<#; zq~eL@_09yDTl`U~xYh54JHHl5ktJ66&T?}j@MkXQ1^Fif(2glyvxfA-)^fk=!_zNVpAI9wtmXO z`jdo`Pl6RVLIQ91cL8L2_K7;kglNp{~hn zBPB#J6<#x6^lMskBoc(zS(Z->)D?^Fn#|Dg8oT3L_qvAG)Krf+lS8S5^JLXqd@F!C z>C?!&%of=)+`hgNjG5U@A=@#^?!Gn(xSR$Vy+4-ed3218A<(dDNhH+rfZYM8cUJ9Y zYRdP~-dH_XF^r0M0maXc0iTZ2Bv*(uQW_aN<)Q7?bbPi=mo8FnSJ5etskygUPAvd|Q#6+C$t>I$GKpKFF8NS0f`aL|ko*A!rA;U2!)1WwO8)qrw&!Cf3)B8a5tqDJN_N z_NVaRGOU)1I69!Q73?9TO>|2&45WW4vy(0+$aphLT}bsN5Fxi0Wm%F~Sur?6$Xejb z7koj_D!riMHt2`~N{<#DGkE`jCxPtRT)s(z0VL80Fx4^O>J5#IR>b3yk{BuZ{zT2S zOynv=MC!_jk>bR7FtO*OHo2_Q{HVKPu$%ZB5~F^BI=J-vcT`nXmDSz9ZZ~ggXy?ga z>+W+TmQZW`mnpiJ`?TclY~0AmfS9utD&(9PahmHq%X3)DiX66c%^{`66R1N&(Q%Ed zi;F0)H1695%(VpsrSL@HWwW(0DP8Qv&~e`rZeJUn#ubq%!$h8V;`)TO)2~mO8tDr! zwqKtm>r7Pi`_#0j**q-+3pA_u+(j9$lwotF=Pp8q4cV1J$w*8B?gGFL@+vGCW0ffB z=|umf1#pZ?Vw<)ef9qH8bJPGKj2vklzDkO>J0VsHdOa@@ZV=6VODFP%?a!D{-=`$w zUukNje%)XPCmEvK%#iNn%I}MW#_L-A%Tt~I+&=LFA^@NxFyk@oTF`E*_S#=zeE`V) zdk^?FRervi#qY1y!4Gr40a}{jMSC^`0k{S3Ef2 z$`3q^TM6EUOABmK1)ew3+@Kj%aRi->wXa2Zv9Ym0wBSifN`A={C4x?x();tB9jD`y z6N=C8lY0VD=JW5B(^8Ar;sGfZ7Ozl*4&lacbhc^O`SidPpXR52{<@Uw8nIEGLmaX? zKR?+A>a82&s;5k^@_%#HQe=9Oso?U2ppO`R!*74GiGjxpOBnHWo-Bbnumhr6s+!LvJ4+1!H5nqwV=VD42-J z$&)v|%+1Xem6R5N5%b*pg#+vXhKGj-6uKujp~2Dz49X64_+7W>r1~U+LqdQ<2?Q>% z3+NEwnS${TmVQr>Lx>l2-*9K=C`vg#EpxR5>odW?cpVlW|2T^1<4YuU1>SZ1^Cl6K zbocLXCDqVgNr#>jPzr{PuGa|}Z$||t?~VRv7pWY6a}^aVMD)fl6{UM`4GCkYjuZ_IflZ4cXGcpRgqWDzHT0Uq^Fo54 zwUtlJceciEB0MGKUiQR{L4^s;g9i`bNCMJ2X4?YHFSGKYxs;TV5q*5@d14JanSA8| zX2n7olLRD>^?87(sOX7n|E1ikHPYbnS$|L!N`b~-@Fwc z4651Zh=1bI>B&hRxMJ8GA;+U$d=EHDi}PdRyn;koWMIhTF<@N!yD4_Ce)P_QChPTU z@a(5Ejc#}ll>~)_<$;#4u&`jh!ek^RMFkRfa%!q$ZjO`^g$ zzSjAH9yTi*)6(%Sj?(+vAh>{rk#F zt-jnXNFey@>(@E!`PP8Z4<#WZI;EkS=?lSc?!|$q;=U^T*YhX2!XOoj{PlP1f@*v2 zQO9h{LjfB0#izD!tf$_aMaKFDLo7lDCSvgL&-Sz4Br@j~5z!O_I1FLv+9mPg{->X5 z_E#9XH>W#e9c4KZ;ARK}FrG{ODK?Ch+Rj}Obs?`!AH~wvP`r9Y3Rn;aXn$5jdnzB5 z#nT5Ue8%^wBye$nGmC|HU+4%y2gsrU@E8^L9~-U+4O0SMdWFN=9EJP!+jnt7&OeC^ zn~$+C&$b8HZtG69gWHJt+`<(wFYbhP4ZLFV&b}Rij}K2Q&4;)M?0zwbsGa5krb<(b?JgOLYDE z7L$kwgN>bW%H*lqUPLB)c?$$2o;skYVJ0; z*vk(iN&4}CtpmVYvE^ktPpm+{t zw_piWQa~$O-f+@MzqFktL|xM7>t(a15f3Uq^~HfAgTy-OB2S zB*|P{pC*L_$XnyX%jMziZ3IONkNZY_?2RW|IPfUs3guyiXg6-4=~p^%yCy$FR%GV> zQ*n1*N?5LFco5ROEi^It(>2u~&3PAJNm;oVpl%=pF8xn3S2H1y_42Gg0X+nJ6&)BD za(v+-fX{UKdL(I$XYlnjL8V!d#pf3V@+x_#0FQM^u3z8Y*=|cvAG8cgP{51`HR%M! z%-Ym9Ip7u0H8cqX{hRTSD=@D62|I{^TpugM8KNk~==<;9;4xs7m2EGqH&K>o%`2&X z(gvNQEL<6iWDW^v^*cgwBt0YKIsUn9D5otULxg8B)A0a(Fe!0|(zNL^YPxQz%4O9F zcu+PQMs9DbYV7?Lub-!f)X!#V`CaMzv5>w8+D{bVR4@jK$@X!#wg#Zn7cb?bobO;t zNMmyUdzp3oyDN1~qx)EcG#^$?54a1YC%qLYfMG zl=ni&Aq($gjfkMf77D~>M&$NE>zIfor62IPpwhyh?|o}O4z&y)_=UiOI>(X~Fv}s? z@@Zs_V@%hXcc<`-g5?V!{S<|Y|F-PmpJG8_?vs7Ac*YhStzinAA7iw}wfNz!t?p4z zm=}?VgU?96tMHCxqG};rX#y-)SzruRn7E9^>JawviG5(EF&dn0Co1Y~pm*`mv2q|s zEd#?_8mq4EldwLKlj=!gShvN5%xWQ+;+CWNjM@gPIdu0PSzE^jp-nS0FCfgCRe`Yd z3%?SM>aQ<1V1kk~`0=3Him(&_`Y=4A#R>Bxi+*xZjaNT$lOo}r8mp}(JAtcpS=oTc z`Gq4N*Yuo&mXeaf;_?0SYimeLN+*uyP>;7-ly?O3u6Agu{d}(Pu z!6!rhz{i3ogBj{S?(S}ucXefb`2K41d0b>N{Pk$vA$M-^4S} z{{mH~t(9ZEk|}U+S=@;EIwy~MbUXu9dw)On`os~HM7-Kk9!kD&XD{cO=oRp*=U<+I zmEAep$?02hD=a(OQcNkWY={3S#s<-x+To5bsg$s>p1OnP)6q&X#MV~*6xSa;B zCza;gjDbfE05MIUz1QA(&y!+g~jJ16)63Q z5M|^P*p33mp>eEN;y!e=72xyNqz9^GmznGQHxGnQ|Js8Mn#Ax5B)xlw<9*=N-t2{y zlznNoCdM6wG|KAQp$l9TI0V}-cl(H8srOikB_tWStG?tGYus4^n0xY&T9RVye6Jp z6QnyyimVFoH)wKo10QPsI&H0hMd61$u*2$UjDrDI+(k!lL}ysW9znT%aE_3<)Q zo$sn?%PIR@t6xO3GNq1zL5K#Xp)uX!?{A{!bZM&4C+CZ0SdWdP8~&HB<_<${g^mH$ zlcw1!04Z!L?tw**!fvnnoCss^+|T;t9K3+V3hX1y0H8Q-7mNA(-tO!S@0x4%bbP4z zrsRnhmj1g_0#wxJ*(LHl5mYE-DMBK4_vN2$&_ycBg7FBt+D!YdKB(Uj6u$8x4FM|n z_wOGFs2B7FVB<(jSc5Z zWNL((b4C2(d^b2QN8)bE{~Oqb$DVBiE=V>l!0z zN~rTv*64>-+t3J^Pe<$qr{2xKiFHs+>YY#m&UYh5gmBrf-@y}gq%DvO@l57PJ3{c4 zm1RW6-V92;Px)m~&%){jrrY7n5E++Ie0)5$r2Dh#%82AN=q>?d-(CMHnW9FerjjIo{|;L^Wb3kWFyFpSPsMM-_4hFGd8S|o z29grTm&51ITM*lOeqKb3V?s3R1dt0lmnG4Y1 zxK^+|)*W471lue9n2KOk(#ROYNlFqD^FOa0(doYlkOn$z8ynn9XWQ$Rm**i~@t$|g zBcS+-RC~9(^xAp6wzRin-1BJM5pYQ z`^Hhd*Nym9Tyiq7cq^oE>-h9^<nE6SN8@SzZT*I2M4#>(jc5bz%3hxF*r7{OoypPCM92FDr#;*Xb>Ek1HvsG1s&0a4r2>n2Rj_jpl640`1 zzuy4K01ni%NV*63SJgXr>dfE|e8iZx!LUb}WJS-_le zy3Vl=v{{Q=TZAy*pkJno0a67}*nQfs`M=av$9!?o<`<`_PS4*&L8ixJDEa~n6gMW! z_rOJlP44f`tAX*d2KCTh3(Ef}SV~lriQQUVS_*-+{A>?G^E_B10SyE6J?=c4Z)N!V z_wQttB^uN)AS^*an3(%QN(0qXiQ8w&l<)n%@f33Ru%>`Ma5fB`g(d; zxVW%Ew)}a&26PN;%*=@49GQs9N&#PAUr$o1l*nr9*UrmoH&y6(ZG~C;4OCSlHAVyY zL2@JP=H~Xm)3Y9Azn^Oz=lO5kyqR27T-*;N%tORO_`=?A4$>$MAnx2RPTi(poZ=DU zA)Isr|Mc9PS*>Lk=E*h;og|_pg3Lzsax#ui6s~i2c1CJa?M8Bgo{hhKAf8$SU!+0M zAYQ$G{dxmfIdfl4n0ZR%gIfCX3^w8+VlQjeg^`g_7z7HaT3QF!0p7iLn7t&IP=3`Z zg{s)o4Z`f#5^kM9xFLMSc!6U?1K#a62!aqWHH4C+iVlB3-o<|H8k>X!Ehxm1a}@9F zJGPoBVcXy}4Ie!C%v26F@_9qT8~w5u))1o4fau>SLx^5 z6`>&UM+6=m9H1_EBPyd|} z1sFn9R21kQr~GGTW-J~(!iZ7~2CDH_qe->cnanKs0vo8?VcaE2#vOd^#D&T4X|p>} zWNIngmV3WGd!8Rx`; zxc;fX9~ChR?s5O$ajPGhee z6Ivvo#=`>Q9yvAy<8d7w9p+zv9LHp0V!~&TAcx_)P!RuvG7RZYUYPk`OF^?zs?$Xd zog{JyTg)#$do~K__`7dRqJZKyo537idM@1Xfx~Z&B0bel92)6WXsbh-K_HpVTjCNy z3SC%>zSWdVX=of&KOVfESHLBO4AHt0w6wO=VpRmS&v5$wX)5a2f>kIMCIe{@8Xu2& z>zNpjD|r#J(Wt0)2OxvrS#4)H!IQ*)@Q)g@krA1EA5w5)>R-mZJg<4Skk)@@5tGM7 z=hr&A3UKaMN@J8I8yu1&_0u4r0rGw4*qJq+sf`0}T*&W=V14u+WK#mtX&D(|&zFz2 zxMhI74ugTe5g`CqH6n7;wKX7_xDI+51L!|T1k^;5FKlkU-t-U=k+QKfh^TdUD=jxr z^gTEF^pF%Il}owdIYDlPLu4U)kIJ2IV;^N7ufQzI1FyT+NXry72Z9)rGBA{Kt>cbQ<2{!Aw|mRaG?@;TLDJJb??7roZT$)59TAcYI)orl@`2@7!yb zl}1_F3?>JSTEAVM+Hui}&;}iCe;_v-E|E#&e;xe6MN+?XgoZ(qA7beQbCN2B8KDYA zVgC4=djw0CdZ*_?JZY}jLmhJQ4;xYcBpJE-5q$G)G;28VvI?t2u=#1xE2F-3@18D zh3p7?E7`W1Z&f|NI3j?iJV?`Qk;|c?l3e?J-QPNUX9o)=Ik8Ad|0$(UkFF@KoVV&Q zhlUeb=)j%h?We=ZZBC(~YkhU8nk6HHAtB*K6%iaAfA=4ef!~>u{+ox9P`0*1FZkm} z&#@#mv&Y5ggoGcUM=Zsu9SuHwV&AEfia6etjN2b<+K*jS|fXm$MtlY(ypJkD6{H=K0;rj6TRjDJNkdp-+ z^aIFG8Y7?YpSp2xY?dHJQj1I9LY7SmoQ#^@iYig2$QnAhZ zWOvsQo-A1%a3umHpQ3Ca7Pmf^0s7}4h|YADmL&C_&Tr)RIj)rycvH>gwg;^`(YojV4cIj)olJ1QnBV#6|*c!>?23(Os z3KSo-Gtr>zg2_|8^h`QXF%mjB5RANirJ3|rf%7E`FE8r1;!T*TAzT^US6m+#iFr81 z(RU})X*>j&`f_1jo15AjjjFa2=<7OzCIqxV!%b=@T?zom1v->f_Vz>B!6pQ zMY}_B^00~85~Tf%kSbBxhUd{a`sr!Ee&LV3lf>XLIPLsi6V$n1QrsF+u*3^3zUJ<` zrD~df5%$ykR^rKD09A*@Gn4bCMgcS5NarQ_=!X`}O1`&cEWUG_yZ$LWK0(Rp|B}2g z?YR1L+R<*|Xuc(y%X0DGVMjcuD*#JL%Y7>zrf3HF z(<4(KbUuZW-KrzF3rSQ1brs%r<irqCC`I`Z1HArO+1mz82 zpoy3`bDu9qBguj0mdun-4#!#)eeJT*89=XRN&8XtB~V?$qkzBrXfH|R?w+!{n$r^V z@Ric?*P;l+)^l`VDx(_R_ynQXQQvrL!ELcH5pql(knd0n-h}hwhQkChMC~;QRzPD9 z%EXxN<$(kk_6)rHnznuL9SV|Y+a(JANl&e+qvYn_UIL;?+<>b=F>hCT+lgBO@0Tf4 zz;BV3voRk)AYzwcxi(Vk;hthpVi5aF9L%RHmSXtljZxZD28{7HUDW{WN8KP5>cfm5-$25vo&F*ohV| zUfzJYX#(UbLE{nxA}v@$ScJ+;tA=rN5)L6aIet^`NTvXj@SPp=*3(O@97*3}nS<>% z#Zi45fn?c>x^jRoMV z4Dh--(EMD?36P%oanv5P4#cp{x0SA%OK5gpJC4{~MML8Q)3TMOHmH;ilexMbPbd1A za$s+EhEf6c2-s!*)Mcug5-oGz4nB^QXsP4Vuc7;0{A_xdoILUN!5Pr& z6ef)~?~Mr16hX(4LJ}B25K$tbM%(2n74Y}J($3sAZ4;s?!o=q;8(uKNX(Hzn!E0|h z9Pp$r=YTl@q1id~`qIhuBVVc;c?9rO&t^O+?IyCrVcg;L$Pq)PZCp@rfgpY@0L1?U z5J3#9JFy@iAcc@s*xJ>{2S!&dK37WeoyL<>_rfDo$UrPpsu)o-n4pb@cKywR4>W6| zT`1PQ$MurCh4h-|G5W29%Miv?d>-bRoQp`IuHh2ZClvB5pcc9&2jqI zG@{P&TlGI(OEn7ER$V5?O*(ix;D`Gw54SLKyDude!#R#2}~h zy~gX`JZ5|LmnArx`b0!mch2(cZwz>c7&H)M6Br4pZ@uN?zW0+LUVj$4D@sUe`uzA< z*DEYm+Yo)Nyr;XlbFSrTV$QEm#H}R&aWxYvh034EqAbm;8xPx*_P z-Crwnzdkpt-d^R8XN*&N{+v)la~itkq5zND&$ctG7|dEG`SIDyGUVlVcja^)_bwMg zUVj=E=xK0a;yFmac>kW8UYb5+b6S8^pwc_IAVG!^Lw(@xvk2wtP-0Z7G&eZT&eOw< z``?nU-6Y91V&_?>7|QmO8lNB0CNeYIh&xPE)E{H>J^d|&jV?cqi+1NvAJZ^s1{o_% zPBi|UH3rBqWM_9wHhB=v%+9BsUKYN499*E8nZI-Jl(9GVcg(%=+aoPaEYo>9yvLh$ zJlMF=vL-VIBNHVTs)!71ZBoy}H~2a_2~e8ZBM~-K$J8SIm~(TruPnJXvK-7tE8necOBBUgc@{Cu7Up z)T){b(ilpDzI>$$;i>thK7oamT1MkKf8Z&MD?O8Lm%iHFS>dg9aHPK5Y-n>DNjIUr^4**%1{(W3Q8*NdI^bvFZ-cxmX zMm)4TZ*p_VZ{0Fq*jWs7a@)NA;R0d|vB$Qwg6l!a^Z6g&bPX!ltu9VoB4d2iu8G+y zkdnSfE+;RKX_SUvjtu3GjAQ&EOm6e5shK4l9vyDN4B?z#vE+jntFUj4&TKSGeOJ+v z9<9o&L*ByEjz&g|CMM&HeN5M2R53_+T7YgYYoRnCK%LikC7guq?e9t@j+LbkP}X=) zHn?z3=T*g1{&rZ}n%7b>oU{*(m{+=c7k*D=E%woXvPEa;rQprv*|fWMFOJ}8r$_U= zJD#+{Ohk^Bqa-gm#TQ_kU{KSn%)~R=U2JTz=#35eu#2~Ld>@r^3Et4G2b_D-fBm}GZGCZZzCqz_laf!4`C{xz z4g-i>D0!6p&6>HobLHkOH;tH}EK^)Ld!jDi>GBNHE67si()c&ww;r5eWJmj{W70>Z zd-sB`R+yYXrOh@;7;*0=i4B{uFfK982_i4A8d5D#i>EsW8)%N(txisB{qCOI8alXW zHK954m1}de#4?v+NhueVraq)3Bv%Wkhq5-dZ>mYrjA4OQ_S5rF2yz0GF9buH(&tXZ zW8YKi+zRGO? zJ_V*N4qc`IG4VpYxJ%Z9sjGoB4yWh1ozWBpRq!_Vtt^bay`?X=ukxLD7Tk6`GYqTR zFKeLLrwWUfp*^zgywHBTzTv?K20}X<*4&4|IT3V_LdOC@Y|2)1t!={%Y4}o>(mQTAsIT{$`>%F=# zzxj8o1(lCaeUWeH^e;aIDgnP1A5K@2Mu<_mpI`-8KiHl@D!jkp;uZtlMJAUPNlGlo4kj}91BBEvg~>5(qa0hs<1$6{oVI5Ao<#(I{i-G=jsYZE z5H|jSyqX⪼yw^;^I|%UmxLgUBD;z$hX(|-gPIjiB`L<&vS8c^%UMg0|3KSv|gG2 z*8g~sS6;yyR24X6=Q>$=3(rlE{d5}8L z+uqY0F=wo@vIfB$>w!3An9yRzDmvCKdv(Kqt~rl@zu;L|kP#~z8`Isp_n$?e?u4~sf2#A1`lr%_#l!1hlbhm&s z(jnc_tuz9P(jXw6g3=`*DGkz!3P?yJu;=Cb{rJY%?;d0Sa6Hd2uKVU%Yt6ORJkNQ| zK(TYLK)9)bKgkV}0_J-^M7Iwza!Ab2>NJ(kdZF>5*WRPS`VLn7^#6%WJ(6Vs7|O{d4vEa;_K zH8sTg`nESIQ;pTsqG8Xv!L>o=xS$e}k-;MKyh6q#i##0fXBm9sg*wQNycWAap^z_5 z&g0K`o_}F!npJD}G`W~JJ`ZL%d@+mt32_)XFW)DU^75pweyJqCdZl>wtQ5tki)~xW^sS_c zRjU1}p-{@i%uH_HZQs5*YcpWhNOFA8F^xSi|y*@Us4TYc{P`-5? zjtjrIGSiOGVMJl!g*&g@y}`~N5mq=$#+@3%u1W25Rz0zu99>NY|4T$ zSc1vt>5TI|Jc!a+IqhK2^78WDx8PGaCZai`Kr(fb?ViJ5%st_V^u-hIITD1DwoRUQ z#>U=*r58h|)Hc1NTz`4sI)Q_|65v#@;a_8R@ak5rLh|+;Et3Z$wI40+ZO}E=l%=La zp=z2sjs8LI;E)IVag~+kn^X9*mOn~^$ml~&X6ssZ&JL}*S`t-WM|KD-98J7RmSQ7; zOgU3%*jLHNtCx~f|BRGpg6LvN-5pzNr%5_<R}xV-w=q3cbd<@4?uQGX?yWF!`r<#dI2eq1d8<_S;)zP<9HZFZP z)O}w{)0x|{;DugmX{H#@ydf=33dNMcFqN`p30~pJJAkM@X8Kc}bQ_E^hu=9k9|8=Rj*To*Xf~9ZYL0f*FI$OXF3QyJ4 z)I@6yBn(~~GKPY5`lBXVyA`Rp5)^*O{^ zfK4!OU2!KXT%2CYnXgHiURm=kzLYd39TCyt6uvZzHREvP@-hw>={~3g1co~`;K7Vf zQg_>pAq*zvjHPFNTahu#HvUu#LIq68l@5Z-rfY-O!3h6IN;W{@TG0helpI6h17V!I zou5lC4Zhxqh>B`{k1u7*vB^87A?#@+DUI2p*AEjNUIbXLOXXAw9^gKD6oD_az5OF* zA)uwrgNC>+q z2@Vcw_`|}YqAX*vTX?i{G?y-WNVoWtIhaj7RwN}!?mOG-gVW_b*KVLWI6i>DotHmC z7L@X9OrHG9TVaM<)hN}>W+@L31_ec90cF<)>cT=N1`-?w!bp0;$Za?Zb;o`U{_-}J zUHYf9H@|r|J;*_%SFQ|=yi4VqU6Rv&GZ-u=C!fOjcnlkvnzAU>_4UKt*Ue0<3&ZjiPpgR^D1yUW!C@Bo6bQCt-i8V< z7mNGhWdm;DU9AUpj9{j|yG%-I=yXrWgn~P?U1N2PE<{{ySYd?oEg&iBxk|jx;;|W= zJkHTN!uQ+j7fuue`91DTF`76y-0Z)%Dx;@I%705x_dOvn4#P4sR{un&rwg=9eyF0c zlEfbUay>NkbJz>*9-Sh*w1k8aoCNk1IA{?{X1(J)*6IiCZE?p-BeK}}GQo_=);txC zvkEyWY47Ss7dN-g9y&!&oS#+vXgIj<=n3y-E0P~ON|$O=n3xS!?@v{7Y7Gk#o9kVoow$dgeMDc#e*zA-blq^yhJMz%yQr zYMEszku246NIs9wD)7K;T2tvoZ*rs(u!z0{NuQ{xDJ}Ro9Gz=H=Vzyor+m6q69bYh zZ20Bw=!ve;+xnyoGSb_PkuUtYUpd#mj#KUZN>a=5Ylo)|zg0}+Z^nKjv?*r)w z00&Sp_k@L40BVK`WY;X92l*W!Dp(!7PHt`(D8O#CK|zrSEy2XZ1mvZ?a!To{B_o^<%Mi4io0}U< zbhsrvF#}V^vY9-Pb^_)0d>EN|czAg6F5yR90)8R}Cgyk}k0lfVAqqJZqQED4Z8aUj zg)ZPOMQ&;7P0@?LuK9jqc}3sT6orYbf1KEFG=!HK!ssIS6;RoMvV!nU6%-T}x3&me zU0p$8>VTgF-WTasuHagF-daTt)h$cB-Q8V6sz>)9m*(YR$i`B)!TVX~nw{E7T7ByC zr|~J&!U5&S?rTye5Ga9ngq6L$pSlRfi%N_B6rnJmdH1t$xR<lbVt`lqK~KBp7QK%NEsrO}pv0QA7s@85|fv9E)aKV55= z>UCUy@q4zO$7ZsOrU57g>|9(-P_leOgf?z(xv;4zSapG!t2j`pU1Gf?w7+uMWZnxCeVkdr4tUE4MAb?^tA`|SeAH8Cws zPRR4O64Y9+Zz$3e#slLs9%vm205u$+DF7EjgZCd6_M11EB_t#|TU!GorE+}C?PCsC zmO3I<;TJItr}W|B!j;ZX)|l+vW%1VcMVq9&X@Jy}6{V`5{A z1OQ+Xq2wp{{u*fp~cCSFe5-4iDp58BASfPdxtTR)M?wkPh8v(1B{rt!40MB}$qm$y* z@U1_!1FE3Fi~*-PESTzq)YQ)b*pv(26DL>Kcl(?bSgHMCKxF~WYdAnK$9#~AIjE@` z9vy{q)w6`8B&eCl6riws%V zy~L`T(FxUfNZ6o_i`ZYEyaC=XsLd*_H8Nj&q&Q?MeHUg5R4L#bA0IR07=XEH{pJE?dD?4&5F@AsT`<6^Bm@2#KC40Mxet@ue+Pl%IXp2@ zrcGPhym>d@ZnDh%T&K=wA8Ja~)YXH+!orTAn6fb{^Bol5ukP)kRnyl; zFhM@4c7r?bhSIk*ACTSD4}Ghe**-Xk5AYvyFwaW~;+ z!)>5ec4cK=kO*oj1J&51TwGk5hJaE9DLrB^har|B07yqyRaO0Z;|lp7*o47;@~PMR zev5~KLUbqJxF4#i;VK+qqv~%AHM;#o4-$uScSaPQqJjdk*d+1v^mLk#J4f^1T}6oe z62OCjLOS%I#W!XS|9<%4!ZJ2pBkm?Cl=a_}I(!$S}nuYcj~ z>#Mlwr%48ZuX|^ur_y>PN57|5#x>U1b^h%Mm;n(wCm89Fn$v^dUpf7M!`}1h^XJf@ zAT)~bpo9b>R4cp+u!h;b*#D+|dN4!5pC_!6p;bm!2-5(lS3vL!1HT;X9&*nOK7Rgoa9nk15CshE_RdaQiC%SlT3TdP6+cqX2p+`3 zl9J?^;{q?s%A(tHY*&-jdt*h`o3AvfNE6vEPq`eCEeM4$SU=9PWd zSp`dFB_#cI^a6l+N5N+nD#h2|_ul!;X~zs5vYk`-`QtTxg+ah&%>inVlcy(wDhI|` z1pK2mz%2oh4CbKJ2aio8PJqK^M|bLu-Na&?*m)ov9N){@0UQaU2x60i-S~4F--Bf@ zGA`Xfz`#;aQLVt+0J+w_^t-eL5tLy9`4|{%m%$;4xW^!esQ>XkE-r3~aSJWbfidHH zI>36fw6=CQ=v?>WF!#>*93>lP(tOjW|HS)!L8nEO&%p*_OND4?GF@c>h88lYyv_G$ zt|c81^dESdIq$Z!ENwqkfd)(|SlHpI3_mwLcAJ`<&})YY}EKFE~%hp5zvozl@1dwhLoE zgoVY$rDHynF%37NuN(V$Pv<#s^$Y^wh>tN`_47&5#N?~3p6Ay;z~VmGdKkNGQ#0Q%*HXS3CR8XNsKt~5TUT>=!Y2+b2vH$)% zp2qjoX-QI~um9Z?{B9_pEj{-t7pZ`&I_SkDln+aC%wT)n+M#$B9k z0rpEFEGcRA&+?~dLO0PVDJg4yQ5CZajSLUR&m8=8b`+(Jn`F6$cB>kH(TM`|usgnQ zRNe?l!1*Lvo&7RcN{fsGR8&+-;fhe#r@)<{ZY$T>%8(pXBHlJ`A ziBM-gy^BSyvXVr@p7W&Teh8AXU7x%(ji29TO#@?YJ~7cPC-({NNeU_-{q%xC(l;H- z=(k=lq6!L{hi#p3Y;1Ka_jUg_dfs7N_?p|tYdt#~(~9;px3xv$!mB6*N3ozd3$_CM zk`j{Y8i7qNIdzwkhdehrd&I1S@uDp-G4rS1^AW44NMK)Shzdk`8hjv&^!^jxXF2c6$aQx6Lpk+aRvGugmDY4>>PALL!+>;PWYn?B;#1_KSycb2>k?B6FU}O#baS= zg+2vE&dMhX+J8^h7fdKj&i`fuiHuYvV^4;+H!(I==-~I85bz^{_o@RN@Z<_3QN!c4 ztSDp+cgJdfY`FaIia9tjfd}%W1&mO1UtckjX|1zw2n3lKRWFi1gMW9xk`N6k8K_l$t1|)r1Zh15|GKs z%OkF~yxKOJ-;w>6_022P?qf(fLhdONN`u>b*2p2XM^I1znbCJ$1_tw*Q|rkGL|JTt zlkhbDTeu*FeDYw^;#~R@296ah1gkS?oEe;&db7-!K*}WRVY(c;EgpqQ)b=(hBGBE;bI>?3jQ7tg2!5~uOQd}Lu1Aql>?@%Iw?r8x6d zIXh(PJZagNeyh@GAJK#3`UgKUQWx#fqgzMEXW$)u1cS{86xg8VW-@L=jgQmVHpneq z1;n?yI!ovifkeuiT1lw)?@KxWU_c>MbJ@&%669Wa-rM%R->Mf1N)5k8IZg8m9G%j2 zL$;KGm|bV&5qIh((5)k5&p~Kok~xLU06L`KgNBE7>pHTSn23p9-}fb0pLp{C^1F}+ z?nt=t%*1g%XmfZKzk?UFD{#r6iJl)}kB+*42?FoOFOI>;E99w%+g;?WpxHevG|fOF zED501z9uB7BdN$L8k})F;QM(Ui8(pzML?Zo`}{oh$VjHypYH_L#KTYxbHc!7&-Z&_ zsP(;bdO}9VkcZsBU3*h@t89J|Q^)Jp-BA**vAtmJ&xgVgDcFrdwbMj+i05viaJ+2z~ z?`c}v4HUes#2}I*-!PE#Au+gpZ&?n_hX6l>0aB(LbAnLM?AExG!plF}6Ln2-X>pho z$=b_Bn$1zVLV`sxmE>I}3K?$+M9#0ZQx&(uPvwC}wtx9!rS!7u(i`FRrN750c$B88 zRZbFIo_GqoX-sZo@UhJ*1f9 zVYdDjvhZ-0&kmKd%ggiC=y?0s?%u_O9AejM?`(E%ZjkGmsEphv*?-d5aPrJlr3W_d zqu>aFcfv${c0GC^)!w_O%b_KPhQzL5*e#%j6B=&3fPA&X=;mxu+HD)*?wHx&Vh#qC z*SgX1@o@kg>GrU82ybc{h-Ug=cxo7 znX)U?_}&U@OF28M@_|frbYw4M!Au8YGGLiq?g{Bv(&(p;HB{5WC*ZKMaw@%Pyd)bp z|5!Lr$iTpdQJ`Mew15B!3+#jf0(Pj@u4mEXoO(peOd?SJa=NtHbOjUB0{iM2_FGk+ zp2fDWQ~0F=Uq&@L$_%S3EMr*F(IqP^mDw=RiDpfsfR&J|$!ZvO{XUpIqBZD6G9V1p zfI#w~?twbYs`Rih+(Yxu$g5uGA5o`=LvU;Dhv6cqdyqR1hnf^F=Z=HTTTXwy<^tYe z_fO;Fio4sxXe7-(B7cG$Uf3xJ;tqEX7j_DZi7RNLHRP52g1+?=n07{HLRoSMjj-k7 z=j#CwmODJGwQl(N*#o}Ag^8sZxJPYrDubrNOsK#lO@Yqtg5V+YDjJ2Pe*@h8_3UYK ziVpkd@~hsd@ECYv+rTEPh+kUN=B(9Xdzkk2K^-VZ_7SpoI>7p~xG_z-xO01H^X!>{ z)}otBl_cm}w4$FM3n#N6har;ZQS!o2+qd%9+sAj&5ROIW1FzJe5c~$RNQcB!!8ZEN z20bea@9I9>u=(-m=5fKSi|k{jcQPEm;tdxiaXZe%UxdCvmRg{Q$h<7P!m#TZOse3S zKwdW%!8xoH*5%VJ*2VG`9rNW*v_&Ut^sG-H)>T;aUp`t*8qxi5zy$K2MX61ODaAcO zJq8w;^ELS_{I*}BCRb1h@m|!_mBPg~GHo`$!rzhzfiVQy)uFlLMiI0il`#c~_FY=cT!nd!tH#4w2 zvGHjC(t!1V9`K=)Wte6sZmflc!*Svk-@c8LTMcr_YG~k#+z&}eW;#^~1!0;Eaxka< z=zAQnemi;bkW2S9*59Abn7Hh{kE?{xoScs6R5G4FFv$`qGdz9Gf^vwAiMawhvbb>z z?05G4u7^KNBSC>#^{2G(xdV%B_fNGfWc1Cj{qsn6t)(n^tx+Mu$nU6d_BCaHAu&0!8G28lq5f^(Nh39Tq4T& zO;20^C-Q^C@%jf3=?BtbxB(XlX~Ldtw{L4rr3*n)E2xBM0&*+P9<5Qv`y z+S+AfhnuU9!@zPb!A8>SU`%rSJUXY)atG`~x2(?9BXgKXp|@02>7$F_TysM3djJR1 z&}pTcT(_z-h6OEISDCf_>FM{Sy`LW-cu*NNb0wVkzj6)^)CP4oc;{i zSGbEgAG>^ISAEg6C2nKmjt=0|iwf{KAVv@5e1nEY3(z4GVG#wD7z)!E&9^Ct7BWBI zvIv4w(eH9A)f+WW%5P5A|2u);eD2HxtnN*xUt@+S6axkyUoV*T2z5&CeRgphRoBr8 z`}%>$d^l^X!bXz>Yy^@@O77^bDIJ!2z`T|+DzpO>l+?o!8hZB_VW8>gJS0k)@KDWtKGrtF!2AX#GKsb9>Tue-l z_#_;kOUcVKTMkeL=PO14toqsJaB_FX{nSd2&0e2OU*E!Cpld*dWp)*|A_sDk9Lar# zEFVOfRTZO&f#V{jfvE5Y?C@}rsKY;SgF^n&&WbaI@BujpiVPX7t04rh^{E5wa*%by zmJqoJhXGI__&7K*;WVouLdwY?uBXS`PgI95Y8(lg0a!C>ySl!m35^r=r^bo@JE0V~ z`T1=ilIp9ErJYN>+dGv>>RO|@1qH#%=> zrVL~e{;RFEO+@B_>+Edv9$aNVe;%VK3X7a!Z`Utw#?Tj;_+S&rZl1P!nDojt`nk(JXSNQ$snEYXj ztyk|=osJbJ2o~;|#Zr*s%dV)|h(rW@Sgsyh88NWHP$<}fx>JoaLe;RT?>Swqwh|U- zym|Gic4))})Gj8W#tf432JN%ag9uqzHuJV^nPic3QgBq1yo}R!=BHkEECvie|1-L& z-85`~hs6wuiOv7u|DO}yauq&!`If#<;8s@JRr;SXy~6m^+8K40{<^~qJa7EbG9Ght zCCIah- z9bJG(aqkruFmdol7kcBK&WEC> zJZQt_49j&k;A)Av8vx>Fdavy~M;B1t)A?s!wRbxMgsc?PmMsEG%{p1(e6U1Z>`fB|J&F?a0R#j(*koS=_O z-ciFVjMgp-niTH)*uK85AgV?Wq>BZ<)VoZU>zMB5erNH!rQudX*EbjVpVG11TVT#? zgIR52k`=MB!HA7fZs)drED3FbKIq-T;Wqq*1!v={ESK;)J}J}vJBFZx^4!*@InvT1 z9Wp)w(|BK$+YbC3wpT4kutSmPmLbwB^Is2#DBNeUTrx_>$J3Luvfw0uOKC<}*z!y+oW$bLu`%sCoEyQAlPlH*cUe=L>8LL2BFY=GGr&DB z9b9?!su)a3mJE#3g5di**lOWurrEw5Bp$lDY5;SxwAbM(^%UtfR{X+x_pT{j(UZ$4 zHBw@ihv6PUOdh9j&MRa@p*iw2Wx3GSl9xG$g_j!bQWC% z@A-?U)CH*zd|$USwv)oi}0)Is8r z*I1W3^Fyd^IWME`33*&wXulEqNm*9n-;Lllgt!WqeBV+XG`%=#s8_}O``2IE+gm#X z(`LSN2?ZGk6|4mHL=E+&R@j{2{-CD)t$k>yc|@I~uX9S54sP2^6Qw*v*Bgkzbpazy ziq|nlSvNZu8-l7Z?O*~=(mPZpPhvVH`oBvb-<+)H(M<}AwYE8$(=YwF2~eZ9S=4h!f( z0L-Cj7rS^&&t=cu=$Yy-`>~{i5kMn!5PxAj=~vx*%^^J}CZW1IOPx{yRC?06}+J z?!5olf>iR+qpNTfm+Xn1i7D$@!(CcC43JX|fKFB^0u3K;k9qz}$mJpJx=Mbx)Fj98 zw0wNt^=#ABg88d4ZMl&){kryb&UT|lj8^>c)xKer6Wod36vAfH$_sfE7{ESeN*YS0au)_n|=IvF|*|mghQvy`{ ziT79&t*3Hl_`>JCUg0e-jmDsq2N zCmH7g=mR(_1ZGXuO8-4@@#JtT4n)678m#=*SHAdNot-9-*B&K^Ok_vWMAGV7R5GxH z6EA_s1A1Rk;^E;zyUa)s+!)2gjQ{@q|I)9gW@Z?n-6p(6IB|829V%K99my=A^B@SAwZ&A_tB#j_`E4N2q-BlXG04T zOkA?tLL-FChSJi~(DyO|I@cjhCSW?iIv^2WfBoRe0%Zj}1b&wfno5Ee`0;Sw7mgNU zT|-uumS(_d1Xa7Dt`6w~3YRd@p&xr`<-HZ0{5;!J(cD8hI|wjFXkD-=DGl}MLDA6) zrR#@p2%~fKzd{cWd1&)fo$BfA%m9iq3usWQpw&JGR>5OsM&`hy& za4;4-tX+Q{2Ls(@ZIEUZYTaFcJEuQeQ&B+=*in|QuCB)i8`Dy-oIYoYWq$NKPGn+X zNd!qJ2^0o-g4E8Qcct-r?~jg-K>iMo2X1CUa4>ombQUD0rJc838-_yRUa%0@-ZZzg zlmV=#yn>>lyqX#zA1^OGV?rdzxQlHey~*sFaw;nLz)E5P{SpJ!J23F#$G!g%*cED2 z6l?ZG>^EL{pHfU5>YC58b91wR{A~b)){h3_;;0=c#fq+dZLzIw&s zzX7}o3>1RA1>uMRRN__eaqO2Z3`cmWsl^{{LF*6nKNcT z86pi6Aa)+F>6a&%Qo!AT(SIX^K$IR#E;iLhhw0XgYGU%S{m>ue3JTQRB%z_&Zb2!z zvnc3PK-CqnwzhT+#dPCFh=})Y-eBsvall!Aa+G+?N!iQ#IMb(bcWU1-E2hLlu)HRT zT~t^|Pb1_;4}FGG?=^=T(KX!>SLaexRgH*_#(@?zopB(bD*t^Ab1;@#Fc^kB7a+D^ z$HfP+c5>BY;PdCs3l(K$Ocby;z+M77BzNjFu!TU=Kr|GvRuD=DG_Hd`0;33YU&)=g zEA0M@>AXHX9IK|LCabj6aJ_PO*Ci?rZU6WG(qS7W?nO}US_&E|D=VYKVVXfZBgoH$ z#L^f)e7^xR-_kv^mKK_*+>`#1smqq7WSzV zlc9qM=v}t^mjQ@kvvaVj>{|ZvBz7r1?v9l(_+1cG0?6qRG{PPxAUmmPYdh3VO2Qm6 z(*tFV59;{2^r|qxI3TC0+5^3Ymwx`d0&fq2tiUpd!#nYjpJ=EgLtlS?*PC5HMF7s_ zOs1s<#sh#EAK!omVJd@_Lds_W^o&u3(0&;m~u;36UL)%9r5i%FqdCt|_@ z46%fyBuIU@NXsao`_}XcG8KWI-3A?7K`egY=*SHdaeLY-vv%fSdP09v$+aGN<%lE) z?VO(MGrUI5V}gYLO}#^*fCB*~;UICcB9RO}99rv2A{1MI7El6*lMdPrk{lkD4T07- z3?LUTAD{NtRup`42Z)?mWo4kA|KIW-Ytp1jZN`5UC2MEk`^U!>B36Cg9_Kv7J-^sM!d{Sli;WXmc7 zU + + + + + + +Leonetienne/Eule: Eule/TrapazoidalPrismCollider.cpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
TrapazoidalPrismCollider.cpp
+
+
+Go to the documentation of this file.
+
2 
+
3 using namespace Eule;
+
4 
+ +
6 {
+
7  return;
+
8 }
+
9 
+ +
11 {
+
12  vertices = other.vertices;
+
13  faceNormals = other.faceNormals;
+
14 
+
15  return;
+
16 }
+
17 
+ +
19 {
+
20  vertices = std::move(other.vertices);
+
21  faceNormals = std::move(other.faceNormals);
+
22 
+
23  return;
+
24 }
+
25 
+
26 const Vector3d& TrapazoidalPrismCollider::GetVertex(std::size_t index) const
+
27 {
+
28  return vertices[index];
+
29 }
+
30 
+
31 void TrapazoidalPrismCollider::SetVertex(std::size_t index, const Vector3d value)
+
32 {
+
33  vertices[index] = value;
+
34  GenerateNormalsFromVertices();
+
35  return;
+
36 }
+
37 
+
38 void TrapazoidalPrismCollider::GenerateNormalsFromVertices()
+
39 {
+
40  faceNormals[(std::size_t)FACE_NORMALS::LEFT] =
+
41  (vertices[BACK|LEFT|BOTTOM] - vertices[FRONT|LEFT|BOTTOM])
+
42  .CrossProduct(vertices[FRONT|LEFT|TOP] - vertices[FRONT|LEFT|BOTTOM]);
+
43 
+
44  faceNormals[(std::size_t)FACE_NORMALS::RIGHT] =
+
45  (vertices[FRONT|RIGHT|TOP] - vertices[FRONT|RIGHT|BOTTOM])
+
46  .CrossProduct(vertices[BACK|RIGHT|BOTTOM] - vertices[FRONT|RIGHT|BOTTOM]);
+
47 
+
48  faceNormals[(std::size_t)FACE_NORMALS::FRONT] =
+
49  (vertices[FRONT|LEFT|TOP] - vertices[FRONT|LEFT|BOTTOM])
+
50  .CrossProduct(vertices[FRONT|RIGHT|BOTTOM] - vertices[FRONT|LEFT|BOTTOM]);
+
51 
+
52  faceNormals[(std::size_t)FACE_NORMALS::BACK] =
+
53  (vertices[BACK|RIGHT|BOTTOM] - vertices[BACK|LEFT|BOTTOM])
+
54  .CrossProduct(vertices[BACK|LEFT|TOP] - vertices[BACK|LEFT|BOTTOM]);
+
55 
+
56  faceNormals[(std::size_t)FACE_NORMALS::TOP] =
+
57  (vertices[BACK|LEFT|TOP] - vertices[FRONT|LEFT|TOP])
+
58  .CrossProduct(vertices[FRONT|RIGHT|TOP] - vertices[FRONT|LEFT|TOP]);
+
59 
+
60  faceNormals[(std::size_t)FACE_NORMALS::BOTTOM] =
+
61  (vertices[FRONT|RIGHT|BOTTOM] - vertices[FRONT|LEFT|BOTTOM])
+
62  .CrossProduct(vertices[BACK|LEFT|BOTTOM] - vertices[FRONT|LEFT|BOTTOM]);
+
63 
+
64  return;
+
65 }
+
66 
+
67 double TrapazoidalPrismCollider::FaceDot(FACE_NORMALS face, const Vector3d& point) const
+
68 {
+
69  // This vertex is the one being used twice to calculate the normals
+
70  std::size_t coreVertexIdx;
+
71  switch (face)
+
72  {
+
73  case FACE_NORMALS::LEFT:
+
74  coreVertexIdx = FRONT|LEFT|BOTTOM;
+
75  break;
+
76 
+
77  case FACE_NORMALS::RIGHT:
+
78  coreVertexIdx = FRONT|RIGHT|BOTTOM;
+
79  break;
+
80 
+
81  case FACE_NORMALS::FRONT:
+
82  coreVertexIdx = FRONT|LEFT|BOTTOM;
+
83  break;
+
84 
+
85  case FACE_NORMALS::BACK:
+
86  coreVertexIdx = BACK|LEFT|BOTTOM;
+
87  break;
+
88 
+
89  case FACE_NORMALS::TOP:
+
90  coreVertexIdx = FRONT|LEFT|TOP;
+
91  break;
+
92 
+
93  case FACE_NORMALS::BOTTOM:
+
94  coreVertexIdx = FRONT|LEFT|BOTTOM;
+
95  break;
+
96  }
+
97 
+
98  if ((std::size_t)face < 6)
+
99  return faceNormals[(std::size_t)face].DotProduct(point - vertices[coreVertexIdx]);
+
100  return 1;
+
101 }
+
102 
+ +
104 {
+
105  for (std::size_t i = 0; i < 6; i++)
+
106  if (FaceDot((FACE_NORMALS)i, point) < 0)
+
107  return false;
+
108 
+
109  return true;
+
110 }
+
+
static constexpr std::size_t RIGHT
+ +
static constexpr std::size_t BACK
+ +
static constexpr std::size_t FRONT
+
static constexpr std::size_t BOTTOM
+
void operator=(const TrapazoidalPrismCollider &other)
+
static constexpr std::size_t LEFT
+
void SetVertex(std::size_t index, const Vector3d value)
Will set the value of a specific vertex.
+
bool Contains(const Vector3d &point) const override
Tests, if this Collider contains a point.
+
A collider describing a trapazoidal prism.
+ +
const Vector3d & GetVertex(std::size_t index) const
Will return a specific vertex.
+
static constexpr std::size_t TOP
+
Definition: Collider.h:4
+ + + + diff --git a/Doxygen/build/TrapazoidalPrismCollider_8h.html b/Doxygen/build/TrapazoidalPrismCollider_8h.html new file mode 100644 index 0000000..db661d1 --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8h.html @@ -0,0 +1,134 @@ + + + + + + + +Leonetienne/Eule: Eule/TrapazoidalPrismCollider.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
TrapazoidalPrismCollider.h File Reference
+
+
+
#include "Vector3.h"
+#include "Collider.h"
+#include <array>
+
+Include dependency graph for TrapazoidalPrismCollider.h:
+
+
+ + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Eule::TrapazoidalPrismCollider
 A collider describing a trapazoidal prism. More...
 
+ + + +

+Namespaces

 Eule
 
+
+ + + + diff --git a/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.map b/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.map new file mode 100644 index 0000000..2f2c4ce --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.md5 b/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.md5 new file mode 100644 index 0000000..7b5ae4c --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.md5 @@ -0,0 +1 @@ +454e47315f9721a30455a4d878793baf \ No newline at end of file diff --git a/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.png b/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..b277e776c594fcb8f310f2935972b9edd9ad5515 GIT binary patch literal 5002 zcmc(jg{Y6beD94k`f{%B`~N6C@mclk^@LL zLn_kUaW~(6Zv6#!c$nGGnK}FHz2djtwIiOWDUuS=5BVxMlqK5?SIQ*HfFAs*63J}a2jQ20f}Nv+|lpr8;CNRu4M+ClNw=~k~< zK!9DQ-vDb`;VpQ>M%~2(#^2)i?lC4UWxVqt1r_odOzzH*<~jsJ+hr~PlYkqEkQ2Ka zn8I$eNJ}?nAK>C>5a#9OU0T0-D^@Q{-a0e$K`oc7nTya&X?EMQFH@R5$MUIwB=n=N z&+#`VWpjxN#-FhG`}f0#58su%_VFfM3PguJxxoPjPg0ge?8cn-SG2VDrH1Ofb}dG} z>aDM@yVzY+@-uDRyWQ7m78w5H$B(tOHCav8>*;^7#CM22Ze3)M$R}S=mgb6FcE&JB zAf$XbjNo*1t7~g#7xzw2PenvTRFezx@|G4C>jF+UTjE$0sRnL*khHhAx3yh$Y&dRf zYI?C;g9{}jCf;FZm-ag;udGaNGRAz6oSdB0fA(zGa8e^nRYm>w2;}TJ+MzWdqx&9{0=|8EM4k@9!_+vC;b37ZF?O`gb5Iip0>+&^c{m z!$CL=+;(`dKG_-1?l@lhv$Yjgo0yroIX@qK*C_bM4;dPo%q_VV3X?VWKi*ome3Gl8Xkixa_HB@1T7t%{`2Q5xr2>I^Tc&{DGU^! z-aO2~!^1NKvyYcqIygAM`Hbp3DK>c|B_)M~zJL4HGcw}7`@4sd?a_~5Hy0O9F0O*F zUj_O2t`igc>?|tV*yPJFZEbB4l9D3HVaWcfsw%MRuc$`EYC@+OK0dz5s6rfEmJL^7 zfr}y|ER4V?q-E}PXlPP$ax6kpoR!sVWhl?Z*Hb6dV9!j{X;ub>LizgE1qC(z9n3vk z8;^hgKKw3-Rcw2E*q8bJ)zKU@noTYJ%jeIbpB}No>wS;;`S}Mhn6=$L>2^$^K{fp5 zO>KbAz@%(kF8e+k zn+3MPkB^TJ-m8E_-lnDfAnBvcL=MIgii(T3Znv7&d2TancPzPpMbpyISlZg^YiT9M z$G?g|Ku(7n(;Xd3#Kdn}!pKZj#JzURe0+SAl)}r(b}=aet1BzO?0CuogBnG<^Py5B(Y+*E2HW`BOC2-MyLQ%GOpyP%t4O!EU_N9P^&9t*tFh#L<6iR@TgyuX8fmX+>Y)!Iy&m>>)YF}SHJw@?&0A$Ri&Y>-ZwQh)!CU>S_+4L{Mo$*0R+oM3Z#fMxmD>2<*(=-90rmRW*rwZugkgk11m1aF3Lf6oNodY&W;HJp>8g+}sS( zXwXU!T?5v9S{eh z!|9>H_WbIVnv_Hx-#Jz5vH3+K=c6fA ztV!Po$@UlqTSv#rl9KK1?UIs`CWkpGU>qwO8yjouIY!`e=U3pize$}6DliTF#VB44 z*Le-&zLEETB279fMZm_Y+Q;Zwg7Wh21~Vn|qDDqXldGyCudQQax*Sx(A|j?NnkW<* z^w#q{MlJVnZ*S|^*RFgEu_VEEqd!5m{A+E^)eFtx4YGK4c6M*i^_?YeQc}|A&!5M~ z$B#^c<=LJxhx0R8`YtJmd?Yy*J3rc9C@U=mH-RO?DJegZMny+YPfeMam{b`!0O#uI zjf4C+IXw-Ld-3AM9DAm(+~?$(86zsBo2%=?82aP0wPLeeY(TUj8pU`V+K@~vx7-T+mWxb$FATBz5CP58YL4MqP_9|Y%x2EG}0&@x6`VHZX1zc z*GXag3Nroj90XL7uU%yN3-GCsbJ7_FoE=gfoQqsH3DsVfkt2g5B5Lv(j-8lzHA+!x z^_kM-%6t2kIFPuwi`H5@L0I!e340Ye7j^a%LGvyIBx7wIQzJh0f|KsO^G&BsBXj+< ztZ$FO;8VU|HuIA`PA19o?T)w=7RCJB+-}eF8~j5u{ak4?GeH>4y9@sp0gd+s%0A{Q z?%dJuc!G;8vU73y;Nfw(Tadc3aWPrht+`5u7lhUk{`)s}Xy`&LPg6&6_J-mym?N>b z_ruznrCc`ospx&Clhe&y1_sIe{Yaau?^Z`MNl4CCJ^bXdm)oM*^LN5huP&FDGyiow z;W6TV8X=H?7ir{GUg5sSf5pHcbChnPEE@TDVw#N*q+FBNf3yk5r2!pz|DQ+ zUw~_hHa2nKiUPBs(0;b7m|1urS_f|6ps##gk@ej_-c(3c6;T6+w4Hi18{>teS=e^rl zKB*?olfcjeJt<(;*4A;RyN!w0oE}lmIOLb6&hKKiiGbH3E7@(};VkeOKpb!bt+5;^jAVaKeY#v6FV^AvN2VCaBvV66_vf}e3a9%9$j56Cbjgk+5jedO8nvWhX3&r4O@I(PL6*2Q!+{JA*#3SBIK0`6Uoo2YCKc7*!MeWKf|BM%A%~B8qstPI#4f-KH8tWA z5)!<;ymp=t1WdwB{pQO&sQ!nW*uFozjb}UE7|bIoBxn)_2M5(NrTi|=yr$O1N=*Cv z`we(TvDkp7V7vziGKgsqc#jg5$IQZ#k)Cc~U;sg?$vpOsj=VfPJe-{KPNH1eU*Ed7 zVX-Jx)q?zdP8ODhp}c3F)%5KhOb8YuT@8&A`^gFc%ii*e3WT_;Qe6+Y|7UxJ%E>{TKRV6RwFZa0%4hf9+Q*4;~{@CO}E$hUc~W(0t;9&QUm{0Tt-IpxRWS7Bm;OW5eXYjTkE+JQk^C;PVB9QpbA5cK%*%aDq3W))}{fbu*XsmgLi z`1zTi6#u8SycHD{?d|VDv!L6`^gqe_@ByJ=2)O4=Tu5lRvr}0|her18 z+qdLA$#1Zw6&2KtZ4R9!m#3SJEzQk^hP4(pHbl^@lPJr>sN&Mn=8YIeX#^M5;p^_D zmF4AIbabYS_I7qxxF;uv6U<~`VL^s?Q004E8W9oU8YTLOZTIYWce2tkQ`~I@I7?MU zWlP^xoS_yp4CsCR3JB(={@R-Dy*o`22J0CAW{By4Ygy5 zY>?~~6~g}9OuKV-Q&r9Y74O}lm_~t#FxXH~NC;56@8$U+pk3xT z4jvx0Gd`MbiHB}(-$8oOpU%(EFLft_Oa;XD;tn-6H7+i$o15F1qMb@vaWVN}>(ta4 z=n^~whlhvF=qU-(_yN5U5fMFj@Zh6qf^k0@si&t0`XK}Yv9Ym%6C|UCZcPz&Mkgi? zrwCYnbd38i4o~R^KfE3yXV()a<4wPm+(;QoRSy)1G2pD}&n~Lo8}JF6y|J}*wdeM{ zR)MybrY0dQ7{Hsim)HKm!3`1;&|Y+o|9UexJ$(-zK|(?zC@2UP0yfaPi2!H?v^OIo z0|*kx&+hIw9T&p|I^5K&%l$b(JU!h21ABNJM$?H13ko`krUPC*-u)BHa9ZRM2pk3^ zLD+txbzwWdprECtrBhVcsTv zcj$rw3G*&0OG`_T{Rs)I>+&ipDmpsJ(b1%Del{~wE=dSmNu909#xd?-kUBa;I*^pwfkF7UtijL z&kB?>-RgfgE7GdN{En=Yh+R-n^X!`WFHuoZR(AHr015J8Il-7$bf~N^1bRQ2FN@(g z8r=Dp-i*)_4UKFY8YU_e-EbofDjJ%C3A}I|CR#;g^k(tcj0{s3?7z;N{ylgyd(d%m ze0MyOzYX8XCaxOi)SUn`M|yyM9%Fu=ANMR3=7HZE*u?%Mx>fq$vsk}Q91)%r1) R@zrS?q>NNkD3mh}{tt$ln|J^K literal 0 HcmV?d00001 diff --git a/Doxygen/build/TrapazoidalPrismCollider_8h__incl.map b/Doxygen/build/TrapazoidalPrismCollider_8h__incl.map new file mode 100644 index 0000000..bdf82b8 --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8h__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Doxygen/build/TrapazoidalPrismCollider_8h__incl.md5 b/Doxygen/build/TrapazoidalPrismCollider_8h__incl.md5 new file mode 100644 index 0000000..140b189 --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8h__incl.md5 @@ -0,0 +1 @@ +0a77a0b440c18a81fcd925c01f564edc \ No newline at end of file diff --git a/Doxygen/build/TrapazoidalPrismCollider_8h__incl.png b/Doxygen/build/TrapazoidalPrismCollider_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb508bc54be5de018fbad768cf5b4ade2764a60 GIT binary patch literal 26179 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

-3w;M!P^7qRA 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 DtM))u literal 0 HcmV?d00001 diff --git a/Doxygen/build/TrapazoidalPrismCollider_8h_source.html b/Doxygen/build/TrapazoidalPrismCollider_8h_source.html new file mode 100644 index 0000000..f753ef5 --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8h_source.html @@ -0,0 +1,158 @@ + + + + + + + +Leonetienne/Eule: Eule/TrapazoidalPrismCollider.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
TrapazoidalPrismCollider.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include "Vector3.h"
+
3 #include "Collider.h"
+
4 #include <array>
+
5 
+
6 namespace Eule
+
7 {
+ +
14  {
+
15  public:
+ +
17  TrapazoidalPrismCollider(const TrapazoidalPrismCollider& other) = default;
+
18  TrapazoidalPrismCollider(TrapazoidalPrismCollider&& other) noexcept = default;
+
19  void operator=(const TrapazoidalPrismCollider& other);
+
20  void operator=(TrapazoidalPrismCollider&& other) noexcept;
+
21 
+
23  const Vector3d& GetVertex(std::size_t index) const;
+
24 
+
26  void SetVertex(std::size_t index, const Vector3d value);
+
27 
+
29  bool Contains(const Vector3d& point) const override;
+
30 
+
31  /* Vertex identifiers */
+
32  static constexpr std::size_t BACK = 0;
+
33  static constexpr std::size_t FRONT = 4;
+
34  static constexpr std::size_t LEFT = 0;
+
35  static constexpr std::size_t RIGHT = 2;
+
36  static constexpr std::size_t BOTTOM = 0;
+
37  static constexpr std::size_t TOP = 1;
+
38 
+
39  private:
+
40  enum class FACE_NORMALS : std::size_t;
+
41 
+
43  void GenerateNormalsFromVertices();
+
44 
+
46  double FaceDot(FACE_NORMALS face, const Vector3d& point) const;
+
47 
+
48  std::array<Vector3d, 8> vertices;
+
49 
+
50 
+
51  // Face normals
+
52  enum class FACE_NORMALS : std::size_t
+
53  {
+
54  LEFT = 0,
+
55  RIGHT = 1,
+
56  FRONT = 2,
+
57  BACK = 3,
+
58  TOP = 4,
+
59  BOTTOM = 5
+
60  };
+
61  std::array<Vector3d, 6> faceNormals;
+
62  };
+
63 }
+
+
static constexpr std::size_t RIGHT
+
Abstract class of a collider domain.
Definition: Collider.h:10
+
static constexpr std::size_t BACK
+ +
static constexpr std::size_t FRONT
+
static constexpr std::size_t BOTTOM
+
void operator=(const TrapazoidalPrismCollider &other)
+
static constexpr std::size_t LEFT
+
void SetVertex(std::size_t index, const Vector3d value)
Will set the value of a specific vertex.
+
bool Contains(const Vector3d &point) const override
Tests, if this Collider contains a point.
+ +
A collider describing a trapazoidal prism.
+ +
const Vector3d & GetVertex(std::size_t index) const
Will return a specific vertex.
+ +
static constexpr std::size_t TOP
+
Definition: Collider.h:4
+ + + + diff --git a/Doxygen/build/Vector2_8cpp.html b/Doxygen/build/Vector2_8cpp.html new file mode 100644 index 0000000..bea132f --- /dev/null +++ b/Doxygen/build/Vector2_8cpp.html @@ -0,0 +1,118 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector2.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector2.cpp File Reference
+
+
+
#include "Vector2.h"
+#include "Math.h"
+#include <iostream>
+#include <immintrin.h>
+#include "Vector3.h"
+#include "Vector4.h"
+
+Include dependency graph for Vector2.cpp:
+
+
+ + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+
+ + + + diff --git a/Doxygen/build/Vector2_8cpp__incl.map b/Doxygen/build/Vector2_8cpp__incl.map new file mode 100644 index 0000000..4da9149 --- /dev/null +++ b/Doxygen/build/Vector2_8cpp__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Doxygen/build/Vector2_8cpp__incl.md5 b/Doxygen/build/Vector2_8cpp__incl.md5 new file mode 100644 index 0000000..9794b11 --- /dev/null +++ b/Doxygen/build/Vector2_8cpp__incl.md5 @@ -0,0 +1 @@ +b35543da7b888c6bd84dab2507034d1c \ No newline at end of file diff --git a/Doxygen/build/Vector2_8cpp__incl.png b/Doxygen/build/Vector2_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c065448f9db1229867592a441e0535c8822c86 GIT binary patch literal 36074 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 h?)@*JK>pU@jK()a&)aMaVUGg8 + + + + + + +Leonetienne/Eule: Eule/Vector2.cpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector2.cpp
+
+
+Go to the documentation of this file.
1 #include "Vector2.h"
+
2 #include "Math.h"
+
3 #include <iostream>
+
4 
+
5 //#define _EULE_NO_INTRINSICS_
+
6 #ifndef _EULE_NO_INTRINSICS_
+
7 #include <immintrin.h>
+
8 #endif
+
9 
+
10 using namespace Eule;
+
11 
+
12 /*
+
13  NOTE:
+
14  Here you will find bad, unoptimized methods for T=int.
+
15  This is because the compiler needs a method for each type in each instantiation of the template!
+
16  I can't generalize the methods when heavily optimizing for doubles.
+
17  These functions will get called VERY rarely, if ever at all, for T=int, so it's ok.
+
18  The T=int instantiation only exists to store a value-pair of two ints. Not so-much as a vector in terms of vector calculus.
+
19 */
+
20 
+
21 // Good, optimized chad version for doubles
+
22 double Vector2<double>::DotProduct(const Vector2<double>& other) const
+
23 {
+
24  #ifndef _EULE_NO_INTRINSICS_
+
25 
+
26  // Move vector components into registers
+
27  __m256 __vector_self = _mm256_set_ps(0,0,0,0,0,0, (float)y, (float)x);
+
28  __m256 __vector_other = _mm256_set_ps(0,0,0,0,0,0, (float)other.y, (float)other.x);
+
29 
+
30  // Define bitmask, and execute computation
+
31  const int mask = 0x31; // -> 0011 1000 -> use positions 0011 (last 2) of the vectors supplied, and place them in 1000 (first only) element of __dot
+
32  __m256 __dot = _mm256_dp_ps(__vector_self, __vector_other, mask);
+
33 
+
34  // Retrieve result, and return it
+
35  float result[8];
+
36  _mm256_storeu_ps(result, __dot);
+
37 
+
38  return result[0];
+
39 
+
40  #else
+
41  return (x * other.x) +
+
42  (y * other.y);
+
43  #endif
+
44 }
+
45 
+
46 // Slow, lame version for intcels
+
47 double Vector2<int>::DotProduct(const Vector2<int>& other) const
+
48 {
+
49  int iDot = (x * other.x) +
+
50  (y * other.y);
+
51 
+
52  return (double)iDot;
+
53 }
+
54 
+
55 
+
56 
+
57 // Good, optimized chad version for doubles
+
58 double Vector2<double>::CrossProduct(const Vector2<double>& other) const
+
59 {
+
60  return (x * other.y) -
+
61  (y * other.x);
+
62 }
+
63 
+
64 // Slow, lame version for intcels
+
65 double Vector2<int>::CrossProduct(const Vector2<int>& other) const
+
66 {
+
67  int iCross = (x * other.y) -
+
68  (y * other.x);
+
69 
+
70  return (double)iCross;
+
71 }
+
72 
+
73 
+
74 
+
75 // Good, optimized chad version for doubles
+
76 double Vector2<double>::SqrMagnitude() const
+
77 {
+
78  // x.DotProduct(x) == x.SqrMagnitude()
+
79  return DotProduct(*this);
+
80 }
+
81 
+
82 // Slow, lame version for intcels
+ +
84 {
+
85  int iSqrMag = x*x + y*y;
+
86  return (double)iSqrMag;
+
87 }
+
88 
+
89 template<typename T>
+
90 double Vector2<T>::Magnitude() const
+
91 {
+
92  return sqrt(SqrMagnitude());
+
93 }
+
94 
+
95 
+
96 
+ +
98 {
+
99  #ifndef _EULE_NO_INTRINSICS_
+
100 
+
101  // Load vectors into registers
+
102  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
103  __m256d __vector_scalar = _mm256_set_pd(0, 0, scalar.y, scalar.x);
+
104 
+
105  // Multiply them
+
106  __m256d __product = _mm256_mul_pd(__vector_self, __vector_scalar);
+
107 
+
108  // Retrieve result
+
109  double result[4];
+
110  _mm256_storeu_pd(result, __product);
+
111 
+
112  // Return value
+
113  return Vector2<double>(
+
114  result[0],
+
115  result[1]
+
116  );
+
117 
+
118  #else
+
119 
+
120  return Vector2<double>(
+
121  x * scalar.x,
+
122  y * scalar.y
+
123  );
+
124  #endif
+
125 }
+
126 
+ +
128 {
+
129  return Vector2<int>(
+
130  x * scalar.x,
+
131  y * scalar.y
+
132  );
+
133 }
+
134 
+
135 
+
136 template<typename T>
+ +
138 {
+
139  Vector2<double> norm(x, y);
+
140  norm.NormalizeSelf();
+
141 
+
142  return norm;
+
143 }
+
144 
+
145 // Method to normalize a Vector2d
+ +
147 {
+
148  double length = Magnitude();
+
149 
+
150  // Prevent division by 0
+
151  if (length == 0)
+
152  {
+
153  x = 0;
+
154  y = 0;
+
155  }
+
156  else
+
157  {
+
158  #ifndef _EULE_NO_INTRINSICS_
+
159 
+
160  // Load vector and length into registers
+
161  __m256d __vec = _mm256_set_pd(0, 0, y, x);
+
162  __m256d __len = _mm256_set1_pd(length);
+
163 
+
164  // Divide
+
165  __m256d __prod = _mm256_div_pd(__vec, __len);
+
166 
+
167  // Extract and set values
+
168  double prod[4];
+
169  _mm256_storeu_pd(prod, __prod);
+
170 
+
171  x = prod[0];
+
172  y = prod[1];
+
173 
+
174  #else
+
175 
+
176  x /= length;
+
177  y /= length;
+
178 
+
179  #endif
+
180  }
+
181 
+
182  return;
+
183 }
+
184 
+
185 // You can't normalize an int vector, ffs!
+
186 // But we need an implementation for T=int
+ +
188 {
+
189  std::cerr << "Stop normalizing int-vectors!!" << std::endl;
+
190  x = 0;
+
191  y = 0;
+
192 
+
193  return;
+
194 }
+
195 
+
196 
+
197 // Good, optimized chad version for doubles
+
198 void Vector2<double>::LerpSelf(const Vector2<double>& other, double t)
+
199 {
+
200  const double it = 1.0 - t; // Inverse t
+
201 
+
202  #ifndef _EULE_NO_INTRINSICS_
+
203 
+
204  // Move vector components and factors into registers
+
205  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
206  __m256d __vector_other = _mm256_set_pd(0, 0, other.y, other.x);
+
207  __m256d __t = _mm256_set1_pd(t);
+
208  __m256d __it = _mm256_set1_pd(it); // Inverse t
+
209 
+
210  // Procedure:
+
211  // (__vector_self * __it) + (__vector_other * __t)
+
212 
+
213  __m256d __sum = _mm256_set1_pd(0); // this will hold the sum of the two multiplications
+
214 
+
215  __sum = _mm256_fmadd_pd(__vector_self, __it, __sum);
+
216  __sum = _mm256_fmadd_pd(__vector_other, __t, __sum);
+
217 
+
218  // Retrieve result, and apply it
+
219  double sum[4];
+
220  _mm256_storeu_pd(sum, __sum);
+
221 
+
222  x = sum[0];
+
223  y = sum[1];
+
224 
+
225  #else
+
226 
+
227  x = it * x + t * other.x;
+
228  y = it * y + t * other.y;
+
229 
+
230  #endif
+
231 
+
232  return;
+
233 }
+
234 
+
235 
+
236 
+
237 // Slow, lame version for intcels
+
238 void Vector2<int>::LerpSelf(const Vector2<int>& other, double t)
+
239 {
+
240  const double it = 1.0 - t; // Inverse t
+
241 
+
242  x = (int)(it * (double)x + t * (double)other.x);
+
243  y = (int)(it * (double)y + t * (double)other.y);
+
244 
+
245  return;
+
246 }
+
247 
+
248 Vector2<double> Vector2<double>::Lerp(const Vector2<double>& other, double t) const
+
249 {
+
250  Vector2d copy(*this);
+
251  copy.LerpSelf(other, t);
+
252 
+
253  return copy;
+
254 }
+
255 
+
256 Vector2<double> Vector2<int>::Lerp(const Vector2<int>& other, double t) const
+
257 {
+
258  Vector2d copy(this->ToDouble());
+
259  copy.LerpSelf(other.ToDouble(), t);
+
260 
+
261  return copy;
+
262 }
+
263 
+
264 
+
265 
+
266 template<typename T>
+
267 T& Vector2<T>::operator[](std::size_t idx)
+
268 {
+
269  switch (idx)
+
270  {
+
271  case 0:
+
272  return x;
+
273  case 1:
+
274  return y;
+
275  default:
+
276  throw std::out_of_range("Array descriptor on Vector2<T> out of range!");
+
277  }
+
278 }
+
279 
+
280 template<typename T>
+
281 const T& Vector2<T>::operator[](std::size_t idx) const
+
282 {
+
283  switch (idx)
+
284  {
+
285  case 0:
+
286  return x;
+
287  case 1:
+
288  return y;
+
289  default:
+
290  throw std::out_of_range("Array descriptor on Vector2<T> out of range!");
+
291  }
+
292 }
+
293 
+
294 template<typename T>
+
295 bool Vector2<T>::Similar(const Vector2<T>& other, double epsilon) const
+
296 {
+
297  return
+
298  (::Math::Similar(x, other.x, epsilon)) &&
+
299  (::Math::Similar(y, other.y, epsilon))
+
300  ;
+
301 }
+
302 
+
303 template<typename T>
+ +
305 {
+
306  return Vector2<int>((int)x, (int)y);
+
307 }
+
308 
+
309 template<typename T>
+ +
311 {
+
312  return Vector2<double>((double)x, (double)y);
+
313 }
+
314 
+
315 
+ +
317 {
+
318  #ifndef _EULE_NO_INTRINSICS_
+
319 
+
320  // Move vector components and factors into registers
+
321  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
322  __m256d __vector_other = _mm256_set_pd(0, 0, other.y, other.x);
+
323 
+
324  // Add the components
+
325  __m256d __sum = _mm256_add_pd(__vector_self, __vector_other);
+
326 
+
327  // Retrieve and return these values
+
328  double sum[4];
+
329  _mm256_storeu_pd(sum, __sum);
+
330 
+
331  return Vector2<double>(
+
332  sum[0],
+
333  sum[1]
+
334  );
+
335 
+
336  #else
+
337 
+
338  return Vector2<double>(
+
339  x + other.x,
+
340  y + other.y
+
341  );
+
342  #endif
+
343 }
+
344 
+
345 template<typename T>
+ +
347 {
+
348  return Vector2<T>(
+
349  x + other.x,
+
350  y + other.y
+
351  );
+
352 }
+
353 
+
354 
+
355 
+ +
357 {
+
358  #ifndef _EULE_NO_INTRINSICS_
+
359 
+
360  // Move vector components and factors into registers
+
361  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
362  __m256d __vector_other = _mm256_set_pd(0, 0, other.y, other.x);
+
363 
+
364  // Add the components
+
365  __m256d __sum = _mm256_add_pd(__vector_self, __vector_other);
+
366 
+
367  // Retrieve and apply these values
+
368  double sum[4];
+
369  _mm256_storeu_pd(sum, __sum);
+
370 
+
371  x = sum[0];
+
372  y = sum[1];
+
373 
+
374  #else
+
375 
+
376  x += other.x;
+
377  y += other.y;
+
378 
+
379  #endif
+
380 
+
381  return;
+
382 }
+
383 
+
384 template<typename T>
+ +
386 {
+
387  x += other.x;
+
388  y += other.y;
+
389  return;
+
390 }
+
391 
+
392 
+
393 
+ +
395 {
+
396  #ifndef _EULE_NO_INTRINSICS_
+
397 
+
398  // Move vector components and factors into registers
+
399  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
400  __m256d __vector_other = _mm256_set_pd(0, 0, other.y, other.x);
+
401 
+
402  // Subtract the components
+
403  __m256d __diff = _mm256_sub_pd(__vector_self, __vector_other);
+
404 
+
405  // Retrieve and return these values
+
406  double diff[4];
+
407  _mm256_storeu_pd(diff, __diff);
+
408 
+
409  return Vector2<double>(
+
410  diff[0],
+
411  diff[1]
+
412  );
+
413 
+
414  #else
+
415 
+
416  return Vector2<double>(
+
417  x - other.x,
+
418  y - other.y
+
419  );
+
420  #endif
+
421 }
+
422 
+
423 template<typename T>
+ +
425 {
+
426  return Vector2<T>(
+
427  x - other.x,
+
428  y - other.y
+
429  );
+
430 }
+
431 
+
432 
+
433 
+ +
435 {
+
436  #ifndef _EULE_NO_INTRINSICS_
+
437 
+
438  // Move vector components and factors into registers
+
439  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
440  __m256d __vector_other = _mm256_set_pd(0, 0, other.y, other.x);
+
441 
+
442  // Subtract the components
+
443  __m256d __diff = _mm256_sub_pd(__vector_self, __vector_other);
+
444 
+
445  // Retrieve and apply these values
+
446  double diff[4];
+
447  _mm256_storeu_pd(diff, __diff);
+
448 
+
449  x = diff[0];
+
450  y = diff[1];
+
451 
+
452  #else
+
453 
+
454  x -= other.x;
+
455  y -= other.y;
+
456 
+
457  #endif
+
458 
+
459  return;
+
460 }
+
461 
+
462 template<typename T>
+ +
464 {
+
465  x -= other.x;
+
466  y -= other.y;
+
467  return;
+
468 }
+
469 
+
470 
+
471 
+
472 Vector2<double> Vector2<double>::operator*(const double scale) const
+
473 {
+
474  #ifndef _EULE_NO_INTRINSICS_
+
475 
+
476  // Move vector components and factors into registers
+
477  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
478  __m256d __scalar = _mm256_set1_pd(scale);
+
479 
+
480  // Multiply the components
+
481  __m256d __prod = _mm256_mul_pd(__vector_self, __scalar);
+
482 
+
483  // Retrieve and return these values
+
484  double prod[4];
+
485  _mm256_storeu_pd(prod, __prod);
+
486 
+
487  return Vector2<double>(
+
488  prod[0],
+
489  prod[1]
+
490  );
+
491 
+
492  #else
+
493 
+
494  return Vector2<double>(
+
495  x * scale,
+
496  y * scale
+
497  );
+
498 
+
499  #endif
+
500 }
+
501 
+
502 template<typename T>
+
503 Vector2<T> Vector2<T>::operator*(const T scale) const
+
504 {
+
505  return Vector2<T>(
+
506  x * scale,
+
507  y * scale
+
508  );
+
509 }
+
510 
+
511 
+
512 
+
513 void Vector2<double>::operator*=(const double scale)
+
514 {
+
515  #ifndef _EULE_NO_INTRINSICS_
+
516 
+
517  // Move vector components and factors into registers
+
518  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
519  __m256d __scalar = _mm256_set1_pd(scale);
+
520 
+
521  // Multiply the components
+
522  __m256d __prod = _mm256_mul_pd(__vector_self, __scalar);
+
523 
+
524  // Retrieve and apply these values
+
525  double prod[4];
+
526  _mm256_storeu_pd(prod, __prod);
+
527 
+
528  x = prod[0];
+
529  y = prod[1];
+
530 
+
531  #else
+
532 
+
533  x *= scale;
+
534  y *= scale;
+
535 
+
536  #endif
+
537 
+
538  return;
+
539 }
+
540 
+
541 template<typename T>
+
542 void Vector2<T>::operator*=(const T scale)
+
543 {
+
544  x *= scale;
+
545  y *= scale;
+
546  return;
+
547 }
+
548 
+
549 
+
550 
+
551 Vector2<double> Vector2<double>::operator/(const double scale) const
+
552 {
+
553  #ifndef _EULE_NO_INTRINSICS_
+
554 
+
555  // Move vector components and factors into registers
+
556  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
557  __m256d __scalar = _mm256_set1_pd(scale);
+
558 
+
559  // Divide the components
+
560  __m256d __prod = _mm256_div_pd(__vector_self, __scalar);
+
561 
+
562  // Retrieve and return these values
+
563  double prod[4];
+
564  _mm256_storeu_pd(prod, __prod);
+
565 
+
566  return Vector2<double>(
+
567  prod[0],
+
568  prod[1]
+
569  );
+
570 
+
571  #else
+
572 
+
573  return Vector2<double>(
+
574  x / scale,
+
575  y / scale
+
576  );
+
577 
+
578  #endif
+
579 }
+
580 
+
581 template<typename T>
+
582 Vector2<T> Vector2<T>::operator/(const T scale) const
+
583 {
+
584  return Vector2<T>(
+
585  x / scale,
+
586  y / scale
+
587  );
+
588 }
+
589 
+
590 
+
591 
+
592 void Vector2<double>::operator/=(const double scale)
+
593 {
+
594  #ifndef _EULE_NO_INTRINSICS_
+
595 
+
596  // Move vector components and factors into registers
+
597  __m256d __vector_self = _mm256_set_pd(0, 0, y, x);
+
598  __m256d __scalar = _mm256_set1_pd(scale);
+
599 
+
600  // Divide the components
+
601  __m256d __prod = _mm256_div_pd(__vector_self, __scalar);
+
602 
+
603  // Retrieve and apply these values
+
604  double prod[4];
+
605  _mm256_storeu_pd(prod, __prod);
+
606 
+
607  x = prod[0];
+
608  y = prod[1];
+
609 
+
610  #else
+
611 
+
612  x /= scale;
+
613  y /= scale;
+
614 
+
615  #endif
+
616  return;
+
617 }
+
618 
+
619 template<typename T>
+
620 void Vector2<T>::operator/=(const T scale)
+
621 {
+
622  x /= scale;
+
623  y /= scale;
+
624  return;
+
625 }
+
626 
+
627 
+
628 
+
629 template<typename T>
+ +
631 {
+
632  x = other.x;
+
633  y = other.y;
+
634 
+
635  return;
+
636 }
+
637 
+
638 template<typename T>
+
639 void Vector2<T>::operator=(Vector2<T>&& other) noexcept
+
640 {
+
641  x = std::move(other.x);
+
642  y = std::move(other.y);
+
643 
+
644  return;
+
645 }
+
646 
+
647 template<typename T>
+
648 bool Vector2<T>::operator==(const Vector2<T>& other) const
+
649 {
+
650  return
+
651  (x == other.x) &&
+
652  (y == other.y);
+
653 }
+
654 
+
655 template<typename T>
+
656 bool Vector2<T>::operator!=(const Vector2<T>& other) const
+
657 {
+
658  return !operator==(other);
+
659 }
+
660 
+
661 template<typename T>
+ +
663 {
+
664  return Vector2<T>(
+
665  -x,
+
666  -y
+
667  );
+
668 }
+
669 
+
670 // Don't want these includes above the other stuff
+
671 #include "Vector3.h"
+
672 #include "Vector4.h"
+
673 template<typename T>
+ +
675 {
+
676  return Vector3<T>(x, y, 0);
+
677 }
+
678 
+
679 template<typename T>
+ +
681 {
+
682  return Vector4<T>(x, y, 0, 0);
+
683 }
+
684 
+
685 template class Vector2<int>;
+
686 template class Vector2<double>;
+
687 
+
688 // Some handy predefines
+
689 template <typename T>
+
690 const Vector2<double> Vector2<T>::up(0, 1);
+
691 template <typename T>
+
692 const Vector2<double> Vector2<T>::down(0, -1);
+
693 template <typename T>
+ +
695 template <typename T>
+
696 const Vector2<double> Vector2<T>::left(-1, 0);
+
697 template <typename T>
+
698 const Vector2<double> Vector2<T>::one(1, 1);
+
699 template <typename T>
+ +
+
double DotProduct(const Vector2< T > &other) const
Will compute the dot product to another Vector2.
Definition: Vector2.cpp:47
+
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+ +
Vector2< double > ToDouble() const
Will convert this vector to a Vector2d.
Definition: Vector2.cpp:310
+ +
void NormalizeSelf()
Will normalize this vector.
Definition: Vector2.cpp:187
+ + + + + +
Definition: Collider.h:4
+
void LerpSelf(const Vector2< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector2.cpp:238
+
Representation of a 4d vector.
Definition: Vector2.h:8
+ + + + diff --git a/Doxygen/build/Vector2_8h.html b/Doxygen/build/Vector2_8h.html new file mode 100644 index 0000000..cfe804f --- /dev/null +++ b/Doxygen/build/Vector2_8h.html @@ -0,0 +1,143 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector2.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Vector2.h File Reference
+
+
+
#include <cstdlib>
+#include <sstream>
+
+Include dependency graph for Vector2.h:
+
+
+ + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Classes

class  Eule::Vector3< T >
 Representation of a 3d vector. More...
 
class  Eule::Vector4< T >
 Representation of a 4d vector. More...
 
class  Eule::Vector2< T >
 Representation of a 2d vector. More...
 
+ + + +

+Namespaces

 Eule
 
+ + + + + +

+Typedefs

typedef Vector2< int > Eule::Vector2i
 
typedef Vector2< double > Eule::Vector2d
 
+
+ + + + diff --git a/Doxygen/build/Vector2_8h__dep__incl.map b/Doxygen/build/Vector2_8h__dep__incl.map new file mode 100644 index 0000000..b7acf5c --- /dev/null +++ b/Doxygen/build/Vector2_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Doxygen/build/Vector2_8h__dep__incl.md5 b/Doxygen/build/Vector2_8h__dep__incl.md5 new file mode 100644 index 0000000..00b2a8b --- /dev/null +++ b/Doxygen/build/Vector2_8h__dep__incl.md5 @@ -0,0 +1 @@ +51ead09597156a62231b4f13138c94a8 \ No newline at end of file diff --git a/Doxygen/build/Vector2_8h__dep__incl.png b/Doxygen/build/Vector2_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..e20c662f54c2d1e410ec27681313f7c740de56b8 GIT binary patch literal 7941 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 baR2xUr|;wvhddQb6{0M!Ay*~yI{5zp_?%CM literal 0 HcmV?d00001 diff --git a/Doxygen/build/Vector2_8h__incl.map b/Doxygen/build/Vector2_8h__incl.map new file mode 100644 index 0000000..fc3c55e --- /dev/null +++ b/Doxygen/build/Vector2_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Doxygen/build/Vector2_8h__incl.md5 b/Doxygen/build/Vector2_8h__incl.md5 new file mode 100644 index 0000000..43ba1de --- /dev/null +++ b/Doxygen/build/Vector2_8h__incl.md5 @@ -0,0 +1 @@ +16a3daa708990df0b2edd4c5f8400b48 \ No newline at end of file diff --git a/Doxygen/build/Vector2_8h__incl.png b/Doxygen/build/Vector2_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c69d4e1196b4e94c88fa5fa56febf52c5d87ca GIT binary patch literal 4591 zcmZ9Q2{csU-^Z_g-zqzWqOpYRBBEh1#8?v=+sIC~G074kOC}A5L}Vu^35!;Q+=GP+CcE7Z-R62$8p4m;8pADGt_ITjMFOH`(FaSGb{l*W_h`Ki% zA^@0>MFYkR5K1pQC_8?q1lmCN=4{u_51#J69%#w)CLT)>yzI$d(xD&0{Epv!@^=>V&V_f=?gO{ zue9>vU804fqNAVf%tv`@J3Fs-CW=0B$NY@r)fF1-@4qc4XIgdkyD5x~jqM7phL@3z zjm^x=OsbsQ+s+pg6BF;>zmJHZu($aK= zq(wwl3C)qZLOA5i@UV%6#oEe>;;wk^JovKn^K%RaQ&3Rw_3PJ^loZ-!V^cn9dEGWV zGKll?WR^h`{ngM(xMITe+XqT=xA=(maro;yAeS=q$Vg79#P z6x{~jwWP6lKR-WBC{#vXzBf$?ub!!(pwKRuVfgXcT7*aA-^$wB)4i3!>gwvn#YGtQ z>VijqM!#cEPY*M>+jLE08qwDHSI^>^FOiIuBkj98yfQId9N67 zxIx_52s+*o1g!o2tE#J0&~L$Be$C3tDkz`pcnT z%2)M;aA2G@PKYZj1;xd8J%5M9$Fsz1O*IAwqfn^eVAV}450A~(7~}wla+4P)*&9W=FDAJ8X6i11j0b&>dFcUaCCf3!+vmZ@W|ZU z#KdHLa&kAxRZ~+F3^oM?1*ko^=azSGA$a1xw*J}Xpm#VwJHEDze~@Qa_VDuM%QJ*f z3OWFwr)+L-rv~obxTLYVw6uh*_7c2x%T21Bl9IBHU4e%YkW^6-w;`X8_A2J~RNzq+ zCnF=fESj90e2;l=P+ygWnmqoSqs+vU4}oo}dwYAjT3TBN2PFjsDc_~VgesINShH7?tngNiMlUuB(Q+wmt49=Fbv$NP(dOA9~f(Wca=U4a7 zWo5!5BDPW~fq{YM=H{10nWI{Ui_C5c3i|r`zQ$rzgU`>F`?JK@=pqP(g(3vbnf`tR z5_vIJW_ROK$H2f2nOhX}V|lr^mzNg|_OrcR3!I@Cj3QvYF;z_@5+&)$09`#jyqLMy z$==HOdC;A-po8^slOoe?Axai7@q^Egm%6)kS%ks7gKBDa$~^i4Gaq5l(9i%vK7alU zCW@+RtnaVbH*xxkg6&LIJ_%AKR+WQBPl6qp$kt2gocKSh>G4-Rz4t3QUMBn>&bC(J)_8A zUN$y4j~V6oQ%+@YnuFt6_Bn~;Rr3EcQS~%Sw^<0uH(ui4?d?rQN}6w6NbjcequP6^ zqM`zFrIon`0jm~x=y3`vmFi3Wr!*O+DE;;;I{cfr7#3U!TTs9Qy z|1z@lLliH^qCW=pW&Hh*A7t;|Jv6V*tH>uzeJ6Nczg}u#&KVhA-PxovITds6ezTN#n`ZawMG zGfkbVFuUKVn79T8NS`Wj246_QcfwEXqgBs2o_fP~b{?fCFJEUmE$2t(_f9dhqu~}7 z(sHH_T@)-1_Zti@%PRZ#`JWz?<8B6S`@cVXhB$qm$(Um6f0R~xD$I_*=<1#l-)tCC zLgqJ5Z5=jVD68~DV-F4QAy?BRj2|;BEVwBuvfk7`;p8ObmE58mQb6YW<@z7SeRa3` z@|t0LXMtJcps3_n{p(UhLPG7|zuiW84aT00tM4R?A2RIkPqT|F$6^nqWD}oBcXcDW zo@W-Og#KD|9e?|PZ+U)!c=_0cH9RxuSlwhPLi$PcTJ{nGo^jd3cB&s3ICL$l!V31Qy zXnS1+S&dn#L7x> z!#bJ2FkQmf&K)A|ezbtEnYRx{C6OBZeV$3`%)#}Hoi~l0`Sz?rWVTx*VhX zMuRRKi_~}?r2`MfNbmJz0lD(_mmNW~(-S(dPC**P9a$)B$!+{?k7}6?967(JqKFyL zMA$Bs@nT`WF|Id{zvFV<^l_zFsFzL>iR1&~g6J!Cw7v0i)k)A|5Mw*rTPcc4 ziTM?AdO{f*`bA1=D%!-y zr{?~B^7z$fCtRSmc12oRM@w*)n@iT=p>%7dIu8m#M(-^miu6(-m34HqX1jHgUv>0G zXX;J*tCSQQwWb$oN@irhOZ1L9b4LFo7Vot%NDLPjHxe7SBXOOdI+T=@C-_)!?hkfJ zU}dDcZ(u;->5rRA0pH@{_*|^ZIE)#L3=sWosm5R+bA^QN-jx&-yvN#jCA~fA7JOq? z)gC2_{T7dF4J|MhtY6CzbB0KGgxSPJQ2I5IHU}IEkdgAlA7~{#H0NYz)i^m0q*Y@E z`hw2~XD3DbjpkWn4f9`gEetpoTZ)f;eqn6+ynSTkiWAlzTUqI#scG%7=*PoI2S7xP z+Sa;N1NGJN2D!PpSvR5RLr-0LSxL|Bq+6y^$HXg9(04~u0Z#EoGBvf4`X7R9?d&+% zDlHe=a$3j6{I};?&+gxz)MMR>y~47*$9{42^B__57s^(z@>*thmYM(wJDwFUZURy1 z5%BT#jY@chXzuP6aoRq_qp)90!rp&mxwa|FRBi}{5vr45J00@zMuzh}mXJac4ZzlU znMe%hTmF?Q4*)lB=B=-)CkgOg(YtM6z|hQWba;4w zWiSs20kL>>b#=NHeV=)Lex4jyURmMCb&!+3fC^04_`*Lujo0lT8(Uso)!}0{{qzuF zYATn;-ORsTpbrN2=|G-g~FoVQo zERv|i`uOoBDpPEKn}%ME#XbSKHk=)Z*y zuT@N$?trZG=eHc2nJFnMvM@8dX=v_$R$N>R0Ow14znjRkhnTs!yS{;D0H2sByTHd< zKv_nHzrkfGj$Rqasq;?jS^xo=6sW1K#Y9TdU#5N;#U>>!4f4~`uff4VOlg6!2)P>Q z%Fsu{W=OCHx{BYUoZs9rs(ZFi8`Jv8!h(+d(W6I?YyF5@gl0xY#(;x$knhvRJ{J|i z&CKw@S!OLi>>rw&(=?|0yYQN~Fj~HK+>(^Pm^G7@KsJyAVh=w9p?uV#pC7J+Mx@9L zbm5@a6E*z=dO2ot1mp^VnuD8r_pzgkOK*xa>|c`#a&l>bCx%5$KYox#5Gv*R-F~O1 zr-SJW!vESxu|>JVujOS37&DeJd1+}dV>1UY4!ed9{Gx)w+UPDfMu8r(g0YLcjO>FH zm+}#EOx&`HIjpG;v#WWeyT7-$zP3h3OB;>FZmz5lJQX-OIb9FzCp%FgL(Y=&@;7lE z;252pow;~;>OgA)vh>rZ+ws?7pcdw0Z1l|_0N0ts78E#HS@C)RBO@c=pct8$o=9?l ztX)=C_SOdt`j1GaYv9Se++06jUray%eC@L(i;}1INB&UI2;%XhC04bdu9`5|2W8A0 zk$6`{rN^bHw6ruQ#{_|hkB{dcCFm}_n_C?&0<-Dr)vKnaro+R-peywC_Li2E9IL~C zpGX_f1-ZM6U&T@ZPz{ag`T#Q+Eb?1)!_z;MxQ>d-N+DbaXlfI(OF`+Ys;Z86mzL(| zr>eapRpmu!Y^lU;WS~{gkG~Wb6Tx2zQP8>bzo%&8M0hhnOib)84i^?0N=>c~g}%gM zEw7HZ!n)nr(P(tFpRk9Hj*flRq{eX8HVHUQ0N_WhRbQ?C{{!m(OW60i8K2FdAhb-f zacyA5d2x?f{CIFG1I%Ps`P1ANplp?u2i?Scn2ZVlUPOd>{k_je`z2$I@(M{lmjU_z el)mr5B>W4D*W)tv^}rt{fVRd1Xo + + + + + + +Leonetienne/Eule: Eule/Vector2.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector2.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include <cstdlib>
+
3 #include <sstream>
+
4 
+
5 namespace Eule
+
6 {
+
7  template <typename T> class Vector3;
+
8  template <typename T> class Vector4;
+
9 
+
13  template <typename T>
+
14  class Vector2
+
15  {
+
16  public:
+
17  Vector2() : x{ 0 }, y{ 0 } {}
+
18  Vector2(T _x, T _y) : x{ _x }, y{ _y } {}
+
19  Vector2(const Vector2<T>& other) = default;
+
20  Vector2(Vector2<T>&& other) noexcept = default;
+
21 
+
23  double DotProduct(const Vector2<T>& other) const;
+
24 
+
26  double CrossProduct(const Vector2<T>& other) const;
+
27 
+
29  double SqrMagnitude() const;
+
30 
+
32  double Magnitude() const;
+
33 
+
35  [[nodiscard]] Vector2<double> Normalize() const;
+
36 
+
38  void NormalizeSelf();
+
39 
+
41  Vector2<T> VectorScale(const Vector2<T>& scalar) const;
+
42 
+
44  void LerpSelf(const Vector2<T>& other, double t);
+
45 
+
47  [[nodiscard]] Vector2<double> Lerp(const Vector2<T>& other, double t) const;
+
48 
+
50  [[nodiscard]] bool Similar(const Vector2<T>& other, double epsilon = 0.00001) const;
+
51 
+
53  [[nodiscard]] Vector2<int> ToInt() const;
+
54 
+
56  [[nodiscard]] Vector2<double> ToDouble() const;
+
57 
+
58  T& operator[](std::size_t idx);
+
59  const T& operator[](std::size_t idx) const;
+
60 
+
61  Vector2<T> operator+(const Vector2<T>& other) const;
+
62  void operator+=(const Vector2<T>& other);
+
63  Vector2<T> operator-(const Vector2<T>& other) const;
+
64  void operator-=(const Vector2<T>& other);
+
65  Vector2<T> operator*(const T scale) const;
+
66  void operator*=(const T scale);
+
67  Vector2<T> operator/(const T scale) const;
+
68  void operator/=(const T scale);
+
69  Vector2<T> operator-() const;
+
70 
+
71  operator Vector3<T>() const;
+
72  operator Vector4<T>() const;
+
73 
+
74  void operator=(const Vector2<T>& other);
+
75  void operator=(Vector2<T>&& other) noexcept;
+
76 
+
77  bool operator==(const Vector2<T>& other) const;
+
78  bool operator!=(const Vector2<T>& other) const;
+
79 
+
80  friend std::ostream& operator<< (std::ostream& os, const Vector2<T>& v)
+
81  {
+
82  return os << "[x: " << v.x << " y: " << v.y << "]";
+
83  }
+
84  friend std::wostream& operator<< (std::wostream& os, const Vector2<T>& v)
+
85  {
+
86  return os << L"[x: " << v.x << L" y: " << v.y << L"]";
+
87  }
+
88 
+
89  T x;
+
90  T y;
+
91 
+
92  // Some handy predefines
+
93  static const Vector2<double> up;
+
94  static const Vector2<double> down;
+
95  static const Vector2<double> right;
+
96  static const Vector2<double> left;
+
97  static const Vector2<double> one;
+
98  static const Vector2<double> zero;
+
99  };
+
100 
+ + +
103 }
+
+
Vector2< double > Normalize() const
Will return the normalization of this vector.
Definition: Vector2.cpp:137
+
bool operator!=(const Vector2< T > &other) const
Definition: Vector2.cpp:656
+ +
Vector2< T > operator+(const Vector2< T > &other) const
Definition: Vector2.cpp:346
+
void operator+=(const Vector2< T > &other)
Definition: Vector2.cpp:385
+
double DotProduct(const Vector2< T > &other) const
Will compute the dot product to another Vector2.
Definition: Vector2.cpp:47
+
static const Vector2< double > left
Definition: Vector2.h:96
+
static const Vector2< double > up
Definition: Vector2.h:93
+
double Magnitude() const
Will compute the magnitude.
Definition: Vector2.cpp:90
+
void operator*=(const T scale)
Definition: Vector2.cpp:542
+
Vector2< T > operator/(const T scale) const
Definition: Vector2.cpp:582
+
static const Vector2< double > zero
Definition: Vector2.h:98
+
Vector2< T > VectorScale(const Vector2< T > &scalar) const
Will scale self.n by scalar.n.
Definition: Vector2.cpp:127
+
Vector2< int > ToInt() const
Will convert this vector to a Vector2i.
Definition: Vector2.cpp:304
+
Vector2(T _x, T _y)
Definition: Vector2.h:18
+
T & operator[](std::size_t idx)
Definition: Vector2.cpp:267
+
static const Vector2< double > one
Definition: Vector2.h:97
+
Vector2< T > operator*(const T scale) const
Definition: Vector2.cpp:503
+
void operator/=(const T scale)
Definition: Vector2.cpp:620
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector2.cpp:83
+
Vector2< double > Lerp(const Vector2< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector2.cpp:256
+
double CrossProduct(const Vector2< T > &other) const
Will compute the cross product to another Vector2.
Definition: Vector2.cpp:65
+
Vector2< double > ToDouble() const
Will convert this vector to a Vector2d.
Definition: Vector2.cpp:310
+
void NormalizeSelf()
Will normalize this vector.
Definition: Vector2.cpp:187
+
Vector2< T > operator-() const
Definition: Vector2.cpp:662
+
friend std::ostream & operator<<(std::ostream &os, const Vector2< T > &v)
Definition: Vector2.h:80
+
Representation of a 2d vector.
Definition: Vector2.h:14
+
Vector2< double > Vector2d
Definition: Vector2.h:102
+
void operator=(const Vector2< T > &other)
Conversion method.
Definition: Vector2.cpp:630
+ + +
bool Similar(const Vector2< T > &other, double epsilon=0.00001) const
Will compare if two vectors are similar to a certain epsilon value.
Definition: Vector2.cpp:295
+
static const Vector2< double > right
Definition: Vector2.h:95
+
void operator-=(const Vector2< T > &other)
Definition: Vector2.cpp:463
+
static const Vector2< double > down
Definition: Vector2.h:94
+
bool operator==(const Vector2< T > &other) const
Definition: Vector2.cpp:648
+
Definition: Collider.h:4
+
void LerpSelf(const Vector2< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector2.cpp:238
+
Representation of a 4d vector.
Definition: Vector2.h:8
+
Vector2< int > Vector2i
Definition: Vector2.h:101
+ + + + diff --git a/Doxygen/build/Vector3_8cpp.html b/Doxygen/build/Vector3_8cpp.html new file mode 100644 index 0000000..1008554 --- /dev/null +++ b/Doxygen/build/Vector3_8cpp.html @@ -0,0 +1,118 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector3.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector3.cpp File Reference
+
+
+
#include "Vector3.h"
+#include "Math.h"
+#include <iostream>
+#include <immintrin.h>
+#include "Vector2.h"
+#include "Vector4.h"
+
+Include dependency graph for Vector3.cpp:
+
+
+ + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+
+ + + + diff --git a/Doxygen/build/Vector3_8cpp__incl.map b/Doxygen/build/Vector3_8cpp__incl.map new file mode 100644 index 0000000..1d7cea3 --- /dev/null +++ b/Doxygen/build/Vector3_8cpp__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Doxygen/build/Vector3_8cpp__incl.md5 b/Doxygen/build/Vector3_8cpp__incl.md5 new file mode 100644 index 0000000..c6df49e --- /dev/null +++ b/Doxygen/build/Vector3_8cpp__incl.md5 @@ -0,0 +1 @@ +1afca43d443611dd35343256967edfc8 \ No newline at end of file diff --git a/Doxygen/build/Vector3_8cpp__incl.png b/Doxygen/build/Vector3_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..b1b1b905cce45e381fcb17ada44551ce37ce7dfc GIT binary patch literal 36121 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
fhYubISD1 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 Z3 z5>gZZ(KQZCBk{+N0S)6e?zkP&25BrQLc@Xe^(H;F60vdGF=-{}uz#=LeEHFEf~5C6 zC4Bp=^Y}Me@RN+OnCQ&VNV=9s3akacqB0=)ovN|t^y>}VSYHn*+39|yprDW|+N*J+ zhylzq$AzEkjP0H4)4Q}=6CT+vFAZrWC2)481d269OZCg!E6u-{IL@o|67|;rX13HF z@e+#BVNhN8YL$g1DoXN!&KB9_FcP^oE;%{8RKE$XI?4ySX&lKLF(RnRO>ou#kHzPC zN>PU|QF0x8`Z@lep)p7o$nh??__ zP!rmo+hIz$W()`kgzhwd8Bkss-Usc4n!ZVV9mLZ$Y9-oL8uZM4H+_SHh<2URa`%16 z%DLpplX7{)cQvNj^!;W-N z`!if~jg4(KyS|*?J6KWJp4~$IudN{o_Qv`IeW|>KUItLW`!E0Xq&?Ib`K42wyQ3;A z+j%3ZafuI|zuw_BX?3?)L=vyv_w;`}9A8q_> zHnMlF6Wg9SBY-v|$!RVpl%3Xw=X*AOw)H|sV6u`0b`sUvI?ab<3AMA+GYD$FpF}ni zltS=upM$EyqRn6tc&==~76n7pa`g&>uA_jV7|ZJicc z9{}kEB#O@^Q6vrp{lf7U)6wQQ{{5HF&7j@(RJ-(QEi)@e-9nlg_-c!IXr3k9Yrzz6 z%7@mF;o89Viabpq~f6@U3(9!7b&qS^uD=YRr!{STwDe^VQ47+2~MxK!y!*S-(+jAR8#+X?}Gy*l_1O)xd^{>#<< zHTIsaJO)4_S~feO0&YTyzB4U!@s`I~|8pVx(&`Wen56W@zad_)dNk-_-gAoO`rb*& z_P4y+R@`ary9$?q6$%tIk5g)xR51w7%_hoHg*{v)?Ck259wdDDU}w-w8+5pKdtqn# zMN&#l&rF>^=s8A#9u?}5&p=ZE|4;A zJl*#~;G2&>z2=liM(o!ogZUWcCC^+BKwG3_P z1{Er&Lv00N!xV6c&q&gl>6eE{~`)#Tw=;kN(G%BEAg+;ijVPT9w515+&BpXO1kjapsvk`ce6d#X45cM=onCN}f?G_VY8ihp(V9G)Q zsOHXeN|Z-X0<3XpiiFdEiJ<1mX0O;WomagBoSguZM1T4eMI)s1%N9Gjf*F|GnK}<) z7Z%EA&)g{=Rvq{ znq!>Wl*Gk&dW^V|Gok0R*s6@=v#nz!l(za2E0-S!sn04^izuXy&{ zH3+($X_7ZcG(tvQpVhmaTv9a(tR(;d)2~fOT!fgIP?Ime!8*OpzxKerkxQpc#Kezm z>yJ-_34;I5AJCeEwUTlGy+6?J1W9;JEsqt}5kFJa`vlR&py?bF$o9qY;wK1FFN521PLw!VLL);si-z%&e_xxeVXY0~FV_I<&mF%~cmDT9sMUPwH{uG|0`aD)0=7tlL!#|7jdwqOIZ|}El)d&J74^Bq1I-R?f;=z^^s$4W|0d*zp%Gw z!X%Gj|CC}C8>gmLuqma%H$uPLK8-=ZGFLdxlj`ZcChl{=%J#Xj|6htU)6I8ny0-6z zr>s~nXlTYDqoudZb|RtrUD@O$scMEdGBlts&(Pw(-$O^uFo*H4z=1>=0Kf=GM}-j< zMb1TutN9cEScGMz$@2_LB{7|1tNTv&!Xi=Fc(G5 zw8J%m?wL9r#)qcy%nyoGLsT<2$VY=rDG}d--~|9b13IOsw}??oUMKd2x=#M*zF-1t zy@p>X3=EEoOJ@Fn@9Bsfa6A?i6g7R3i{W);iHR4{m7}m515Fp;A`p>hb+rr2*>IpD z{$xc39~>pZ^)DZ7)Kz@tl92j5ywngodx?OcmwTKqXDX)MCZ$+4WGsj2Sqh**rb8+7h=VE7 zGYuavRv5F%K{Jhpf)8yx%>D4cYqS^;_-bDq;dPOpsax*K=rh-^#nthT3fG_CVsdck z_(x7~dhe<~IjPfs)KKFYEsSX}2neWHh3`ts%rA}=-kE8n^0gcq<1-Ip1{SaAn1yS! ziZ7&s3_4^}U(FGOJ`j%<`Ps4%77@4PXyXp3I4GMChEot&kM;3KaF8%oLueug$%Bv@ zXlQc6uG=(8$r~z6_|_`1UE0anEW7gsW^g+Y^FHC>c#x&A*OdBw`Ep1^mE8Lzq@&$z zA9l0_H?_`PVWy4*jU=vSvevOk&+Oc>^AxMGF`Yp&BV5ovrM0U|{&V;)g5{}mAwcNg zKPzMi*$JT2=SP~dx%TFSrUSjb-AQ~GS;fT=cf0rn<`X;mdVYU7L7KBHIBN{vH~ zn^06lwl^$E+gQwn%`U( zuK(72k~{pY9#>yaj|;$FBHhARr3ezC6vKqz1?mO-OKyrSd^FVt1 z_zFf@Q31!aefSU!94{t>Qr{s<)4o`ShekQ;Hwtl%UoF5k;x_ZESeCWJ~ zroy3AR>U9p=~HMghvpa)&|x~|%>j@mRGRo!E5?=<^;ZB3uRo>@r^x7lbqRaAzIQac=v zw3yj9I2jpLTpztNf9#rU_l>*z*V}S<{ohslu;&30iKNLs~*K z$n$bvEG|eH!yxNzKn^CqIdee+H`L2M=m8@3F-69{P})1f?RYzHCo8})eK;;E;eF``taSU&`?&e}bbCLa;PVPPaBfs|Mk02fO*yuU9d6ie%MA(z zPk_l^1J27m|E95_cv9_Ht_{TQb8)qYlH8iC-eOTzoid$oW?!GFJ2-FAhCHj|%gft@ zFe?<{)yK-IjZ#eW5025mMgQ z?u-Bzzn2NVBqS#fPZvMtb+Pmj7D*8Z8~6toq@q?5Nia2HYa&r7#Jy=agLNVJ_O&dO zT38-G=(@RnNnmK$SNc1e6cM!;q0*8F4SZgo>vBa^)t?mSQo+p zz$Bnv-2vlVqf&Q@z+F^oaUP&8hEiWZ%9hB{k$@Ux3U;JS{+o*OE8*G75(0VpBzkXg z`Af~zMJPWX&pieP6wQ2EG+?vg9b|*?hXQ}Os?qqv&oBS!dt}h?4^=JYv)RE57hzF- zrEzTxFhK=yz7{0DlZ|K8*JrHAajdDP zhpWzJv+-L0Wfo>qN>!gdFHg~Ucv=|2CA#jqwu5eDri*=qsur79%`c~>eEp49bd>Mxfd@W`1u^81Et+#$=06krq?;%E}*7 zlkN{BZjjIFmT^fX@^IT6pMn&i6%)=ey4%LwaCUY01oh}B#jG1w1*G8b1>#af+H`eJ z0#gqqC+$zI|16V)9&d@aE$>4BkS+Yw&Z3NvHj3)8T-Y#6rB}Jc2tmeasnag`97P*y zb3^g$HpFm|w2OHdn3+l9SdyjW#Uh^V%gbxbD3ASai}Tj4)+J8Ko*-C=2}Plnxab$qFprZuTAB+OQ-cNLw*_6v-C0 zG%>0Wm^&DmaEydsUt)It8YlT(`Nxw>cjWFUNdzjm_lFKpb9Xm6hSXJ%K#ZP*C?fEFfFI77v_$_~*~Eg=MPhj66IM zE$Rx8Z^5jg3=Gj#Ru&>Kx{lxim19g>3mXWQFst(Tu>uiUHJ)0E;?2wyoVaT8E8M=m zuL7o@>*sH5zA@?oF`+G#Aw@~#weNT}2mF2*uI`8nw5Z#T3CS@zP}qlGyFvuqPuouyEbogQdLQ%X zo7%VYrfPg^i(_KI6X?{W0=gJQn+Xw#8T$!KMTS@CM+QT+CC|KP`k(Y%+FwY$cs=*>gd z3=gfIipI0uV#6u?2$uoH?H?DhgapruglWG=RPXt*jCys^=Hq9)IbE5NVXk0eqRV64 z_O(O6PVt;p2f5-ily;`=yw|>q|37WL1yojB*ey(_gmjmHlpu{DpoBC^gEWXphY|ux zmoyS0B_-Y6B_N{Gf^;cLcSzl5pYOY4{A2w049_?oV!wN@z1EX+&POha<}sDvM{ai2 zibvrY+e@tMA3HnEXHh0bs;-|9-1N96*{c`{0_O1FER zp+a%KH-M@CxUQql;fBuZb897TEe>uabyd~w<-YA|(j{!7ITm4IbaC-S^QTY4qUozY zx`~L2a=Cs62Z;Cj;?Tl(ZwMZp>S-gfNIHVUc@zOsN+urum zBJu0a2`q3`t$c?2o+mfy#BQS+H;eodXH`cYgiS`Ns)U4ew8E^@#;EDw+WzmuP9o_8 zt)F~*F^r_j#wjuyO0MRjlft&z`&Vz>o_w=7p7n5h!rT07^MYz1In)2q=RUao;qv)o z*C+#q1mXSJ)j_3avtDd>C9SgzMaR`q@KUK(ev}eN($rGkc<=&R;<94Vn(lx9S{OC# z;554%cNgn1R$K2^!<+jVZ+Cgg2Z(^zz<(ru%U(G6sIuzwXX52hM)l6=GyWfCZcx29 zZX^sR9fSP%D`Y%?G9~+{E*X%UE3`2sj5XWr+vlcu8YWk`b4bwD6Y+3i^*DPhk#i-E zb+xsVmuZ1uX?cI%Y@*e>TJ!KGo6fWz>c*Gmt5%&t$Y$r|8#JxMgaTP-25O@<3J)FNrdp>X{| zr$79z`$j_m0j-bo#w3}(LG6M#U7lH_`2dBf{oF=`LA4i%B6yd{E?qn1BGu$kj*nRW z`;t*5$urxy`N3qZ9nZm`TLU4d;oKK8%|bFsFQL%ZSE-tMA34^zE>Y~MSYUSD=q6Q zd>Sd?fOHH>6KS3)St>^$28V>LKUfJiAJ`X&9j`zAUei00=g#Hwx2E6=89H`daJ2eQ zqF)DFM0S_z4QczWH?Cj+rFS0<2~MXeYUEGYr^7zFAtQ4Jy=%fjWre$uCNU zvhGDP*j(`sdsO0OWi3J0h}?em@s9DV_4m6S@oX6iaOr47O0rgPuCzwJkg>TP z{88gEbjP~48+y;cv4UF>ZnskMOl14@nPG3m^Wo`MU;H~TZfHp3 zb){w?y3NnuA$`S@uwFOccA>qJcY5%GU&NtF`*-;L__w3xPVMA0G-zqk(t3I9b(|3& zK5)=UxPwN)aaN8Nb$6&o*QfAVjdBJLX$*$DIDH7|+ghEEN8c=PXh=Vjp_Ora-Zvm5 zg!uk_yF2Z!IUG__gOCwlS5157KVFROLQlA=JXM?)8=I|p97N2bK+dg{q?lV#KmVVj z1h+sXT4s3k9BfXB@p_bOsH54E96p3~DC+FE94c0C;@?C@DkSsT!DhiX4jEiE|3;&r z`u+)X{pOn5M5U*I(C{7{--h@A|@%zsXXH}1SK8fYSo_+Ve zOio$(LDm2`$c3d5BCw`$)9yJr?b&+eQJ|Q_Tk-yL1m*BM$!UVPI8$(;egdX-1Vk}` zrKQ}U`w&bo@gTAAmJTUpGJw*(#XNVgqgNS;9dn(0fztw-2VW0PbQ+I`2sI}z@n3!EC50)R)nz~KB)^IVu&S<@wcrJ_Pi-|#9rGO{E{hG`*3_m;!? zNe;Shi5R|YHw{!LeZseQ)E`pbU|MhsA8_P^FVBc*_cca=!t(@?nKP4emCJl)@oITUumjkv0lphPn0X<3IaYSmQ2N zmk(X1=aO!KdR^}+tI~^;OKx{@NDm*xHynCa%8wit$Ulvg* zRcU`&_|t$M1B6-q^Z6mPtVe!LZf?Vk&n*FU)$&Pn$me8-e7TqYo@yjc3_~ez-M?TK zZY`f;wR4B6Xn+C7#m1uDx~2B+-IzjObQB1->5hk|N!D|6Qa>BF#T*&!Ih|VBe+gdn z8rHREhHDM3aJWNj53yKp=CA%^nXBrdHZeJN0muDOt-32)UPRzwGA#o`=znBAET8YDy2np?N^b@eNNrbj2Rgb0R6oX@cLOV_nS_WUY!ciw0b#U#9$*4 zoj*FM@(bRx6Mj_7K8B8gWJcF?#^)q>m_W;xe)_e7>(EXUJ0*n#37^0a?;ILG`fYpv zm(q8WUyaYbyT=b1b8~YSrwc>-md&T@;-~~ZrA^<%jmvx!#|l75`eI%38N)BD`xO?! zvf&ReJ+^`@mOjZUDk}%-^8||bmd9aYY-XmFL3yjHNcw`kkk zIlUW6_Y<@IQe1!0@X)|73Hfx*k zsad`Hmk=cNN+eq=zjw0Qnr>pTAi=5i3v3K%LAaJ}Ut=H|8XNN~-$oO%(+%zBz>Q1Y z%Vcf$y`oM^YQJ&oR`rk-1{y<4%Tvlbo%hup9qTLYQz-pPK)!?q4H&nU14-9^4t%Z_ z2$o}!SN!Z-8=ff@1>JK-X5yXU+Z_%7}qL&x%jagmgJgE?Wq3 zJ`Wyjaic=6v3q`6?n*r<zX8|1Rw zq*w5BBv%u1#(6;ht~WqB_25D6ZF3oqgKeibyvDD;9bV!GqXFH7h$trIr)6&h3DpT9 zK4nI4swh9EJL}4e!!?!~`@(m{m_;jqd^aB}Xq~K*e|57)BO$GuXO9F2J#WC9Pb&= zm1!%5;gU9WcYN?l;nsp9ynMP};3IpprdD_uGOiaJ&!9^f@@K3t+=xB=^VftAI>qEr zU@@>x4z=uK&+*u;bhl)ee=t(=DEH-#oB z|J5&Isw5xr9f!M^R9iPgy5Ztp9{uQZXpW_X{j~0pEiv+%pM)#;n}*H9e&sQBg!X;u zK#QaSsH|c~P`m`)(WRK=y+6MOp3#Xp(?hJ8t(>S#96rJnw<6V!8;mwqn1jw&{!@TJ zEl!zQJ)++XvV;swpF+(wBdj>L;?l=$4(6B7xfB`oNQal^WN5&flTn zM;tbW7_6|7J$0jLY>MXaM3os+I8~1aqXcA)?_|>wEW|qy!2s|?1x$Wzhn3W8)sB;0 z?A`O1+F5L)o-HL==oe?HUBi` z5#wvI6<(=)MlM zx7#$TMm}$PB|)aH?)&8G+wv{|crYfX>Ug!9%T0Ze^SFPgNh!xc)-f?5Z_^q%n$Oss zF2M|yB$qg8`+@3rRM&ZKA;n>3|3TPwfBx!(g!b{&*mD{NzlHC;KK+IEJ%iw@6yI;{ zoDdNJf##4@$8bGXR>mqR6$OP~9N%;P_v_Bu0oD5qGfm{0Pvq&D*6DJ;kA5ND^Zg~N z1fE=BFk?M7iJi9sTZ?HSkRMAbGn7H{eRuCiVSD?>l#`auSFgp`RmD)^I7)|T4gE^^ z4IXA*YOW-^&t;JYtF6!Esb~p3d(`@ZuZ;{;3N3+!j8fHRl%6iJcsw7PRQL@{)xl;n zE<~)HRTP4;Zkkq+<|DZbnBRR49m4P}{j?u@8bYrOYI_5&nN+Lec>|AIypJ*O>HZ2| zSTG$BI+X=q`|8Y5#?#Y?zwa)Q3^P$mil)B4Pv~fVKDU*ZX&eUuxDUUS6y~FC#`2xb z!fX(pfZE{9n+*(N9E<`@dGvgBwLxLBLNQUN5VOUu(XhzK!Tq1VI=d~svW`s?M6b^G z>A=HwG(LYm=H>O`<%x*D#(n9Gy`|l%va)~wcso4if3^QiAQoOU;EkXW=v`QHrAbMN zH^Qw72|LOc_?Uzwv-LzB2A1c)HNa2<;<;UOl4 zTa`ySa183{4y?hy%gP?|7d3bib;KrsV96lJN7r zG|+amwqyNe+PI-4^-^HH7mdlz=cE4DN3}&*pe;;*9V${$W3OQ!o*Q`$$@07Yj-K{0 zQucH$NnB%`yH3Oqw7fOz42sCt;Z1<4t_oFqmzw z8YmB^>bK2s>%C<1_rtE#f1{ij^lZNEI@rJHGUL>)uU{)V%;^C{3=~@wV1#R~yxU8& zo%qqY+-IllIM4Oi$cSaC){r1v?u}Y%h~>)X?|F{vd%u`e-#K%fH4HYb#g7Nhf4EO@ zuzoD*b@bJ1yWt)C-F&No7O1jYo}AwDZ)+pWujJ4&TaXYFvrl|^>LhvTeH9NPGC+qoFCh=axSp5ug%tmH$--{z#qwjO&rQ-6XGeR&hU|s6_lW8hA3g-bfu@I=XaJ#OAojL`t1A}bDDofT z18{>bU4nMNC*Kzy>G$Aq7oeO}T3*3U@$3A=YS%>wyjb9%abCOTN|gSn=Yo!mENVC> z#%!iR9d_Qxe9+cO>saKrlRZT`tIp>qrD(-RPz~Mj zgg=^!tk+2T>j#O5e55LD6X~%Cg}&9BxcK-4?4E5W?;hH5{U~R|p-rut9~;1wl$3mC zo3tV3?mmZ(0?x3BMMm>Z-s$T%VPT-f#g{>IyKHKpIHI9s*D>~7!9QfP(=;$*v>|@(Q zs;Y9@j87`35R(~oWR!|-mll2h@)@Uq!1c~f7pQv^E-vEgw=@V|BTy0L^DC;VsaX-n z$kq>zQPS-b&EyXO(at2BcYb+nx2?XIfrR-DHhJ1&y)!29f9qF$<6n|^KJ|pZQH#Ht z&af)9)Cpqr9qU}^+*E0O4TWRJxtgS$=vejts|)b5w1RLgl){oT|Yu5l6uHOj$3(HGA6nVK3d&XUc&rRkIQ z5w4Ph3~~KdFJi9)eQW@3lXHc0madK0eyMp~tc&IPMotn3!v`YpZYammo901f zDp%5;=|&Y97?0b+c8xZVjeAjoISS&vQzm7AynbvHa&c*I2zurO7Ze6*I^m}wxy+|cDV^X=z>E{RshB9 z>}d10h)4)fB6)atc6Q8lx4#2xm6(bOvJZB@zU8dvt0gusa&mIaotyx1V*Kviy9EF} z$vZZGP;mug2y|$m{P047HZ)b#>C3W}YgxrBgR$qqo7RGYf+hNuXi%93P+2Faq=Tdl zD1!XX0umI|Z)t!nySp{pyx}l8JstR81cXqsfXetym^LFNg&MfbX27EXRd?h=;U_0s zUJB9(Jp-dDshTcMu4!|sXari)F%L7PAn@=;@dM38Wbgw#+(5m(##tHbw#N763*ZG8 zXyp^m%*<5P3)+mZ>Kho`XE}AE*#_lzb0CR9eexT*mcazySD^ zA)vbL=e9kUF6n!j*3;Kl4HQKICnu+)wQ=r`Sy`QEXlVMtdTf4mCSnNEUq@cRgtQJN zV*Eay1Y;_mySiEcJ(h=+H7F%DRS<=Tmp7WfS3h4peG(=uR3{Ifd8CRs=pU|)r(|X_ zswgU&txuF&H#If!h=|n5mG=)0#`Jvpl<+J)p5yOpUR%?or_%K{qaov^hRL%nFW-WY zd@q${baeFBA3xyZf-8f9FzU=Y(SFo97_!GHx|VWNMErzRHh_iy35s#9wKh+ld;-*W z2MiYY2|T!WpdyeeV1?W8Fld*3BdMW)<-4vHT>x4ip{NSI0l9(LM!1LC`}O0A}1z*t02ZZBlQQ z^Ln<&=#>AxCVMi>;_)M^nGTnA-dJqUw_EG#>VEzH zo%igt%BL`78mQ1rqxO#(X;-$)cHY9u6GC@bRO#*MCdpOp5htOi^i zAgoNXhu;xsXYbYKQ$pU)3u(cm+RPsi$zFKK$zh;(WM^MWoT{*rd@L?DeAWyUSW9>x zgX6z}8(DRAw7+i&6BA&xgq5@ikU#5Q{2j?QwPz?wW9|F&35XMtN2mMNPi<|#`1ts| zQH^i!Z{B|LGKOlvw?(jb5^Sq}_0w<2IyZYA+Lo;%AKRMV6+cr|mMIE0Mb!H0;@1Er zmLJSTplDLR4=qOp`JUAu;tYm1)4t!u+96A(?I<}JzYE)q!>D3)D4I{d;)nDJO^$80g}g$A2-^PQjR&g zfJjE#_BKdklGNuYznMyAn;o17y5!R%jo zEdnB24hZBoRg`c3b*b@L`@bwW;Sa`(bh7gD64xuo#>Obk=G045TdOR)mly`3b-(fLS zk$9cmS|e*}RP&rnje#_OkAtl1^Jk8;%8zQ0VIHd~Nl#bN?XyYhHb~XqWPQ@}F+ZPS zc|Y;i_GuAM-#wR8zwBs38CS07@%B%iV1&yB3=IvTWqQD*5SSt3ygerg;S%t`85EV2 z`lrOCkAKq&J@Z>xc>>hhr_!J>qPz62jm_uI^s}K4_rs?(gylB};x|^ET-EDm3p8%* zocj3uJHU;sG`garqa!9IMYp!LhKABZ82b{U%@qth+fNpiOQsEPQtv!x2gMAK@Xx0d z3vT2&Q%^cBV1lmha&J^1keY#-9Vi=0XeE8TvnUH=lI{a@99$#VD0CELpXrltf|O4ilW zqLTj>f&~_04_OH4N_l&Gs{#Rp&!hz?>u4Y=5(7-`rA*(;PGCe|Cm{&{)fh!qlH89U zpAyBF>yYySS8j&Eo|9>2miEE+b;_u%fFzhD>#5tbLH1LBwi@B9mFi3f1 zKd!Zf;Ux0#!k{*b2Q|_Snkrb+5KufR(k_gDrO@8oED;|c5AB(#PRH`%aU7-VA^K2NcuC5M1Z$K=3jx69aTU$5*IJ6@6 zegKvLs{Z2AQb1=QHuw6kVqt@$^pb52_1CXoPXY@a)R*8`VgmOT!0A-5zrL06=6pUJ z?}?=T0ea8m)`LDN#!0=;rZkkM%DmF*|pwEhXsn+^pL z5eRmGfTnYHmLBNsT9YDS8!H#D&v&{xp?O3BEQnj~I1x=6y{oe1pDn-agWbEu^8;e3 zYY~*wN#a;;_vRnU=Uix+dyYI|fjKHpQ$i|GGUx;i%!w>wVe;#{m{7QYoP9;~Evd{H zDM)$8x|YjFcvV!K5S|^KKBvdi(1HScAXI!_tRa%b_{55dDqD~|$^$0@y0*E;^nE||UZy@Qg()X&}C{$)lRbQXZah@<3 zio#{G%t0L2kx#|59AU*r+7q8Xg*6Zc7sLT4@WcH;8h~^4yKw{&vt@&Rr=~fCrm}kV z0?~}^J#HLwYGHCVI|nVH&~0NP9@1lHCdYlXgv(4G^6?|__wVU2_={eVRTB~pTeFF> zVq!c@=r@tVgUcjD!b}mxU;$fg>rcIJoHwWN;ZC@=misU^=6&h+SC50?f#LUpI1IAJ z0p)m+NcEsc{>(t+%R3#rlbuB>DW8U}dab)sMcSu?g@t^HP2*n@Q(11@AknmWuUTJg z9}*%wTx%x?q8!-JCW*lnTUuKBW0Z~3e&K$-)^6SG{KU~HvxGp2!U>nm9y zCzDdSb*rb!P^Ea-L3P_@$>a9zA+BLybl2MH1=mV?y|Dh8u^9qLq(}8-OH!*}hAPZu z^VGkUY(0@IpKqZK5VS@EIUX_XBJIkeypdy4W`jL76*Zhiu#B1f?i;8ewXm?WsB~LU zkjI7gaQzC#SM-{9pj4BT(=uj8{vC~hfcZ9Ho5`R@2|uyMBB&MMzNu@ux5DsFw47*S zk(m5#e7yf$tLRem_S(|tI3=S{S)4^I_>eFzoNGS#-e;vyj{@Pl*M%f2RYfMo_%|P_ zcdztIE<(u^U};Q(TGEE9Q+oyyt3I{rj$5wzmC@SmgR69A-LX zheR6#APS0)GN~d2E|=#<2m*$O097LhM9M}GmD7CReO@z9Q@%83p)w$ z^P7N;sjYag!wwK(y-w`}_cy1+|GQ0M*qqKm{2|{``H=P`m2eS$G($S*;H#B&qoIJH zJH_1GJ~8QyfT(Xz0ll{@&e~`J=xFl;`t z*bH7kAUIC8UEo1m+8=OJ7@331;w46p>q>}B=P^M{f*EP*hm+Pf5-M$l5N-PnBnQU6 z({JPUid}+o!1Lb?{`?`}P@rhaEQg6mA;l3CBLR1!L1fH$&1`%(8E@v1?tLHB2(UBq4 zz3^IESF`LUJ{pB;^T4buXu*P3t5SpW;&nQ@Iv7Whv0kwv18q!D-&&e!424G)BO~6S zF|0QMc0lx>q0V>f&N$3m$WXF`m8n`vDxqiCG@@k$jG2r>2w;jiQ4y&vAJ6jwASfv6 z8wC)ly4)09LA+1`#u35bx6_vUab&ju0f2NmI{Y2DH*#SpRKS1tiFAo9`?f*@1F2_b zKFT~S=Yk6=FZb5E>@N9$$PLx^@6DCZS9Qu{xvF1Zv?+`iB|7ge0W_3ZIVm)#;D8grsTF;XRk^3qQtMHzEnAr^OHct7h%#%$ zmYZrVY_!m3WDo)J5##Io@rd=7J#a2kCmHN+01~kLx&y8(J@`0dE2Z*Bq*d8CX4<2GkpxuI87Y8^`xEM zQ&gx`iHI0FFNb)ke;tN~0Ho~zP#=nocw=_B_8h^JEq1>}Do}{YD*zG;Zd^5>1k3<& z)YPQo{C5Pc#&OnfJ(ldt=K=~|qjxZjD%E`DbL(W|J{Of%d0~dI5C%xC_L%xgE{c<7 zn;}*%ln5It0&%t)#v#OA^vET1wDPyiV5G~RAEngL_PuY~ZlP*doR=34)qZmT7{T8 z>1DR2tpW@KibQTZXZoa(D27?gtt~;9{ok}uH1BTqSQG4>fa*V}t#nNsQ-cq{oUHjv zQs;Pq4GrDS3Um4f!ceFcAwtZN0Jh?HSz_Lpbb)bbF)$|Sh)cAmM!@aw2nK-PPkhJ2 z)L_k)#933ci&%pabyQAH9>p8Y*-tJ6mKyR|j(#*p(6C_mWX6!$90{F$F}TjIQ{iXF z-HTgN=z!Wb3e6>fxFtmTDh*viLQ6Hx6Q}*s>$+y)T8vg*twYpwy(~1*1>iRC0H{~L zX^d3D-KY})APXBaDeJK~%(g-B?8<*n_c;!>+sUb^Ely4vK0qTLF03ge91L{`pa&84 zw7t3nxm70UY?pO&X_lL?BZk&X_}%&=MQW=jVaRHyNxdR!c8|)!0QYJEYAl*~lzdX1 zfY2Cjd1(xY6iNcx9}D8FiNanlC_TNtLp}uM+4xhh&D|HjNqayY@kZ?(MXBt$Tqni3lcRerf`Oj5zB z-aA~=K@e`fR~HHEv3ORNqcoS7<*`Xg;Qe#Sy1JLEoMnht z-G68ft*hMuzUavcbE+Vje>nX`aGpVhm=@rZ-3gou+U{wt+jHz-TRv@0XTkAQ{sSHM z&hL)gQ0)tX9s>d>`R_h04+tKHT?2$R2vjjZ%fAN>#clHd%n9bgJm~oVPfh{q4b z@eO9?;PndELcMaD$2A4`((RPUWf9JBZ{$yGm4V+t&KFr5&nf(f%WQ?rGw1=X+6{XL zJ5R3KLFHq78X?W3(2{3q|8kILL=1C>hNFfId;y3hL=vw=F}+Cz!9xe7Oz>l=D;lKs|B`fA5gi z+SHw_fuWACz(a3YO(z~x%ZwMb32dh@{c1Y_!m8|(vI+!%oCEw1!SKtM$) z^-6h3h@F4{74%yl$nt6rf#ZbXD7TG_)Gd3jaU**X!m38X2#~x4L#+rhH-C}c4ZwTz z)$hYVM-5qz<%;YKoL)XZZG=236nrx1;bn|^mXth(?w2sYBGP*AUq1h(e7mGXWMQ$} z0|YMofu;q~;{+A69RHsUna@{HFQZ0W--ZF}_w>|=`+-v~^qRr@7spu0(yG1x(>?5h z4a(jw6cLF!_%PKBbkOS4dhS(0G^*b+i4N`vP*uIqkG~F2^2JRbVrs-xp+I~P9N4W3 z9Vep}F-C_eAvi&J#a?c=U=9Mo+ndKQ>&Ax1WW)cfYWT?VZJ`oe+3xoZZrpNzr`fM| z_q}nsi{}>sp(-27Zm~V*Qea{nf$Rrz*bli~&EStiuKf%rq>lu6%3UPxfr~$6`b?AG z^1pFUmaGTFJsN*qpdWlq)TvG5pF1u@E?qN?H*edHnEJc;UrONg@FHPEOiCfYxN5V>{RZfD+Qf&P`~V zeWS`{<@~%kib3+n;^l=ia^Rt9DH}yI<_%S3UgdbD;DrBo1jM81mvn2rd%^=1WHE7W z=1YUObI5aOHmrXN;FJXjHuD^+S-b%kc=68x7(E%Fq9nPnS|7x|%^c($vi3L*4?$bv zk`e;*@F6tk#Ai`*v4D&KiXq{^yQBe#F<7zd0ARcc**sa(thn2Y;hI7z$GK}+;w^Y& zkQ5=t7!D7Dkuqv+!hv`G-aQ&@N!iV80n zlkZ`ELvW7=RHcjJSwQ^wem9$ra6MY!N-Tm70mQ+f z;2s`TeaU}lz{8}3ksNMKkL)eAFSjV04n1#UJHjdJOIq& z)*I2W%Pb-0KoT)Pk8AR_MPdVZ9*D1K9OoWo0F7{W|M-gwPzk+Jc0eUQ1s*eNTDpfN z^p7A`;+_ydaD0ruIBx4}z%f@6s7-}kG*+nKy#EwOQ*)$qbszdw%oJC80leTJkXHTB zhY%xEE&13KPJcko0$Yq4X_$2dZM~DI7dx|&H8s5lR1%&syPy^f^PJ}9=lV7Lv zK_W%&$hq))ko8H#<3R;JzXvtx8$Nd zFk(vOXEArY<2MFvL^C#p9#G&FLm*MZ!=}*JAuLQ-oc^oEL59HaL03ZKV;zE80CX`~ zqpH~g*I2P$=~tIzg~CE=kT526-#(HBI6?^FrXSG0U=9k!MAmhgu#&rlH&Y5)6S)U} z7ykyxNn9MWf0-jW74`TE`)xJ=yYWL~>()-=S5;g(`f1KPEL&8x6EMH=ZEQ-)p(W?) zwr{0=KzFDU)9sy7RR`paA00gfz3LM(PO`nMa?_pH<)4?9NGf0Mv%Oe5zz4<~ABaCK zeNShsv>A0)j>ToR4UK=2{p0fTj1z`o5QpCM-iUTBA_& zl9>{!Z3u6LPOgUl5GIY!A2QvLOtc!2&5H^@^)k4>xNXc)dox@pS|Xv+?hl{8ioTpynd zm^?c01z)uvVXZ_)&V*;esp}4L!zeFE*ZN-a*o_c!j^{erpOskRSa>!_fg_S!DEaCY zeTn`s<2l;*cp-*6>k9oas-~yHym`2I;sH$6CIr|i6%j*8*HTX%K-p8*iE){8RUw+T zwOjpe7Z#-!r2Y5>AAbzC{m-Qc=+1I*3jDI2Z9(6ZQV3e>B;AVOYG>jiLR)qv)vjq|Vg5p3yUO|B;1oe3x18XRkrt?YI5Np^w zsJZ+*c%g5QNV=*yh=Ou0LrLzw_PkASdfJqAOy;j$lp8sZe;qyT3E1&8Sgx*~doFcy zp3SAD2oU{d)y=)ryC5-*7Wu1YrFqWY?oNv z{hS)4*Mea59gtl8m;3U&Mylk4n{4mn6jBwa3uvfFUwTq#+FW87K%oP+C4`nS5O;MB zSJH#R?wznljaWpEG2c>Op+3=ZMeJwabrjXRm-Pk`tcBfW92|@mpXKo$ z3r-NH3j{-ARm40C$z3F)lYfo^IvfT-IF2_xa0SF4V55SP^_be!Y})?ugGw?xh;5MlI~JACQ$9GnkHa}%fI+7rfpA&uC$~1*G0~)0NkV9Z zYaltny`kXFC7Rr=lI^h_1=>MaG1xOrwP;Z^iStDaRbfEEi5V1x#wsN^(R+EyGEbg_ zp+1@2DagqQ2YkzCA$JiV`OG$5ym^=z-$4cAuSbUgeJ|gR(Fo1H8|-T0ksjMpR#%=w zL&P2Zh3HT@A!M=>>j9FQGZ1Mouzg_&%Rd;ycPr%D-$#ovoKWOjQc@Do;0Cv$|G2CV z(q!-tzyyamlH3SfTGGo$FN>QHH0hwt|Gj&xhMCvcby1uyac|E`=zF?14s1y%_;F*P zp~C4wtc=6-gD+#fkm`0qc7cK->c}GtpZNw~AN8)}w&gGjkzyXt{I@7TcU0JpGo?wM zq0~DD--E&goHzWNH}~;$n1hLBT!Ea+0&pQeMb;(pNX^{?pO9B)TcB4Y{_ohy-=y`u zj6%MBHz$pVJ&v()&sYnnq&Lb;-TJ&b*zfEv1(Q!DEQdavCx0iGk2`zFO2W*-BICHp z-@CIUPj`MH>$3TnLoWM;{iGSTpy1D5Cm{Oc5;4eiPJ7b{3F~+?+%ML>YQ2JBUSax zM9`LDXa9Gbf4J}9Z~E?vl8{Mzv}~$~n^n`U{pIvd&|b&KvW{4Ws8EOK$7lU5%p zid3@xqK&^3AX7M?Qz0RRNl#nStKezCxtfIq7G!!vKuhcS5%nDe#u6eE>{600~1D57lg-WfDi^0b^AG zhLuC5A~rrg9Ej@97Xna~xB8!tzV|~d{1D|6=*k8mg%Y_;C0(m*6pr~jc2;09g-hz?r@9w^=T0&>Z#i?Q_M+UG&?SfNjJbtH0KJ4e zfJYXgt*t!6y=M*B5eB|u7Jul}Liac#?X3kx%{HD_Nr5}a3I{@eX?1D~`r%Aucu1c# zugye0EGnu8rVV73m&b^^tpOU*ln3pN$nDupumO?=vH$xj5X@ zg9-i1p&vg&pe&CJJ%D@50UY7b=xFy?p;knx6Cz6MPgUp~5D=jM=+UF_AJn(aP}b*K zCA=@s??lAJSc6);)!f|N1}v4TtZX1A21do$n6~@bkwYB-J2wu2r9DW+E+a6>>uUUIdWdX#l1ybTwDP9)389j zBqSu00hsvufD%ZNW9hGT)Y#66i@WX(qdZhV#GaI0)eL^x{!0Sq2B@-cfLePA=&^t8 z?#_`bZxuR=AeK?|zssRi=BNCgwH@+9R5Pc!mi}WSeSNCYkr4|(!Kh{+tf#4C3lOas{nH^bVLQP|fIlv_XyD0fk1UU4GoQ- zF-rdz0)g2YV_0Y3e>n}5BA!F z(#N$`nNBkel{|d%zg~KIK}6^dU&n$#vE}7HF*S9HT}r@_@m${->etlO+NQmrsDIwRqJA^o*2Q=$n9a%Cn zGyfb!wURcW6}H8Y%0zHl{`^VnnSp_UU$<|7jT(QTB*2-JmBkEDFeu*2L0F82i;D~O zdTCzB#C$JLu>nD)0OJJ&1O*}fff+gPUv+D=dL8Z@{MBk?$AQI?2f2ADy3qknkQvm` zVdleI!!x7Py7_~HgGYs$Y%`6|vCGQJ@cvtUs5hd+Ue@*i31^~#0>r_-YFi!))`2j)%=&iSk^vVhK^z=MEJ?|MB(xQOIC6s+nJ}4)0 z{TxSIL3+f{T9=2B6GQF3zSro*$xx8HZgi0S3GcANycb9`3JV5!(;Z<7pMWg!7L{Gqfvj7qUJ^ElkIlu^oT2thllY8d$wBPvd#wzxZI7JONl=*C^kloAULh z6!6>yrtMPhTQlL;Z#+mSB9L!y10);I{vHbU}5l z^7VyRS+^#wPO+|ht?f97qGh?dbTh!VVQ~T{SgQ?|0qWrI*KdzeBvRY}kN4(*=>Lw_ ziN}U=D{}FmmHSZ2{qL_Y|2y*VS4D;w%O;qK85z-V`(@n)#1JS=Fc(OQ>srb7fx!7^ zB0w1>D6+~pJKvr#*Tw;xWfc11=#M_6B-!>t%g8Ojr5j(4ynFJWPnOyH09{Pvud!ek k+5h`4D;&fBb;HZPEDvpYLxh5DP~aaWd3Cum8MA=@1Fu@k>i_@% literal 0 HcmV?d00001 diff --git a/Doxygen/build/Vector3_8cpp_source.html b/Doxygen/build/Vector3_8cpp_source.html new file mode 100644 index 0000000..8b8c8b9 --- /dev/null +++ b/Doxygen/build/Vector3_8cpp_source.html @@ -0,0 +1,1007 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector3.cpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector3.cpp
+
+
+Go to the documentation of this file.
1 #include "Vector3.h"
+
2 #include "Math.h"
+
3 #include <iostream>
+
4 
+
5 //#define _EULE_NO_INTRINSICS_
+
6 #ifndef _EULE_NO_INTRINSICS_
+
7 #include <immintrin.h>
+
8 #endif
+
9 
+
10 using namespace Eule;
+
11 
+
12 /*
+
13  NOTE:
+
14  Here you will find bad, unoptimized methods for T=int.
+
15  This is because the compiler needs a method for each type in each instantiation of the template!
+
16  I can't generalize the methods when heavily optimizing for doubles.
+
17  These functions will get called VERY rarely, if ever at all, for T=int, so it's ok.
+
18  The T=int instantiation only exists to store a value-pair of two ints. Not so-much as a vector in terms of vector calculus.
+
19 */
+
20 
+
21 // Good, optimized chad version for doubles
+
22 double Vector3<double>::DotProduct(const Vector3<double>& other) const
+
23 {
+
24  #ifndef _EULE_NO_INTRINSICS_
+
25 
+
26  // Move vector components into registers
+
27  __m256 __vector_self = _mm256_set_ps(0,0,0,0,0, (float)z, (float)y, (float)x);
+
28  __m256 __vector_other = _mm256_set_ps(0,0,0,0,0, (float)other.z, (float)other.y, (float)other.x);
+
29 
+
30  // Define bitmask, and execute computation
+
31  const int mask = 0x71; // -> 0111 1000 -> use positions 0111 (last 3) of the vectors supplied, and place them in 1000 (first only) element of __dot
+
32  __m256 __dot = _mm256_dp_ps(__vector_self, __vector_other, mask);
+
33 
+
34  // Retrieve result, and return it
+
35  float result[8];
+
36  _mm256_storeu_ps(result, __dot);
+
37 
+
38  return result[0];
+
39 
+
40  #else
+
41  return (x * other.x) +
+
42  (y * other.y) +
+
43  (z * other.z);
+
44  #endif
+
45 }
+
46 
+
47 // Slow, lame version for intcels
+
48 double Vector3<int>::DotProduct(const Vector3<int>& other) const
+
49 {
+
50  int iDot = (x * other.x) + (y * other.y) + (z * other.z);
+
51  return (double)iDot;
+
52 }
+
53 
+
54 
+
55 
+
56 // Good, optimized chad version for doubles
+ +
58 {
+
59  Vector3<double> cp;
+
60  cp.x = (y * other.z) - (z * other.y);
+
61  cp.y = (z * other.x) - (x * other.z);
+
62  cp.z = (x * other.y) - (y * other.x);
+
63 
+
64  return cp;
+
65 }
+
66 
+
67 // Slow, lame version for intcels
+ +
69 {
+
70  Vector3<double> cp;
+
71  cp.x = ((double)y * (double)other.z) - ((double)z * (double)other.y);
+
72  cp.y = ((double)z * (double)other.x) - ((double)x * (double)other.z);
+
73  cp.z = ((double)x * (double)other.y) - ((double)y * (double)other.x);
+
74 
+
75  return cp;
+
76 }
+
77 
+
78 
+
79 
+
80 // Good, optimized chad version for doubles
+
81 double Vector3<double>::SqrMagnitude() const
+
82 {
+
83  // x.DotProduct(x) == x.SqrMagnitude()
+
84  return DotProduct(*this);
+
85 }
+
86 
+
87 // Slow, lame version for intcels
+ +
89 {
+
90  int iSqrMag = x*x + y*y + z*z;
+
91  return (double)iSqrMag;
+
92 }
+
93 
+
94 template <typename T>
+
95 double Vector3<T>::Magnitude() const
+
96 {
+
97  return sqrt(SqrMagnitude());
+
98 }
+
99 
+
100 
+
101 
+ +
103 {
+
104  #ifndef _EULE_NO_INTRINSICS_
+
105 
+
106  // Load vectors into registers
+
107  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
108  __m256d __vector_scalar = _mm256_set_pd(0, scalar.z, scalar.y, scalar.x);
+
109 
+
110  // Multiply them
+
111  __m256d __product = _mm256_mul_pd(__vector_self, __vector_scalar);
+
112 
+
113  // Retrieve result
+
114  double result[4];
+
115  _mm256_storeu_pd(result, __product);
+
116 
+
117  // Return value
+
118  return Vector3<double>(
+
119  result[0],
+
120  result[1],
+
121  result[2]
+
122  );
+
123 
+
124  #else
+
125 
+
126  return Vector3<double>(
+
127  x * scalar.x,
+
128  y * scalar.y,
+
129  z * scalar.z
+
130  );
+
131 
+
132  #endif
+
133 }
+
134 
+ +
136 {
+
137  return Vector3<int>(
+
138  x * scalar.x,
+
139  y * scalar.y,
+
140  z * scalar.z
+
141  );
+
142 }
+
143 
+
144 
+
145 
+
146 template<typename T>
+ +
148 {
+
149  Vector3<double> norm(x, y, z);
+
150  norm.NormalizeSelf();
+
151 
+
152  return norm;
+
153 }
+
154 
+
155 // Method to normalize a Vector3d
+ +
157 {
+
158  const double length = Magnitude();
+
159 
+
160  // Prevent division by 0
+
161  if (length == 0)
+
162  {
+
163  x = 0;
+
164  y = 0;
+
165  z = 0;
+
166  }
+
167  else
+
168  {
+
169  #ifndef _EULE_NO_INTRINSICS_
+
170 
+
171  // Load vector and length into registers
+
172  __m256d __vec = _mm256_set_pd(0, z, y, x);
+
173  __m256d __len = _mm256_set1_pd(length);
+
174 
+
175  // Divide
+
176  __m256d __prod = _mm256_div_pd(__vec, __len);
+
177 
+
178  // Extract and set values
+
179  double prod[4];
+
180  _mm256_storeu_pd(prod, __prod);
+
181 
+
182  x = prod[0];
+
183  y = prod[1];
+
184  z = prod[2];
+
185 
+
186  #else
+
187 
+
188  x /= length;
+
189  y /= length;
+
190  z /= length;
+
191 
+
192  #endif
+
193  }
+
194 
+
195  return;
+
196 }
+
197 
+
198 // You can't normalize an int vector, ffs!
+
199 // But we need an implementation for T=int
+ +
201 {
+
202  std::cerr << "Stop normalizing int-vectors!!" << std::endl;
+
203  x = 0;
+
204  y = 0;
+
205  z = 0;
+
206 
+
207  return;
+
208 }
+
209 
+
210 
+
211 
+
212 template<typename T>
+
213 bool Vector3<T>::Similar(const Vector3<T>& other, double epsilon) const
+
214 {
+
215  return
+
216  (::Math::Similar(x, other.x, epsilon)) &&
+
217  (::Math::Similar(y, other.y, epsilon)) &&
+
218  (::Math::Similar(z, other.z, epsilon))
+
219  ;
+
220 }
+
221 
+
222 template<typename T>
+ +
224 {
+
225  return Vector3<int>((int)x, (int)y, (int)z);
+
226 }
+
227 
+
228 template<typename T>
+ +
230 {
+
231  return Vector3<double>((double)x, (double)y, (double)z);
+
232 }
+
233 
+
234 template<typename T>
+
235 T& Vector3<T>::operator[](std::size_t idx)
+
236 {
+
237  switch (idx)
+
238  {
+
239  case 0:
+
240  return x;
+
241  case 1:
+
242  return y;
+
243  case 2:
+
244  return z;
+
245  default:
+
246  throw std::out_of_range("Array descriptor on Vector3<T> out of range!");
+
247  }
+
248 }
+
249 
+
250 template<typename T>
+
251 const T& Vector3<T>::operator[](std::size_t idx) const
+
252 {
+
253  switch (idx)
+
254  {
+
255  case 0:
+
256  return x;
+
257  case 1:
+
258  return y;
+
259  case 2:
+
260  return z;
+
261  default:
+
262  throw std::out_of_range("Array descriptor on Vector3<T> out of range!");
+
263  }
+
264 }
+
265 
+
266 
+
267 
+
268 // Good, optimized chad version for doubles
+
269 void Vector3<double>::LerpSelf(const Vector3<double>& other, double t)
+
270 {
+
271  const double it = 1.0 - t; // Inverse t
+
272 
+
273  #ifndef _EULE_NO_INTRINSICS_
+
274 
+
275  // Move vector components and factors into registers
+
276  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
277  __m256d __vector_other = _mm256_set_pd(0, other.z, other.y, other.x);
+
278  __m256d __t = _mm256_set1_pd(t);
+
279  __m256d __it = _mm256_set1_pd(it); // Inverse t
+
280 
+
281  // Procedure:
+
282  // (__vector_self * __it) + (__vector_other * __t)
+
283 
+
284  __m256d __sum = _mm256_set1_pd(0); // this will hold the sum of the two multiplications
+
285 
+
286  __sum = _mm256_fmadd_pd(__vector_self, __it, __sum);
+
287  __sum = _mm256_fmadd_pd(__vector_other, __t, __sum);
+
288 
+
289  // Retrieve result, and apply it
+
290  double sum[4];
+
291  _mm256_storeu_pd(sum, __sum);
+
292 
+
293  x = sum[0];
+
294  y = sum[1];
+
295  z = sum[2];
+
296 
+
297  #else
+
298 
+
299  x = it*x + t*other.x;
+
300  y = it*y + t*other.y;
+
301  z = it*z + t*other.z;
+
302 
+
303  #endif
+
304 
+
305  return;
+
306 }
+
307 
+
308 
+
309 
+
310 // Slow, lame version for intcels
+
311 void Vector3<int>::LerpSelf(const Vector3<int>& other, double t)
+
312 {
+
313  const double it = 1.0 - t; // Inverse t
+
314 
+
315  x = (int)(it * (double)x + t * (double)other.x);
+
316  y = (int)(it * (double)y + t * (double)other.y);
+
317  z = (int)(it * (double)z + t * (double)other.z);
+
318 
+
319  return;
+
320 }
+
321 
+
322 Vector3<double> Vector3<double>::Lerp(const Vector3<double>& other, double t) const
+
323 {
+
324  Vector3d copy(*this);
+
325  copy.LerpSelf(other, t);
+
326 
+
327  return copy;
+
328 }
+
329 
+
330 Vector3<double> Vector3<int>::Lerp(const Vector3<int>& other, double t) const
+
331 {
+
332  Vector3d copy(this->ToDouble());
+
333  copy.LerpSelf(other.ToDouble(), t);
+
334 
+
335  return copy;
+
336 }
+
337 
+
338 
+
339 
+ +
341 {
+
342  #ifndef _EULE_NO_INTRINSICS_
+
343 
+
344  // Move vector components and factors into registers
+
345  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
346  __m256d __vector_other = _mm256_set_pd(0, other.z, other.y, other.x);
+
347 
+
348  // Add the components
+
349  __m256d __sum = _mm256_add_pd(__vector_self, __vector_other);
+
350 
+
351  // Retrieve and return these values
+
352  double sum[4];
+
353  _mm256_storeu_pd(sum, __sum);
+
354 
+
355  return Vector3<double>(
+
356  sum[0],
+
357  sum[1],
+
358  sum[2]
+
359  );
+
360 
+
361  #else
+
362 
+
363  return Vector3<double>(
+
364  x + other.x,
+
365  y + other.y,
+
366  z + other.z
+
367  );
+
368  #endif
+
369 }
+
370 
+
371 template<typename T>
+ +
373 {
+
374  return Vector3<T>(
+
375  x + other.x,
+
376  y + other.y,
+
377  z + other.z
+
378  );
+
379 }
+
380 
+
381 
+
382 
+ +
384 {
+
385  #ifndef _EULE_NO_INTRINSICS_
+
386 
+
387  // Move vector components and factors into registers
+
388  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
389  __m256d __vector_other = _mm256_set_pd(0, other.z, other.y, other.x);
+
390 
+
391  // Add the components
+
392  __m256d __sum = _mm256_add_pd(__vector_self, __vector_other);
+
393 
+
394  // Retrieve and apply these values
+
395  double sum[4];
+
396  _mm256_storeu_pd(sum, __sum);
+
397 
+
398  x = sum[0];
+
399  y = sum[1];
+
400  z = sum[2];
+
401 
+
402  #else
+
403 
+
404  x += other.x;
+
405  y += other.y;
+
406  z += other.z;
+
407 
+
408  #endif
+
409 
+
410  return;
+
411 }
+
412 
+
413 template<typename T>
+ +
415 {
+
416  x += other.x;
+
417  y += other.y;
+
418  z += other.z;
+
419  return;
+
420 }
+
421 
+
422 
+
423 
+ +
425 {
+
426  #ifndef _EULE_NO_INTRINSICS_
+
427 
+
428  // Move vector components and factors into registers
+
429  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
430  __m256d __vector_other = _mm256_set_pd(0, other.z, other.y, other.x);
+
431 
+
432  // Subtract the components
+
433  __m256d __diff = _mm256_sub_pd(__vector_self, __vector_other);
+
434 
+
435  // Retrieve and return these values
+
436  double diff[4];
+
437  _mm256_storeu_pd(diff, __diff);
+
438 
+
439  return Vector3<double>(
+
440  diff[0],
+
441  diff[1],
+
442  diff[2]
+
443  );
+
444 
+
445  #else
+
446 
+
447  return Vector3<double>(
+
448  x - other.x,
+
449  y - other.y,
+
450  z - other.z
+
451  );
+
452  #endif
+
453 }
+
454 
+
455 template<typename T>
+ +
457 {
+
458  return Vector3<T>(
+
459  x - other.x,
+
460  y - other.y,
+
461  z - other.z
+
462  );
+
463 }
+
464 
+
465 
+
466 
+ +
468 {
+
469  #ifndef _EULE_NO_INTRINSICS_
+
470 
+
471  // Move vector components and factors into registers
+
472  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
473  __m256d __vector_other = _mm256_set_pd(0, other.z, other.y, other.x);
+
474 
+
475  // Subtract the components
+
476  __m256d __diff = _mm256_sub_pd(__vector_self, __vector_other);
+
477 
+
478  // Retrieve and apply these values
+
479  double diff[4];
+
480  _mm256_storeu_pd(diff, __diff);
+
481 
+
482  x = diff[0];
+
483  y = diff[1];
+
484  z = diff[2];
+
485 
+
486  #else
+
487 
+
488  x -= other.x;
+
489  y -= other.y;
+
490  z -= other.z;
+
491 
+
492  #endif
+
493 
+
494  return;
+
495 }
+
496 
+
497 template<typename T>
+ +
499 {
+
500  x -= other.x;
+
501  y -= other.y;
+
502  z -= other.z;
+
503  return;
+
504 }
+
505 
+
506 
+
507 
+
508 Vector3<double> Vector3<double>::operator*(const double scale) const
+
509 {
+
510  #ifndef _EULE_NO_INTRINSICS_
+
511 
+
512  // Move vector components and factors into registers
+
513  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
514  __m256d __scalar = _mm256_set1_pd(scale);
+
515 
+
516  // Multiply the components
+
517  __m256d __prod = _mm256_mul_pd(__vector_self, __scalar);
+
518 
+
519  // Retrieve and return these values
+
520  double prod[4];
+
521  _mm256_storeu_pd(prod, __prod);
+
522 
+
523  return Vector3<double>(
+
524  prod[0],
+
525  prod[1],
+
526  prod[2]
+
527  );
+
528 
+
529  #else
+
530 
+
531  return Vector3<double>(
+
532  x * scale,
+
533  y * scale,
+
534  z * scale
+
535  );
+
536 
+
537  #endif
+
538 }
+
539 
+
540 template<typename T>
+
541 Vector3<T> Vector3<T>::operator*(const T scale) const
+
542 {
+
543  return Vector3<T>(
+
544  x * scale,
+
545  y * scale,
+
546  z * scale
+
547  );
+
548 }
+
549 
+
550 
+
551 
+
552 void Vector3<double>::operator*=(const double scale)
+
553 {
+
554  #ifndef _EULE_NO_INTRINSICS_
+
555 
+
556  // Move vector components and factors into registers
+
557  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
558  __m256d __scalar = _mm256_set1_pd(scale);
+
559 
+
560  // Multiply the components
+
561  __m256d __prod = _mm256_mul_pd(__vector_self, __scalar);
+
562 
+
563  // Retrieve and apply these values
+
564  double prod[4];
+
565  _mm256_storeu_pd(prod, __prod);
+
566 
+
567  x = prod[0];
+
568  y = prod[1];
+
569  z = prod[2];
+
570 
+
571  #else
+
572 
+
573  x *= scale;
+
574  y *= scale;
+
575  z *= scale;
+
576 
+
577  #endif
+
578 
+
579  return;
+
580 }
+
581 
+
582 template<typename T>
+
583 void Vector3<T>::operator*=(const T scale)
+
584 {
+
585  x *= scale;
+
586  y *= scale;
+
587  z *= scale;
+
588  return;
+
589 }
+
590 
+
591 
+
592 
+
593 Vector3<double> Vector3<double>::operator/(const double scale) const
+
594 {
+
595  #ifndef _EULE_NO_INTRINSICS_
+
596 
+
597  // Move vector components and factors into registers
+
598  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
599  __m256d __scalar = _mm256_set1_pd(scale);
+
600 
+
601  // Divide the components
+
602  __m256d __prod = _mm256_div_pd(__vector_self, __scalar);
+
603 
+
604  // Retrieve and return these values
+
605  double prod[4];
+
606  _mm256_storeu_pd(prod, __prod);
+
607 
+
608  return Vector3<double>(
+
609  prod[0],
+
610  prod[1],
+
611  prod[2]
+
612  );
+
613 
+
614  #else
+
615 
+
616  return Vector3<double>(
+
617  x / scale,
+
618  y / scale,
+
619  z / scale
+
620  );
+
621 
+
622  #endif
+
623 }
+
624 
+
625 template<typename T>
+
626 Vector3<T> Vector3<T>::operator/(const T scale) const
+
627 {
+
628  return Vector3<T>(
+
629  x / scale,
+
630  y / scale,
+
631  z / scale
+
632  );
+
633 }
+
634 
+
635 
+
636 
+
637 void Vector3<double>::operator/=(const double scale)
+
638 {
+
639  #ifndef _EULE_NO_INTRINSICS_
+
640 
+
641  // Move vector components and factors into registers
+
642  __m256d __vector_self = _mm256_set_pd(0, z, y, x);
+
643  __m256d __scalar = _mm256_set1_pd(scale);
+
644 
+
645  // Divide the components
+
646  __m256d __prod = _mm256_div_pd(__vector_self, __scalar);
+
647 
+
648  // Retrieve and apply these values
+
649  double prod[4];
+
650  _mm256_storeu_pd(prod, __prod);
+
651 
+
652  x = prod[0];
+
653  y = prod[1];
+
654  z = prod[2];
+
655 
+
656  #else
+
657 
+
658  x /= scale;
+
659  y /= scale;
+
660  z /= scale;
+
661 
+
662  #endif
+
663  return;
+
664 }
+
665 
+
666 template<typename T>
+
667 void Vector3<T>::operator/=(const T scale)
+
668 {
+
669  x /= scale;
+
670  y /= scale;
+
671  z /= scale;
+
672  return;
+
673 }
+
674 
+
675 
+
676 
+
677 // Good, optimized chad version for doubles
+ +
679 {
+
680  Vector3<double> newVec;
+
681 
+
682  #ifndef _EULE_NO_INTRINSICS_
+
683  // Store x, y, and z values
+
684  __m256d __vecx = _mm256_set1_pd(x);
+
685  __m256d __vecy = _mm256_set1_pd(y);
+
686  __m256d __vecz = _mm256_set1_pd(z);
+
687 
+
688  // Store matrix values
+
689  __m256d __mat_row0 = _mm256_set_pd(mat[0][0], mat[1][0], mat[2][0], 0);
+
690  __m256d __mat_row1 = _mm256_set_pd(mat[0][1], mat[1][1], mat[2][1], 0);
+
691  __m256d __mat_row2 = _mm256_set_pd(mat[0][2], mat[1][2], mat[2][2], 0);
+
692 
+
693  // Multiply x, y, z and matrix values
+
694  __m256d __mul_vecx_row0 = _mm256_mul_pd(__vecx, __mat_row0);
+
695  __m256d __mul_vecy_row1 = _mm256_mul_pd(__vecy, __mat_row1);
+
696  __m256d __mul_vecz_row2 = _mm256_mul_pd(__vecz, __mat_row2);
+
697 
+
698  // Sum up the products
+
699  __m256d __sum = _mm256_add_pd(__mul_vecx_row0, _mm256_add_pd(__mul_vecy_row1, __mul_vecz_row2));
+
700 
+
701  // Store translation values
+
702  __m256d __translation = _mm256_set_pd(mat[0][3], mat[1][3], mat[2][3], 0);
+
703 
+
704  // Add the translation values
+
705  __m256d __final = _mm256_add_pd(__sum, __translation);
+
706 
+
707  double dfinal[4];
+
708 
+
709  _mm256_storeu_pd(dfinal, __final);
+
710 
+
711  newVec.x = dfinal[3];
+
712  newVec.y = dfinal[2];
+
713  newVec.z = dfinal[1];
+
714 
+
715  #else
+
716  // Rotation, Scaling
+
717  newVec.x = (mat[0][0] * x) + (mat[1][0] * y) + (mat[2][0] * z);
+
718  newVec.y = (mat[0][1] * x) + (mat[1][1] * y) + (mat[2][1] * z);
+
719  newVec.z = (mat[0][2] * x) + (mat[1][2] * y) + (mat[2][2] * z);
+
720 
+
721  // Translation
+
722  newVec.x += mat[0][3];
+
723  newVec.y += mat[1][3];
+
724  newVec.z += mat[2][3];
+
725  #endif
+
726 
+
727  return newVec;
+
728 }
+
729 
+
730 // Slow, lame version for intcels
+ +
732 {
+
733  Vector3<double> newVec;
+
734 
+
735  // Rotation, Scaling
+
736  newVec.x = ((mat[0][0] * x) + (mat[1][0] * y) + (mat[2][0] * z));
+
737  newVec.y = ((mat[0][1] * x) + (mat[1][1] * y) + (mat[2][1] * z));
+
738  newVec.z = ((mat[0][2] * x) + (mat[1][2] * y) + (mat[2][2] * z));
+
739 
+
740  // Translation
+
741  newVec.x += mat[0][3];
+
742  newVec.y += mat[1][3];
+
743  newVec.z += mat[2][3];
+
744 
+
745  return Vector3<int>(
+
746  (int)newVec.x,
+
747  (int)newVec.y,
+
748  (int)newVec.z
+
749  );
+
750 }
+
751 
+
752 
+
753 
+
754 // Good, optimized chad version for doubles
+
755 void Vector3<double>::operator*=(const Matrix4x4& mat)
+
756 {
+
757  #ifndef _EULE_NO_INTRINSICS_
+
758  // Store x, y, and z values
+
759  __m256d __vecx = _mm256_set1_pd(x);
+
760  __m256d __vecy = _mm256_set1_pd(y);
+
761  __m256d __vecz = _mm256_set1_pd(z);
+
762 
+
763  // Store matrix values
+
764  __m256d __mat_row0 = _mm256_set_pd(mat[0][0], mat[1][0], mat[2][0], 0);
+
765  __m256d __mat_row1 = _mm256_set_pd(mat[0][1], mat[1][1], mat[2][1], 0);
+
766  __m256d __mat_row2 = _mm256_set_pd(mat[0][2], mat[1][2], mat[2][2], 0);
+
767 
+
768  // Multiply x, y, z and matrix values
+
769  __m256d __mul_vecx_row0 = _mm256_mul_pd(__vecx, __mat_row0);
+
770  __m256d __mul_vecy_row1 = _mm256_mul_pd(__vecy, __mat_row1);
+
771  __m256d __mul_vecz_row2 = _mm256_mul_pd(__vecz, __mat_row2);
+
772 
+
773  // Sum up the products
+
774  __m256d __sum = _mm256_add_pd(__mul_vecx_row0, _mm256_add_pd(__mul_vecy_row1, __mul_vecz_row2));
+
775 
+
776  // Store translation values
+
777  __m256d __translation = _mm256_set_pd(mat[0][3], mat[1][3], mat[2][3], 0);
+
778 
+
779  // Add the translation values
+
780  __m256d __final = _mm256_add_pd(__sum, __translation);
+
781 
+
782  double dfinal[4];
+
783 
+
784  _mm256_storeu_pd(dfinal, __final);
+
785 
+
786  x = dfinal[3];
+
787  y = dfinal[2];
+
788  z = dfinal[1];
+
789 
+
790  #else
+
791  Vector3<double> buffer = *this;
+
792  x = (mat[0][0] * buffer.x) + (mat[0][1] * buffer.y) + (mat[0][2] * buffer.z);
+
793  y = (mat[1][0] * buffer.x) + (mat[1][1] * buffer.y) + (mat[1][2] * buffer.z);
+
794  z = (mat[2][0] * buffer.x) + (mat[2][1] * buffer.y) + (mat[2][2] * buffer.z);
+
795 
+
796  // Translation
+
797  x += mat[0][3];
+
798  y += mat[1][3];
+
799  z += mat[2][3];
+
800  #endif
+
801 
+
802  return;
+
803 }
+
804 
+
805 template<typename T>
+ +
807 {
+
808  return Vector3<T>(
+
809  -x,
+
810  -y,
+
811  -z
+
812  );
+
813 }
+
814 
+
815 template<typename T>
+ +
817 {
+
818  x = other.x;
+
819  y = other.y;
+
820  z = other.z;
+
821 
+
822  return;
+
823 }
+
824 
+
825 template<typename T>
+
826 void Vector3<T>::operator=(Vector3<T>&& other) noexcept
+
827 {
+
828  x = std::move(other.x);
+
829  y = std::move(other.y);
+
830  z = std::move(other.z);
+
831 
+
832  return;
+
833 }
+
834 
+
835 // Slow, lame version for intcels
+ +
837 {
+
838  Vector3<double> buffer(x, y, z);
+
839 
+
840  x = (int)((mat[0][0] * buffer.x) + (mat[0][1] * buffer.y) + (mat[0][2] * buffer.z));
+
841  y = (int)((mat[1][0] * buffer.x) + (mat[1][1] * buffer.y) + (mat[1][2] * buffer.z));
+
842  z = (int)((mat[2][0] * buffer.x) + (mat[2][1] * buffer.y) + (mat[2][2] * buffer.z));
+
843 
+
844  // Translation
+
845  x += (int)mat[0][3];
+
846  y += (int)mat[1][3];
+
847  z += (int)mat[2][3];
+
848 
+
849  return;
+
850 }
+
851 
+
852 
+
853 
+
854 template<typename T>
+
855 bool Vector3<T>::operator==(const Vector3<T>& other) const
+
856 {
+
857  return
+
858  (x == other.x) &&
+
859  (y == other.y) &&
+
860  (z == other.z);
+
861 }
+
862 
+
863 template<typename T>
+
864 bool Vector3<T>::operator!=(const Vector3<T>& other) const
+
865 {
+
866  return !operator==(other);
+
867 }
+
868 
+
869 
+
870 #include "Vector2.h"
+
871 #include "Vector4.h"
+
872 template<typename T>
+ +
874 {
+
875  return Vector2<T>(x, y);
+
876 }
+
877 
+
878 template<typename T>
+ +
880 {
+
881  return Vector4<T>(x, y, z, 0);
+
882 }
+
883 
+
884 template class Vector3<int>;
+
885 template class Vector3<double>;
+
886 
+
887 // Some handy predefines
+
888 template <typename T>
+
889 const Vector3<double> Vector3<T>::up(0, 1, 0);
+
890 template <typename T>
+
891 const Vector3<double> Vector3<T>::down(0, -1, 0);
+
892 template <typename T>
+
893 const Vector3<double> Vector3<T>::right(1, 0, 0);
+
894 template <typename T>
+
895 const Vector3<double> Vector3<T>::left(-1, 0, 0);
+
896 template <typename T>
+
897 const Vector3<double> Vector3<T>::forward(0, 0, 1);
+
898 template <typename T>
+
899 const Vector3<double> Vector3<T>::backward(0, 0, -1);
+
900 template <typename T>
+
901 const Vector3<double> Vector3<T>::one(1, 1, 1);
+
902 template <typename T>
+
903 const Vector3<double> Vector3<T>::zero(0, 0, 0);
+
+
void LerpSelf(const Vector3< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector3.cpp:311
+ +
Vector3< double > ToDouble() const
Will convert this vector to a Vector3d.
Definition: Vector3.cpp:229
+ + + +
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+ + +
Representation of a 2d vector.
Definition: Vector2.h:14
+
double DotProduct(const Vector3< T > &other) const
Will compute the dot product to another Vector3.
Definition: Vector3.cpp:48
+ +
void NormalizeSelf()
Will normalize this vector.
Definition: Vector3.cpp:200
+
Definition: Collider.h:4
+ +
Representation of a 4d vector.
Definition: Vector2.h:8
+ + + + diff --git a/Doxygen/build/Vector3_8h.html b/Doxygen/build/Vector3_8h.html new file mode 100644 index 0000000..d45786d --- /dev/null +++ b/Doxygen/build/Vector3_8h.html @@ -0,0 +1,155 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector3.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Vector3.h File Reference
+
+
+
#include <cstdlib>
+#include <iomanip>
+#include <ostream>
+#include <sstream>
+#include "Matrix4x4.h"
+
+Include dependency graph for Vector3.h:
+
+
+ + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Classes

class  Eule::Vector2< T >
 Representation of a 2d vector. More...
 
class  Eule::Vector4< T >
 Representation of a 4d vector. More...
 
class  Eule::Vector3< T >
 Representation of a 3d vector. More...
 
+ + + +

+Namespaces

 Eule
 
+ + + +

+Typedefs

typedef Vector3< int > Eule::Vector3i
 
+
+ + + + diff --git a/Doxygen/build/Vector3_8h__dep__incl.map b/Doxygen/build/Vector3_8h__dep__incl.map new file mode 100644 index 0000000..0deaf45 --- /dev/null +++ b/Doxygen/build/Vector3_8h__dep__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Doxygen/build/Vector3_8h__dep__incl.md5 b/Doxygen/build/Vector3_8h__dep__incl.md5 new file mode 100644 index 0000000..627c4d5 --- /dev/null +++ b/Doxygen/build/Vector3_8h__dep__incl.md5 @@ -0,0 +1 @@ +5923ea443852492219c66436d4bffb10 \ No newline at end of file diff --git a/Doxygen/build/Vector3_8h__dep__incl.png b/Doxygen/build/Vector3_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..4424eecc123a52d41a7e6b110c285b4197f230af GIT binary patch literal 24078 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 STD?jB%9Cok$MaRs1^pktg_ZjN literal 0 HcmV?d00001 diff --git a/Doxygen/build/Vector3_8h__incl.map b/Doxygen/build/Vector3_8h__incl.map new file mode 100644 index 0000000..f44a900 --- /dev/null +++ b/Doxygen/build/Vector3_8h__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Doxygen/build/Vector3_8h__incl.md5 b/Doxygen/build/Vector3_8h__incl.md5 new file mode 100644 index 0000000..26828a1 --- /dev/null +++ b/Doxygen/build/Vector3_8h__incl.md5 @@ -0,0 +1 @@ +f06a179ddc8c6cbfb08342b459b2b95e \ No newline at end of file diff --git a/Doxygen/build/Vector3_8h__incl.png b/Doxygen/build/Vector3_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d5466ecf8f1ef7a739bbbf5ade33b58261c441 GIT binary patch literal 17450 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 + + + + + + +Leonetienne/Eule: Eule/Vector3.h Source File + + + + + + + + + + + + +
+
+
Vector3.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include <cstdlib>
+
3 #include <iomanip>
+
4 #include <ostream>
+
5 #include <sstream>
+
6 #include "Matrix4x4.h"
+
7 
+
8 namespace Eule
+
9 {
+
10  template <typename T> class Vector2;
+
11  template <typename T> class Vector4;
+
12 
+
16  template <typename T>
+
17  class Vector3
+
18  {
+
19  public:
+
20  Vector3() : x{ 0 }, y{ 0 }, z{ 0 } {}
+
21  Vector3(T _x, T _y, T _z) : x{ _x }, y{ _y }, z{ _z } {}
+
22  Vector3(const Vector3<T>& other) = default;
+
23  Vector3(Vector3<T>&& other) noexcept = default;
+
24 
+
26  double DotProduct(const Vector3<T>& other) const;
+
27 
+
29  Vector3<double> CrossProduct(const Vector3<T>& other) const;
+
30 
+
32  double SqrMagnitude() const;
+
33 
+
35  double Magnitude() const;
+
36 
+
38  [[nodiscard]] Vector3<double> Normalize() const;
+
39 
+
41  void NormalizeSelf();
+
42 
+
44  [[nodiscard]] Vector3<T> VectorScale(const Vector3<T>& scalar) const;
+
45 
+
47  void LerpSelf(const Vector3<T>& other, double t);
+
48 
+
50  [[nodiscard]] Vector3<double> Lerp(const Vector3<T>& other, double t) const;
+
51 
+
53  [[nodiscard]] bool Similar(const Vector3<T>& other, double epsilon = 0.00001) const;
+
54 
+
56  [[nodiscard]] Vector3<int> ToInt() const;
+
57 
+
59  [[nodiscard]] Vector3<double> ToDouble() const;
+
60 
+
61  T& operator[](std::size_t idx);
+
62  const T& operator[](std::size_t idx) const;
+
63 
+
64  Vector3<T> operator+(const Vector3<T>& other) const;
+
65  void operator+=(const Vector3<T>& other);
+
66  Vector3<T> operator-(const Vector3<T>& other) const;
+
67  void operator-=(const Vector3<T>& other);
+
68  Vector3<T> operator*(const T scale) const;
+
69  void operator*=(const T scale);
+
70  Vector3<T> operator/(const T scale) const;
+
71  void operator/=(const T scale);
+
72  Vector3<T> operator*(const Matrix4x4& mat) const;
+
73  void operator*=(const Matrix4x4& mat);
+
74  Vector3<T> operator-() const;
+
75 
+
76  operator Vector2<T>() const;
+
77  operator Vector4<T>() const;
+
78 
+
79  void operator=(const Vector3<T>& other);
+
80  void operator=(Vector3<T>&& other) noexcept;
+
81 
+
82  bool operator==(const Vector3<T>& other) const;
+
83  bool operator!=(const Vector3<T>& other) const;
+
84 
+
85  friend std::ostream& operator << (std::ostream& os, const Vector3<T>& v)
+
86  {
+
87  return os << "[x: " << v.x << " y: " << v.y << " z: " << v.z << "]";
+
88  }
+
89  friend std::wostream& operator << (std::wostream& os, const Vector3<T>& v)
+
90  {
+
91  return os << L"[x: " << v.x << L" y: " << v.y << L" z: " << v.z << L"]";
+
92  }
+
93 
+
94  T x;
+
95  T y;
+
96  T z;
+
97 
+
98  // Some handy predefines
+
99  static const Vector3<double> up;
+
100  static const Vector3<double> down;
+
101  static const Vector3<double> right;
+
102  static const Vector3<double> left;
+
103  static const Vector3<double> forward;
+
104  static const Vector3<double> backward;
+
105  static const Vector3<double> one;
+
106  static const Vector3<double> zero;
+
107  };
+
108 
+ +
110  typedef Vector3<double> Vector3d;
+
111 }
+
+
Vector3< T > operator+(const Vector3< T > &other) const
Definition: Vector3.cpp:372
+
static const Vector3< double > right
Definition: Vector3.h:101
+
friend std::ostream & operator<<(std::ostream &os, const Vector3< T > &v)
Definition: Vector3.h:85
+
void LerpSelf(const Vector3< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector3.cpp:311
+
Vector3< double > CrossProduct(const Vector3< T > &other) const
Will compute the cross product to another Vector3.
Definition: Vector3.cpp:68
+
static const Vector3< double > left
Definition: Vector3.h:102
+
bool Similar(const Vector3< T > &other, double epsilon=0.00001) const
Will compare if two vectors are similar to a certain epsilon value.
Definition: Vector3.cpp:213
+
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
Vector3(T _x, T _y, T _z)
Definition: Vector3.h:21
+
Vector3< T > operator-() const
Definition: Vector3.cpp:806
+
static const Vector3< double > down
Definition: Vector3.h:100
+
Vector3< double > Lerp(const Vector3< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector3.cpp:330
+
static const Vector3< double > forward
Definition: Vector3.h:103
+
static const Vector3< double > one
Definition: Vector3.h:105
+
void operator=(const Vector3< T > &other)
Conversion method.
Definition: Vector3.cpp:816
+
Vector3< double > ToDouble() const
Will convert this vector to a Vector3d.
Definition: Vector3.cpp:229
+
Vector3< int > ToInt() const
Will convert this vector to a Vector3i.
Definition: Vector3.cpp:223
+
bool operator==(const Vector3< T > &other) const
Definition: Vector3.cpp:855
+
void operator*=(const T scale)
Definition: Vector3.cpp:583
+ +
Vector3< double > Vector3d
Definition: Matrix4x4.h:9
+ +
Vector3< int > Vector3i
Definition: Vector3.h:109
+
static const Vector3< double > backward
Definition: Vector3.h:104
+
Vector3< double > Normalize() const
Will return the normalization of this vector.
Definition: Vector3.cpp:147
+ +
static const Vector3< double > up
Definition: Vector3.h:99
+
T & operator[](std::size_t idx)
Definition: Vector3.cpp:235
+ +
double DotProduct(const Vector3< T > &other) const
Will compute the dot product to another Vector3.
Definition: Vector3.cpp:48
+
Vector3< T > operator/(const T scale) const
Definition: Vector3.cpp:626
+
void operator-=(const Vector3< T > &other)
Definition: Vector3.cpp:498
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector3.cpp:88
+
void operator/=(const T scale)
Definition: Vector3.cpp:667
+
bool operator!=(const Vector3< T > &other) const
Definition: Vector3.cpp:864
+
void operator+=(const Vector3< T > &other)
Definition: Vector3.cpp:414
+
double Magnitude() const
Will compute the magnitude.
Definition: Vector3.cpp:95
+
void NormalizeSelf()
Will normalize this vector.
Definition: Vector3.cpp:200
+
Vector3< T > operator*(const T scale) const
Definition: Vector3.cpp:541
+
static const Vector3< double > zero
Definition: Vector3.h:106
+
Definition: Collider.h:4
+ +
Vector3< T > VectorScale(const Vector3< T > &scalar) const
Will scale self.n by scalar.n.
Definition: Vector3.cpp:135
+ + + + diff --git a/Doxygen/build/Vector4_8cpp.html b/Doxygen/build/Vector4_8cpp.html new file mode 100644 index 0000000..f1abcfc --- /dev/null +++ b/Doxygen/build/Vector4_8cpp.html @@ -0,0 +1,118 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector4.cpp File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector4.cpp File Reference
+
+
+
#include "Vector4.h"
+#include "Math.h"
+#include <iostream>
+#include <immintrin.h>
+#include "Vector2.h"
+#include "Vector3.h"
+
+Include dependency graph for Vector4.cpp:
+
+
+ + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+
+ + + + diff --git a/Doxygen/build/Vector4_8cpp__incl.map b/Doxygen/build/Vector4_8cpp__incl.map new file mode 100644 index 0000000..faa7a6d --- /dev/null +++ b/Doxygen/build/Vector4_8cpp__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Doxygen/build/Vector4_8cpp__incl.md5 b/Doxygen/build/Vector4_8cpp__incl.md5 new file mode 100644 index 0000000..59af498 --- /dev/null +++ b/Doxygen/build/Vector4_8cpp__incl.md5 @@ -0,0 +1 @@ +0823430d67194eb6b1547166859dfe71 \ No newline at end of file diff --git a/Doxygen/build/Vector4_8cpp__incl.png b/Doxygen/build/Vector4_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..25b7995c9de9d64ced6de6da3f7f342ad378110a GIT binary patch literal 36017 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
c#tHM#PesRr>(%PE5vR(jy`c{};zrBXQ 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̘o<}5ao6N^Gr66nDQg93V>9Zfq! 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 XR!P0wY5NKZ{*#whkt&xkdH??aac8<2 literal 0 HcmV?d00001 diff --git a/Doxygen/build/Vector4_8cpp_source.html b/Doxygen/build/Vector4_8cpp_source.html new file mode 100644 index 0000000..8f3d250 --- /dev/null +++ b/Doxygen/build/Vector4_8cpp_source.html @@ -0,0 +1,914 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector4.cpp Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector4.cpp
+
+
+Go to the documentation of this file.
1 #include "Vector4.h"
+
2 #include "Math.h"
+
3 #include <iostream>
+
4 
+
5 //#define _EULE_NO_INTRINSICS_
+
6 #ifndef _EULE_NO_INTRINSICS_
+
7 #include <immintrin.h>
+
8 #endif
+
9 
+
10 using namespace Eule;
+
11 
+
12 /*
+
13  NOTE:
+
14  Here you will find bad, unoptimized methods for T=int.
+
15  This is because the compiler needs a method for each type in each instantiation of the template!
+
16  I can't generalize the methods when heavily optimizing for doubles.
+
17  These functions will get called VERY rarely, if ever at all, for T=int, so it's ok.
+
18  The T=int instantiation only exists to store a value-pair of two ints. Not so-much as a vector in terms of vector calculus.
+
19 */
+
20 
+
21 // Good, optimized chad version for doubles
+
22 double Vector4<double>::SqrMagnitude() const
+
23 {
+
24  return (x * x) +
+
25  (y * y) +
+
26  (z * z) +
+
27  (w * w);
+
28 }
+
29 
+
30 // Slow, lame version for intcels
+ +
32 {
+
33  int iSqrMag = x*x + y*y + z*z + w*w;
+
34  return (double)iSqrMag;
+
35 }
+
36 
+
37 template<typename T>
+
38 double Vector4<T>::Magnitude() const
+
39 {
+
40  return sqrt(SqrMagnitude());
+
41 }
+
42 
+
43 
+ +
45 {
+
46  #ifndef _EULE_NO_INTRINSICS_
+
47 
+
48  // Load vectors into registers
+
49  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
50  __m256d __vector_scalar = _mm256_set_pd(scalar.w, scalar.z, scalar.y, scalar.x);
+
51 
+
52  // Multiply them
+
53  __m256d __product = _mm256_mul_pd(__vector_self, __vector_scalar);
+
54 
+
55  // Retrieve result
+
56  double result[4];
+
57  _mm256_storeu_pd(result, __product);
+
58 
+
59  // Return value
+
60  return Vector4<double>(
+
61  result[0],
+
62  result[1],
+
63  result[2],
+
64  result[3]
+
65  );
+
66 
+
67  #else
+
68 
+
69  return Vector4<double>(
+
70  x * scalar.x,
+
71  y * scalar.y,
+
72  z * scalar.z,
+
73  w * scalar.w
+
74  );
+
75  #endif
+
76 }
+
77 
+
78 
+ +
80 {
+
81  return Vector4<int>(
+
82  x * scalar.x,
+
83  y * scalar.y,
+
84  z * scalar.z,
+
85  w * scalar.w
+
86  );
+
87 }
+
88 
+
89 
+
90 
+
91 template<typename T>
+ +
93 {
+
94  Vector4<double> norm(x, y, z, w);
+
95  norm.NormalizeSelf();
+
96 
+
97  return norm;
+
98 }
+
99 
+
100 // Method to normalize a Vector43d
+ +
102 {
+
103  double length = Magnitude();
+
104 
+
105  // Prevent division by 0
+
106  if (length == 0)
+
107  {
+
108  x = 0;
+
109  y = 0;
+
110  z = 0;
+
111  w = 0;
+
112  }
+
113  else
+
114  {
+
115  #ifndef _EULE_NO_INTRINSICS_
+
116 
+
117  // Load vector and length into registers
+
118  __m256d __vec = _mm256_set_pd(w, z, y, x);
+
119  __m256d __len = _mm256_set1_pd(length);
+
120 
+
121  // Divide
+
122  __m256d __prod = _mm256_div_pd(__vec, __len);
+
123 
+
124  // Extract and set values
+
125  double prod[4];
+
126  _mm256_storeu_pd(prod, __prod);
+
127 
+
128  x = prod[0];
+
129  y = prod[1];
+
130  z = prod[2];
+
131  w = prod[3];
+
132 
+
133  #else
+
134 
+
135  x /= length;
+
136  y /= length;
+
137  z /= length;
+
138  w /= length;
+
139 
+
140  #endif
+
141  }
+
142 
+
143  return;
+
144 }
+
145 
+
146 // You can't normalize an int vector, ffs!
+
147 // But we need an implementation for T=int
+ +
149 {
+
150  std::cerr << "Stop normalizing int-vectors!!" << std::endl;
+
151  x = 0;
+
152  y = 0;
+
153  z = 0;
+
154  w = 0;
+
155 
+
156  return;
+
157 }
+
158 
+
159 
+
160 
+
161 template<typename T>
+
162 bool Vector4<T>::Similar(const Vector4<T>& other, double epsilon) const
+
163 {
+
164  return
+
165  (::Math::Similar(x, other.x, epsilon)) &&
+
166  (::Math::Similar(y, other.y, epsilon)) &&
+
167  (::Math::Similar(z, other.z, epsilon)) &&
+
168  (::Math::Similar(w, other.w, epsilon))
+
169  ;
+
170 }
+
171 
+
172 template<typename T>
+ +
174 {
+
175  return Vector4<int>((int)x, (int)y, (int)z, (int)w);
+
176 }
+
177 
+
178 template<typename T>
+ +
180 {
+
181  return Vector4<double>((double)x, (double)y, (double)z, (double)w);
+
182 }
+
183 
+
184 template<typename T>
+
185 T& Vector4<T>::operator[](std::size_t idx)
+
186 {
+
187  switch (idx)
+
188  {
+
189  case 0:
+
190  return x;
+
191  case 1:
+
192  return y;
+
193  case 2:
+
194  return z;
+
195  case 3:
+
196  return w;
+
197  default:
+
198  throw std::out_of_range("Array descriptor on Vector4<T> out of range!");
+
199  }
+
200 }
+
201 
+
202 template<typename T>
+
203 const T& Vector4<T>::operator[](std::size_t idx) const
+
204 {
+
205  switch (idx)
+
206  {
+
207  case 0:
+
208  return x;
+
209  case 1:
+
210  return y;
+
211  case 2:
+
212  return z;
+
213  case 3:
+
214  return w;
+
215  default:
+
216  throw std::out_of_range("Array descriptor on Vector4<T> out of range!");
+
217  }
+
218 }
+
219 
+
220 
+
221 
+
222 // Good, optimized chad version for doubles
+
223 void Vector4<double>::LerpSelf(const Vector4<double>& other, double t)
+
224 {
+
225  const double it = 1.0 - t; // Inverse t
+
226 
+
227  #ifndef _EULE_NO_INTRINSICS_
+
228 
+
229  // Move vector components and factors into registers
+
230  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
231  __m256d __vector_other = _mm256_set_pd(other.w, other.z, other.y, other.x);
+
232  __m256d __t = _mm256_set1_pd(t);
+
233  __m256d __it = _mm256_set1_pd(it); // Inverse t
+
234 
+
235  // Procedure:
+
236  // (__vector_self * __it) + (__vector_other * __t)
+
237 
+
238  __m256d __sum = _mm256_set1_pd(0); // this will hold the sum of the two multiplications
+
239 
+
240  __sum = _mm256_fmadd_pd(__vector_self, __it, __sum);
+
241  __sum = _mm256_fmadd_pd(__vector_other, __t, __sum);
+
242 
+
243  // Retrieve result, and apply it
+
244  double sum[4];
+
245  _mm256_storeu_pd(sum, __sum);
+
246 
+
247  x = sum[0];
+
248  y = sum[1];
+
249  z = sum[2];
+
250  w = sum[3];
+
251 
+
252  #else
+
253 
+
254  x = it * x + t * other.x;
+
255  y = it * y + t * other.y;
+
256  z = it * z + t * other.z;
+
257  w = it * w + t * other.w;
+
258 
+
259  #endif
+
260 
+
261  return;
+
262 }
+
263 
+
264 
+
265 
+
266 // Slow, lame version for intcels
+
267 void Vector4<int>::LerpSelf(const Vector4<int>& other, double t)
+
268 {
+
269  const double it = 1.0 - t;
+
270 
+
271  x = (int)(it * (double)x + t * (double)other.x);
+
272  y = (int)(it * (double)y + t * (double)other.y);
+
273  z = (int)(it * (double)z + t * (double)other.z);
+
274  w = (int)(it * (double)w + t * (double)other.w);
+
275 
+
276  return;
+
277 }
+
278 
+
279 Vector4<double> Vector4<double>::Lerp(const Vector4<double>& other, double t) const
+
280 {
+
281  Vector4d copy(*this);
+
282  copy.LerpSelf(other, t);
+
283 
+
284  return copy;
+
285 }
+
286 
+
287 Vector4<double> Vector4<int>::Lerp(const Vector4<int>& other, double t) const
+
288 {
+
289  Vector4d copy(this->ToDouble());
+
290  copy.LerpSelf(other.ToDouble(), t);
+
291 
+
292  return copy;
+
293 }
+
294 
+
295 
+
296 
+ +
298 {
+
299  #ifndef _EULE_NO_INTRINSICS_
+
300 
+
301  // Move vector components and factors into registers
+
302  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
303  __m256d __vector_other = _mm256_set_pd(other.w, other.z, other.y, other.x);
+
304 
+
305  // Add the components
+
306  __m256d __sum = _mm256_add_pd(__vector_self, __vector_other);
+
307 
+
308  // Retrieve and return these values
+
309  double sum[4];
+
310  _mm256_storeu_pd(sum, __sum);
+
311 
+
312  return Vector4<double>(
+
313  sum[0],
+
314  sum[1],
+
315  sum[2],
+
316  sum[3]
+
317  );
+
318 
+
319  #else
+
320 
+
321  return Vector4<double>(
+
322  x + other.x,
+
323  y + other.y,
+
324  z + other.z,
+
325  w + other.w
+
326  );
+
327  #endif
+
328 }
+
329 
+
330 template<typename T>
+ +
332 {
+
333  return Vector4<T>(
+
334  x + other.x,
+
335  y + other.y,
+
336  z + other.z,
+
337  w + other.w
+
338  );
+
339 }
+
340 
+
341 
+
342 
+ +
344 {
+
345  #ifndef _EULE_NO_INTRINSICS_
+
346 
+
347  // Move vector components and factors into registers
+
348  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
349  __m256d __vector_other = _mm256_set_pd(other.w, other.z, other.y, other.x);
+
350 
+
351  // Add the components
+
352  __m256d __sum = _mm256_add_pd(__vector_self, __vector_other);
+
353 
+
354  // Retrieve and apply these values
+
355  double sum[4];
+
356  _mm256_storeu_pd(sum, __sum);
+
357 
+
358  x = sum[0];
+
359  y = sum[1];
+
360  z = sum[2];
+
361  w = sum[3];
+
362 
+
363  #else
+
364 
+
365  x += other.x;
+
366  y += other.y;
+
367  z += other.z;
+
368  w += other.w;
+
369 
+
370  #endif
+
371 
+
372  return;
+
373 }
+
374 
+
375 template<typename T>
+ +
377 {
+
378  x += other.x;
+
379  y += other.y;
+
380  z += other.z;
+
381  w += other.w;
+
382  return;
+
383 }
+
384 
+
385 
+
386 
+ +
388 {
+
389  #ifndef _EULE_NO_INTRINSICS_
+
390 
+
391  // Move vector components and factors into registers
+
392  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
393  __m256d __vector_other = _mm256_set_pd(other.w, other.z, other.y, other.x);
+
394 
+
395  // Subtract the components
+
396  __m256d __diff = _mm256_sub_pd(__vector_self, __vector_other);
+
397 
+
398  // Retrieve and return these values
+
399  double diff[4];
+
400  _mm256_storeu_pd(diff, __diff);
+
401 
+
402  return Vector4<double>(
+
403  diff[0],
+
404  diff[1],
+
405  diff[2],
+
406  diff[3]
+
407  );
+
408 
+
409  #else
+
410 
+
411  return Vector4<double>(
+
412  x - other.x,
+
413  y - other.y,
+
414  z - other.z,
+
415  w - other.w
+
416  );
+
417  #endif
+
418 }
+
419 
+
420 template<typename T>
+ +
422 {
+
423  return Vector4<T>(
+
424  x - other.x,
+
425  y - other.y,
+
426  z - other.z,
+
427  w - other.w
+
428  );
+
429 }
+
430 
+
431 
+
432 
+ +
434 {
+
435  #ifndef _EULE_NO_INTRINSICS_
+
436 
+
437  // Move vector components and factors into registers
+
438  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
439  __m256d __vector_other = _mm256_set_pd(other.w, other.z, other.y, other.x);
+
440 
+
441  // Subtract the components
+
442  __m256d __diff = _mm256_sub_pd(__vector_self, __vector_other);
+
443 
+
444  // Retrieve and apply these values
+
445  double diff[4];
+
446  _mm256_storeu_pd(diff, __diff);
+
447 
+
448  x = diff[0];
+
449  y = diff[1];
+
450  z = diff[2];
+
451  w = diff[3];
+
452 
+
453  #else
+
454 
+
455  x -= other.x;
+
456  y -= other.y;
+
457  z -= other.z;
+
458  w -= other.w;
+
459 
+
460  #endif
+
461 
+
462  return;
+
463 }
+
464 
+
465 template<typename T>
+ +
467 {
+
468  x -= other.x;
+
469  y -= other.y;
+
470  z -= other.z;
+
471  w -= other.w;
+
472  return;
+
473 }
+
474 
+
475 
+
476 
+
477 Vector4<double> Vector4<double>::operator*(const double scale) const
+
478 {
+
479  #ifndef _EULE_NO_INTRINSICS_
+
480 
+
481  // Move vector components and factors into registers
+
482  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
483  __m256d __scalar = _mm256_set1_pd(scale);
+
484 
+
485  // Multiply the components
+
486  __m256d __prod = _mm256_mul_pd(__vector_self, __scalar);
+
487 
+
488  // Retrieve and return these values
+
489  double prod[4];
+
490  _mm256_storeu_pd(prod, __prod);
+
491 
+
492  return Vector4<double>(
+
493  prod[0],
+
494  prod[1],
+
495  prod[2],
+
496  prod[3]
+
497  );
+
498 
+
499  #else
+
500 
+
501  return Vector4<double>(
+
502  x * scale,
+
503  y * scale,
+
504  z * scale,
+
505  w * scale
+
506  );
+
507 
+
508  #endif
+
509 }
+
510 
+
511 template<typename T>
+
512 Vector4<T> Vector4<T>::operator*(const T scale) const
+
513 {
+
514  return Vector4<T>(
+
515  x * scale,
+
516  y * scale,
+
517  z * scale,
+
518  w * scale
+
519  );
+
520 }
+
521 
+
522 
+
523 
+
524 void Vector4<double>::operator*=(const double scale)
+
525 {
+
526  #ifndef _EULE_NO_INTRINSICS_
+
527 
+
528  // Move vector components and factors into registers
+
529  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
530  __m256d __scalar = _mm256_set1_pd(scale);
+
531 
+
532  // Multiply the components
+
533  __m256d __prod = _mm256_mul_pd(__vector_self, __scalar);
+
534 
+
535  // Retrieve and apply these values
+
536  double prod[4];
+
537  _mm256_storeu_pd(prod, __prod);
+
538 
+
539  x = prod[0];
+
540  y = prod[1];
+
541  z = prod[2];
+
542  w = prod[3];
+
543 
+
544  #else
+
545 
+
546  x *= scale;
+
547  y *= scale;
+
548  z *= scale;
+
549  w *= scale;
+
550 
+
551  #endif
+
552 
+
553  return;
+
554 }
+
555 
+
556 template<typename T>
+
557 void Vector4<T>::operator*=(const T scale)
+
558 {
+
559  x *= scale;
+
560  y *= scale;
+
561  z *= scale;
+
562  w *= scale;
+
563  return;
+
564 }
+
565 
+
566 
+
567 
+
568 Vector4<double> Vector4<double>::operator/(const double scale) const
+
569 {
+
570  #ifndef _EULE_NO_INTRINSICS_
+
571 
+
572  // Move vector components and factors into registers
+
573  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
574  __m256d __scalar = _mm256_set1_pd(scale);
+
575 
+
576  // Divide the components
+
577  __m256d __prod = _mm256_div_pd(__vector_self, __scalar);
+
578 
+
579  // Retrieve and return these values
+
580  double prod[4];
+
581  _mm256_storeu_pd(prod, __prod);
+
582 
+
583  return Vector4<double>(
+
584  prod[0],
+
585  prod[1],
+
586  prod[2],
+
587  prod[3]
+
588  );
+
589 
+
590  #else
+
591 
+
592  return Vector4<double>(
+
593  x / scale,
+
594  y / scale,
+
595  z / scale,
+
596  w / scale
+
597  );
+
598 
+
599  #endif
+
600 }
+
601 
+
602 template<typename T>
+
603 Vector4<T> Vector4<T>::operator/(const T scale) const
+
604 {
+
605  return Vector4<T>(
+
606  x / scale,
+
607  y / scale,
+
608  z / scale,
+
609  w / scale
+
610  );
+
611 }
+
612 
+
613 
+
614 
+
615 void Vector4<double>::operator/=(const double scale)
+
616 {
+
617  #ifndef _EULE_NO_INTRINSICS_
+
618 
+
619  // Move vector components and factors into registers
+
620  __m256d __vector_self = _mm256_set_pd(w, z, y, x);
+
621  __m256d __scalar = _mm256_set1_pd(scale);
+
622 
+
623  // Divide the components
+
624  __m256d __prod = _mm256_div_pd(__vector_self, __scalar);
+
625 
+
626  // Retrieve and apply these values
+
627  double prod[4];
+
628  _mm256_storeu_pd(prod, __prod);
+
629 
+
630  x = prod[0];
+
631  y = prod[1];
+
632  z = prod[2];
+
633  w = prod[3];
+
634 
+
635  #else
+
636 
+
637  x /= scale;
+
638  y /= scale;
+
639  z /= scale;
+
640  w /= scale;
+
641 
+
642  #endif
+
643  return;
+
644 }
+
645 
+
646 template<typename T>
+
647 void Vector4<T>::operator/=(const T scale)
+
648 {
+
649  x /= scale;
+
650  y /= scale;
+
651  z /= scale;
+
652  w /= scale;
+
653  return;
+
654 }
+
655 
+
656 
+
657 
+
658 template<typename T>
+
659 bool Vector4<T>::operator==(const Vector4<T>& other) const
+
660 {
+
661  return
+
662  (x == other.x) &&
+
663  (y == other.y) &&
+
664  (z == other.z) &&
+
665  (w == other.w);
+
666 }
+
667 
+
668 
+
669 
+
670 // Good, optimized chad version for doubles
+ +
672 {
+
673  Vector4<double> newVec;
+
674 
+
675  newVec.x = (mat[0][0] * x) + (mat[0][1] * y) + (mat[0][2] * z) + (mat[0][3] * w);
+
676  newVec.y = (mat[1][0] * x) + (mat[1][1] * y) + (mat[1][2] * z) + (mat[1][3] * w);
+
677  newVec.z = (mat[2][0] * x) + (mat[2][1] * y) + (mat[2][2] * z) + (mat[2][3] * w);
+
678  newVec.w = (mat[3][0] * x) + (mat[3][1] * y) + (mat[3][2] * z) + (mat[3][3] * w);
+
679 
+
680  return newVec;
+
681 }
+
682 
+
683 // Slow, lame version for intcels
+ +
685 {
+
686  Vector4<double> newVec;
+
687 
+
688  newVec.x = (mat[0][0] * x) + (mat[0][1] * y) + (mat[0][2] * z) + (mat[0][3] * w);
+
689  newVec.y = (mat[1][0] * x) + (mat[1][1] * y) + (mat[1][2] * z) + (mat[1][3] * w);
+
690  newVec.z = (mat[2][0] * x) + (mat[2][1] * y) + (mat[2][2] * z) + (mat[2][3] * w);
+
691  newVec.w = (mat[3][0] * x) + (mat[3][1] * y) + (mat[3][2] * z) + (mat[3][3] * w);
+
692 
+
693  return Vector4<int>(
+
694  (int)newVec.x,
+
695  (int)newVec.y,
+
696  (int)newVec.z,
+
697  (int)newVec.w
+
698  );
+
699 }
+
700 
+
701 
+
702 
+
703 // Good, optimized chad version for doubles
+
704 void Vector4<double>::operator*=(const Matrix4x4& mat)
+
705 {
+
706  Vector4<double> buffer = *this;
+
707 
+
708  // Should this still be reversed...? like, instead of mat[x][y], use mat[y][m]
+
709  // idk right now. check that if something doesn't work
+
710  x = (mat[0][0] * buffer.x) + (mat[0][1] * buffer.y) + (mat[0][2] * buffer.z) + (mat[0][3] * buffer.w);
+
711  y = (mat[1][0] * buffer.x) + (mat[1][1] * buffer.y) + (mat[1][2] * buffer.z) + (mat[1][3] * buffer.w);
+
712  z = (mat[2][0] * buffer.x) + (mat[2][1] * buffer.y) + (mat[2][2] * buffer.z) + (mat[2][3] * buffer.w);
+
713  w = (mat[3][0] * buffer.x) + (mat[3][1] * buffer.y) + (mat[3][2] * buffer.z) + (mat[3][3] * buffer.w);
+
714 
+
715  return;
+
716 }
+
717 
+
718 template<typename T>
+ +
720 {
+
721  return Vector4<T>(
+
722  -x,
+
723  -y,
+
724  -z,
+
725  -w
+
726  );
+
727 }
+
728 
+
729 template<typename T>
+ +
731 {
+
732  x = other.x;
+
733  y = other.y;
+
734  z = other.z;
+
735  w = other.w;
+
736 
+
737  return;
+
738 }
+
739 
+
740 template<typename T>
+
741 void Vector4<T>::operator=(Vector4<T>&& other) noexcept
+
742 {
+
743  x = std::move(other.x);
+
744  y = std::move(other.y);
+
745  z = std::move(other.z);
+
746  w = std::move(other.w);
+
747 
+
748  return;
+
749 }
+
750 
+
751 // Slow, lame version for intcels
+ +
753 {
+
754  Vector4<double> buffer(x, y, z, w);
+
755 
+
756  // Should this still be reversed...? like, instead of mat[x][y], use mat[y][m]
+
757  // idk right now. check that if something doesn't work
+
758  x = (int)((mat[0][0] * buffer.x) + (mat[0][1] * buffer.y) + (mat[0][2] * buffer.z) + (mat[0][3] * buffer.w));
+
759  y = (int)((mat[1][0] * buffer.x) + (mat[1][1] * buffer.y) + (mat[1][2] * buffer.z) + (mat[1][3] * buffer.w));
+
760  z = (int)((mat[2][0] * buffer.x) + (mat[2][1] * buffer.y) + (mat[2][2] * buffer.z) + (mat[2][3] * buffer.w));
+
761  w = (int)((mat[3][0] * buffer.x) + (mat[3][1] * buffer.y) + (mat[3][2] * buffer.z) + (mat[3][3] * buffer.w));
+
762 
+
763  return;
+
764 }
+
765 
+
766 template<typename T>
+
767 bool Vector4<T>::operator!=(const Vector4<T>& other) const
+
768 {
+
769  return !operator==(other);
+
770 }
+
771 
+
772 #include "Vector2.h"
+
773 #include "Vector3.h"
+
774 template<typename T>
+ +
776 {
+
777  return Vector2<T>(x, y);
+
778 }
+
779 
+
780 template<typename T>
+ +
782 {
+
783  return Vector3<T>(x, y, z);
+
784 }
+
785 
+
786 template class Vector4<int>;
+
787 template class Vector4<double>;
+
788 
+
789 // Some handy predefines
+
790 template <typename T>
+
791 const Vector4<double> Vector4<T>::up(0, 1, 0, 0);
+
792 template <typename T>
+
793 const Vector4<double> Vector4<T>::down(0, -1, 0, 0);
+
794 template <typename T>
+
795 const Vector4<double> Vector4<T>::right(1, 0, 0, 0);
+
796 template <typename T>
+
797 const Vector4<double> Vector4<T>::left(-1, 0, 0, 0);
+
798 template <typename T>
+
799 const Vector4<double> Vector4<T>::forward(1, 0, 0, 0);
+
800 template <typename T>
+
801 const Vector4<double> Vector4<T>::backward(-1, 0, 0, 0);
+
802 template <typename T>
+
803 const Vector4<double> Vector4<T>::future(0, 0, 0, 1);
+
804 template <typename T>
+
805 const Vector4<double> Vector4<T>::past(0, 0, 0, -1);
+
806 template <typename T>
+
807 const Vector4<double> Vector4<T>::one(1, 1, 1, 1);
+
808 template <typename T>
+
809 const Vector4<double> Vector4<T>::zero(0, 0, 0, 0);
+
+
void NormalizeSelf()
Will normalize this vector.
Definition: Vector4.cpp:148
+
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+ + + +
void LerpSelf(const Vector4< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector4.cpp:267
+ + +
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Vector4< double > ToDouble() const
Will convert this vector to a Vector4d.
Definition: Vector4.cpp:179
+ +
Representation of a 2d vector.
Definition: Vector2.h:14
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+ + +
Definition: Collider.h:4
+
Representation of a 4d vector.
Definition: Vector2.h:8
+ + + + diff --git a/Doxygen/build/Vector4_8h.html b/Doxygen/build/Vector4_8h.html new file mode 100644 index 0000000..e15a87a --- /dev/null +++ b/Doxygen/build/Vector4_8h.html @@ -0,0 +1,152 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector4.h File Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Vector4.h File Reference
+
+
+
#include <cstdlib>
+#include <iomanip>
+#include <ostream>
+#include <sstream>
+#include "Matrix4x4.h"
+
+Include dependency graph for Vector4.h:
+
+
+ + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Classes

class  Eule::Vector2< T >
 Representation of a 2d vector. More...
 
class  Eule::Vector3< T >
 Representation of a 3d vector. More...
 
class  Eule::Vector4< T >
 Representation of a 4d vector. More...
 
+ + + +

+Namespaces

 Eule
 
+ + + + + +

+Typedefs

typedef Vector4< int > Eule::Vector4i
 
typedef Vector4< double > Eule::Vector4d
 
+
+ + + + diff --git a/Doxygen/build/Vector4_8h__dep__incl.map b/Doxygen/build/Vector4_8h__dep__incl.map new file mode 100644 index 0000000..2095a62 --- /dev/null +++ b/Doxygen/build/Vector4_8h__dep__incl.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Doxygen/build/Vector4_8h__dep__incl.md5 b/Doxygen/build/Vector4_8h__dep__incl.md5 new file mode 100644 index 0000000..6c0771d --- /dev/null +++ b/Doxygen/build/Vector4_8h__dep__incl.md5 @@ -0,0 +1 @@ +519ab42af69ca3826341022de9cbd030 \ No newline at end of file diff --git a/Doxygen/build/Vector4_8h__dep__incl.png b/Doxygen/build/Vector4_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..a5df998b175cf2be509888d8704dceb6e0fa9958 GIT binary patch literal 11897 zcmdUVbyU>vx9)%_2uO#Nz<_|1goGfCbhjuCB7=0tfYKcz(juYKA>9ZPih!g@BOnMO zpmd%+-+R`%zkBXEYu$VQyW?8I8fM`Pb&4+qN%P`nDtgF5g)>yq3s>haCa0-h{4*T?Q;t zcnQTQ)4`8KQuAR2d3kwjoYZQ}+ca2$Xk2OeFsnaHACHKhR&%hiDa27$7B&&1WXYbZm)F;OfdXlSckkXcdS`u^ zjEqc6PcOgLgg0gJkEiQNpFVvGk3veGY{^Zx1u~wWZU!c1X2$H#1u~kNnx=|4T|+QQ zNih~1lm@l6wXLblwfODpZCu2~wd#ApV^r_V{L<$K&B>p>n+Q(wey6rms=q6PUsvlt zS_^O+SK|c)1mNN0cccm0-a4WuO%nzaSo4jS+zZ~>arZyj?wM%u6UofXtnfc{t@(7u zu95lV?OS$vBY~?r2o}y^d1eueECx{2PbF83!eKGb|Y*{OG`}L+-e)PqR#UOQ=etZ z4`7DrdKWFuWTUEwSAO(ognMpG+PTvcUAq(Ut;*JFbGBt`dt1iH=xVm3v^?haeOeEH zWYF$cQ&LdeYRt;aq^FngrEqFJWNY+T536;UvK+{~t)!``h(d89=4V^{>OD7T6=JSp zA-4Yhl`}S`Ei-MwM~M3Fz^*vwmzT%P{l0zsChGDX2ea>;U*E{b$H(E6TRS@?Lai|| zgqc!-*9fS2LrP0|er;@2n!m@+6!XCM+MLzjSlQf+mkGWk!(Dc=d$jx2EYJRH*;OIb z^X?wY;e6%Qxi%?o9-i%Kw?SqpDYH^yBr5CRDi;#c0|BCEHz-3@lKNIf%lc6JsK5$dzEGn7NipHEz=0yg+R2D0w2Y%?K?;zsi1^99jI zJMT56PD65Yk=8ag79(%eJ$~CeImNTT^u~tsg+Aa_ymyc0>|l|Y+pLv-d3jljgW_PL zZVshpCb>6Zg$XW$5~HV2FW}}HmYdSn*uri!H8o4_*Ady-*>UjlDm;G7t?}~CWyI=e zA-Ush^W{)kEX3+~DP0&5Llm6zD%|T`PfuZC$LR>jSw&^<^j9`EN^6VuGMrkm5Rj${ z$ZF4z+s-?`cSUD-y^1W*$0W^uohb@2)4SBqkaj-Q@9(cytY}zbgvG_hb+T@DE~})3C+77#1~Lw6 zS(J=aNS@VMnT+)GE-RTuR}|${anF)gxx$62LCN6I(2I~*cNwDIi@Pr2&7${B%0#aV z@bEXoITRL_J|=mT{bEI;uGEt}jfm+O$P(XWz$Q&J-B$UpYs9}KZ%hf9U(-hFxE=nn zso4}1pb+(~rm*BUx4WTp`t>tmf|7hi1&Iuj^!+qFpCGvm^1a!net?rBuWXa2rO~~} zwbe==e1hb9bQ66r?)|m=Q`MAD^Gnu5baWf%v0QlVGfnu#^Cp>`p9ohqyUmH*TDEC4pb$oA>-w}}^K{Y@B)2ht z7wAB0@$FqCNwkOHEFHU>(cA)p1nD#3!E%a_bL@@k zztABQmGZI`S+S?5ecK1hOsbCAk&Ep=wUMYVS>lJ@J45H=e!B|XR5Bz_?o}x)W_i5~ zZSdLsIojRix=e&*iDzc}QP=i+Tc@a2nbnf;>K6uFV%{PTW5X#nHKX{xlw}luYFZ>S z9_(6<&o+)ajCk|guYfoP)%Vj4Q`%b2jFgm7V*7%Era$nruPI1|qzkcUW#6EmHK@}2M_Nu%;lP{T zex8n#LvfcAZ~W(<8UycUq(x$GMlEyoQsF42NmH$pYqq@g7GSQSImhYV?)SkdB-CCs z%F1=-581lOHBT;RN=aOG^|>bOAQtn-br(m4o9caMo`~e}W3gWw8It;jdU|22tGal^ zQbFQgf7aE4xI>ziQt$5WxMrH|PQqlFnBrdUZzAGA1dL`B`(GjCgwlJJp@ zkE`Dw&aD&*Dz|HpvEOOm6z=hdj8^t)dU~=!2w}d{Gj>H z##D{+DOuus%VCAl^c%_8ye7|BB+mr)HpJtXmekx=zfk2V?sw^GUI{7RB&oJHY$)1} zmlEJ}oE96iEfS+&Wfs@fE7n?3VndOG)#Q!aI+{6t$I^YnCP`k1X% zmbe#PKmemXh1tr$_`yQB*3K`xsS-(Yawqe>UmF}895OyWHt!x;Fv}=KP`}{ay?}t+ zFkd(4h~)h(U}-hT%vDUHp;5cFcP->?_B9;MK}kNrMV`;{3USJG+V;A}N76zYG}K;~ zzkS>PQuUVSrEk$6oXv%yrh(%jg&1#Yuis0ZpVeY`O(p?br7WyX%Gp<%G`)zl%|2yR zQTg;rYZRUAaB_eZ5p$9CTj`Fve~ zJI2A&(?~#5l$Dh$i3!eEC@Jv?ul>Sv+I)&RS&p2LYO_Jf0TC(bW$)h&7DjcBQEQx; z!dVi2bV+RJpm*=0j5k-vqVFCor(E~VIBRlYp|k2K3zgOOd;IVr*@q9GJM-fAhEZ)n zOiXu9@C?f1?jG+sI4^W?#+Et0c|CKwuCjKU_4-UuXef)pK%)x&szDkuNx|v)d#VDDGpy1_` z({QWKFgvl0Hs+ihGr$=GMJ5i#oMYPy;aI5xcfER6etnw~^}R(?-m<5cC*`;ANE&ds zyt!nOqh)!p^%4+}%+@YL&}_?w2MIr^-Q^@13kLv#+kYyuqD8I;0id^ga4!kjs4gMQ&q?i!vk- z+%j5U7V!xDOy?}H5odq1TP7+OaX2|CNFwDAR`UuIR808o$Aur%GxZE)y}!yY+oYS{ zsB^yqKtFB_ouLooG^D2*9k2L^^iXBG#L5QraT%v}aU*{VD$2eiB*)pMa>Oe_-Szti zkI!&9*RHix`utU^wzDEaOf=ud;xY`tRaF%P#3_F1FV2(9Oh4~mmFKx7CD>esXXI73 z@mPpE-dax^+`O2W7ick+iQnqz=k4L{V#yju8=E-xmj}4{I);!Hp2o)RZQ8KrUV_>t`CuAvBsfl^6F4Hd$pF9DHm6=%jdu3a6xPpbMT(;h zVWZUV)j4dpvMvc<(J8cAD%BLWhFlYGwO&*k3;!Q|W%u*IE?hvOI;; z3mAW26r3<$i~cF+;*zFKl{J>Ub~og{)r=t3&UMr+0D|hfTWbxBfz3~1V*H`X=t&5p zKBop$RPdFMQ642^n+2tqP7*fUA#U>QfByt)W|!fajFR%lj?uz})#-1vW`PXY5V+{@ zd_y?PC=)CgyZujF+!D7ov{`SZ?1YXArCI zS{+J`kNpG5$a6zfUpHIotXJB6p3QxI{F+(7ZMrNmiQLTuLSqYy8>YTDubanPjexd_>JYK=ZbKFLl!b-0@`Ymz13p| z1fRyojrCtxog6%UG&L?eXF=P-Ag(dLQMYgYx1ImN^NpB!qDjGtX8>Ox0`841-vPBy}-mVgh|2z8pP%F(f?gW zQcLPOE;FXuq#l(3CuV8SkB#X$Jzf??i|v-vs;?v_>p!_BA!Y$yoH_YO=D|V%|Ev4T7NTIGw>fXYjzeO6!^CNRyGUU{9hBd<1u z!*_W@_n#eh_~?S7$-q-zs@5Y;oX)V@KgIJ6pkZ`Z%b+4s?9uR_lqY~M4-2w6ijA=9p_x-~>EC z!PR806<1y3?ORwB#6cfzrKIO5|4WFXDT4;GN_QE^Bv_@|aBj9#(*Q8_+(-|`y3n{T z&WcTN^lSjGai+)=w@{tVErxcN82X(cOab`ja@4MsC3Uki`lh4oT&u};7xnv+dp574 zqWk#%wa(?Hw94g%SG>AuM+%233pX@AJy^VGZN1d_J|}OjQroI~Cph$?D&^Hia`rN- zAD?+3WMca>Y;)mx=y3U6@2ywZZY#f~0l7Y&5hH+)k9aBR;Zp6qeh964|Nei0EWm^@vo|L3tB7?5Mxi3>BdS?7xny4Y(BtoJohAO z-qAzRzwPl5>HSPZLajsn0>RO+TxxY<<3Et{#H%zX3jZP_olS>m*278B83$jZFLnCB zYYG_(-ZMTsRc)X0BWZN69P*0DztHT`;xXSrHqsT;T1u2uJ6=%RC{tTIUi6M0fUEpe zE!7cGl6%B;q%rjiXMQyI>J%rRojngezRK2m`NyK;5qyGsFY;HbVjvb#MKCfO>dF51Ram@8B#%}m;2o>)G zJWb8PAByr~$ti|mdmB7ViPiqO=s!!!7=Bf3lU+>Acm|yshkS zKyO9O2gWEKp8y_S-f*KkWCjNQ)vuTfH&4Fh2i^ewD(m#M%$vOH&xGUThQ}yt!*7d; zxt3^0vpU>qBh%VHOuC*N2?SpZq;TNKk(exoA^7pG`VaqDSa`~FzjjqT#-Ovm|B6|_ z;p^5;J|+6-Q616og6qziG>pNTlS&Nd>_D%hvfN)*A08b60XXIjRH4$_Qy?Fy*)?C{ zAn2t604YdTR8~GsPNtlmnW+R!RJtc(`2o)#BH7rXN;ony5|4;z+(+t-QnuC5?CiCX zx0>Z1O(`kVrs&08&#M;ZS53Lp|{^X zKKVPy53GNFem>KU8<$~TkSgX;1b-Bxw@p7hSd6!@v3b48m#)4!k{1^jhYF9RAs9PT{4zVAq8-fsN-K#b;Ll;1L{we3X}wDuF`c`MfCRV_v7PK zV8I^tZ2usDP}7Ybs(GUMIyZok|6s}QySo;uUu;lVM5&o2Myafv^qvD7THt8ifrfPWRhX*)Um{`1Z|WWgrVRCE_$oNK8yj2q@_N z9^4=)Ep3!(i*JrqPaNLm%QCQX)}m%or8fGctEZ=PYKl%+SorF#MM;{9x?QaspP>3U0WlZvT zZzEWbvumu_&}Ds`2j}9&u}AEDd?aL%@{4`Fm6eqwI9Na>Pc(VmtaX};Gima~LgeP= z&j0=$*W0Uv7xd)A2l-g5nOX-rgL2c@lN0|jvovwfU+t4M_K9g}kv~V?vT$$|4D`sT zrwLqym#EiodYD06NK-RdTyaqIQ~%ahgZgYl5#0sh0h6x~)KoAoaRtQBm|6an8fprP zkh#EfhU5KB%*+Bp%jIBeL98d6%_^^Ud%q$i1gE~CVa$hcEvit(+go(jZ&Lz%3I_*g zKF#)}jD|*B_f+At!uT3s;pd}owzj(sN*J#2&l`xuKq07L9#aarZ@*Xxi#A9ZXE+Z`X#N5ckw{`?t~mX?-~ zn#zF}#3X$g@pud~0^^lU z8aW#KSc!9?7yMaf7vGC^e=E{2)>~PFNfB%ns)+INt>-QVgNF`vv%l@uAzkH7DXXhr zM2L!t7C6>FS7PPh=GIepyC&+4$Ww>~>U+c7))p60Gdo?R#gPCGcG+t%yXuZ8xKK3ek$3IM#$26At*D@1`#@5!>E8U67$)WA-(wM1YZ*T7tox%?= zyw%p$&Y4u?HjsLr{sA9>)E;5{F`K7Ij2TWssVdqpGixiGREW*%t2DaK%8D~IG$iV` z$BmisrYk%ukg&D2<)FZad1KzVcTv2QdXIv`qEmmm5CAG6_)v^RXBY$;ZPew1V|lG* zFq*Tw`>1zQ;di6p$zwoxol{P2u`p5_vt+$u$9o}L|V!n85GrKJUxiPa86nyqd+ zr_t4stKDg{Nx~u`BJv6fNEq5euJ>Lqty`P^`tjrCLCIt8hXa|BOH0fz#F!;<%}tpkm|K!H;Cg?!Yr{lH#e1(l-glXz4acKQJOcU zb8gOTapO%YS*3V!lIX*cG9*UcE6h9~f{ZW@HfH;^Hd3)&Va5?{004RS(h5 z<{TqAo7$6>76~eDqbD%>xp9s&dbZ2T-JpN{lS4Z2H9M|CBn>iAAU}K+Mgk^ z*e^1tw_#{T4_*n3Dg*X~3l>&Z!FQvn#vMeEdWB*jIy^UfqNr%bm!oPyMT{ws;+re(kM6kur%O9>BX!5qT+KcM7 zbb@g;jXmk|NEt0H5}2h%Luz|JGD0328Y&7EHLH#B_Bg7?<;~3BtoQL%3NsAst7i(I ze;8Fi(vHnQ6!#4bP&K;$M4muabj&F*W|w;q@#Wbqn&>wJV`KUg-~mZ>_Mb?ok=3km zH81Gw8zs+ajt|F1Yeq#!j%7n$=+sa&NP+-lqS1qEy!8It+L#oj4EVbIWP7Co&(p=v ze5pUh5e_OE8sm?o;03YApeR?G_Qoo)pyA)~=cOc-$%tO(TRZ+zRsm;>G*odysLNq| z18OJ`nE;B_`xoWMzk^(!`oK2&{mqnhP?LZr#6sOTq9Wkb_rr$|kHo3+k~8ctN{0+& z*-HwR*Pse*kJMk@X}EjD+?kx3TEN*_*e8j3^45vUZk7~XR<(Nit-^cnQ*$#j6%kLA zr{w4v7(B!be0NsgS1KV8fO5Qjeb-9RCbjC_HZar|Lzf8#z9rQhyH|Q{RrK+jSNVO`?jX9=_+GIM^$^por zg{>({@)5BTwWO?!Ioo%WKve9R79I zpo}S*MMy|7@G1N;QQ2~MTz)R#Se%tiJ9fXn|M~%tKE9Y0Bh+Y;YT1r{WC#`%6x{n> z*8Je<>gwDM$vP6-O~cU!O`itrCa?2LlFTvi$m&q#`z%?KSy7)q zW2a`Qnp;>HtoOn9ftUt1Mt^RB47MD}H{ylp{&9Bd`Z-(5bfcwc>DQ2=-`GS7ETBXu zkG-;$&ckXgjxZm2L*pA4f;ovE;akQ3vO5Br0%KN;q6l99Tl4h)|DPX@%_a0LgR&(= z(vsg8l0BjV#wiktmJhB4p16pLiDA@ONMxQCi=8;gU!dXIA&njqcb1+by_&MR`baHJ z;4Vm=KnNB}t9+kQhQwHa2xTLWOl*~70>g1Ozx^L==6|x(6B$+q5IRk~vx#o)gbyMG zj4mZsCyKFEf`8~`89Wn)4iM83mCJ<_+2tLI?f$>?n6Q@hoodh5JkZ$%F%`7D^j*8* zAY|70f8GVc&QLda1SHm0R|`DH)Ol0nSjj-A(>8t@9Ti0a9SxwBT-YLLfs|BLb*F4W zfCEq}Scw(JxqnIN>4CpA?0}*OVw+S+w3y`K5_w2y=mI1{+Aii~6==qosG^5J#8F~g zqoQB#xHej-q@vQ%ce9N!Q3(e!ORS}bn;VP?`uIG58CBbVB?5Hg4Db9|?&Eiy7M+-w zcxBcW5D^`%i+*#o^9W=qfKM+0_H+L^d=XH+G{A3T#@!l26AKGwOlJwta{o0!%FN6R zQWt}oT~HHQ?W_(#)Bb*Iq0{B$z@?^jZAt@d*JzQjU#*@k$#CPw4M6UAj&rTCXQ#(d zoEcSK>(mUkqK}!9Ra|!0^r7!0kdcuQn!HR%7$T1x@=k|ljw*=hRdX{vfXgm`U6uA< zc@ffjdKA#R09$=oh6Dh4flJ9$twZP9SaBkB<%PO$u@RoXCZ59mAYo1pjjbXmWwI{D zzEw*L3JSu`6!#*s9mssD##X%jSNKiKt5-}X0Ii_XNkQ>kfL^RKoVd6)JUo1{Wq&pp zgh0~L2#nkf6lIT^vmk=qr3=`gJt$b-@I5>@z(b&#U0q$Ffx!V-z$__gTGOV+20cdL z+2LDgcKBSEl$eo7S%>?+zKy8BP+4X$Hy$KuLxVWwZnM1RO*VY)eQO z1WcF$P1~hC6Ly6zI?>ui!wo@G z)VC}Y*Aq)8f`gDnp^8xFp!>l`gh0RcXmqv{a1Xq%qM}kNRfSo>{ijaN{w2bzOphn4 zmGd^zv6dlWudRcWt^M0K8aRB(&^X{$kfVYciY|tQi;Do% zP2MY6UI~ebSfDD~UH_Vwn=4xrZ&VUce=Cym(X5-W-_GjOs3`pDR`mVdS@?kd6m1`@ z23@X*<8*;rc9C`UCqQru5YyY95aGkERLYan)6*n0G?CD`=f8fvP+B)zNsRm3*w{ePYX=n?PN5$DD*@)o|9jwV2>=#V>9Ib31sqE2y6cs$ zqAR?-yfBGj=MOyd2Y-=fOIoP;YT6lcnfz93&{cZ+6625SOH1&`sC!ip7a(dt;UFz9 zk7H?NrGE@w&%(@%wf}pj6PM8+(eQu>sEybk zg6^;@hDNZ$=kLR2kXja$;rv6-ACw3 zl&ZV?EpRM;_f@U>rlwBV1F$5IT>XG_ydFkKgAHUueSJNKH3Kng(Z+v)X;HMsNgLqj z`Dg&NW|s9(u7KtkZTO=#hau!tRaJpjXdFO8VDnk`k~D+V6;z|@1PZn%aL1U&YyNeL zDQehLJyISCQDgP#`Hg;5ctk`&as+?xGsfLQ&RuOradGj-GmVsR9$hXQ8B8H5`Mkp* zZFQZU-M%_IJDZULKQt~6k^>S&qmWXa=m=7jvU^hiB9ug89RES31wx>H!F=;Sq|*OM z23O#=`^fEOiZXmgeo}ui5~vM&h=DJLcSfV`fPT^c%N@A9hn6VTf3(lm&M}+(2AB_* u!q5Yr{69(DRIG?0FA~h3^vXY+ + + + + + + + + + diff --git a/Doxygen/build/Vector4_8h__incl.md5 b/Doxygen/build/Vector4_8h__incl.md5 new file mode 100644 index 0000000..3382afb --- /dev/null +++ b/Doxygen/build/Vector4_8h__incl.md5 @@ -0,0 +1 @@ +ad580b6dad739ccc43a8731390726116 \ No newline at end of file diff --git a/Doxygen/build/Vector4_8h__incl.png b/Doxygen/build/Vector4_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..8d771f75b8edd1c7394c90bf02d13f6e4c2a0fc1 GIT binary patch literal 17346 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�F?YUoxt!^+iStX>T#4`cp~fk#A4EkZ_(p$;#S= zaV2jr1Se?MUp0K}Zdx6DvNxvtDk(b~Pj#eZr-@6gM4q@&fdP5B)lkUjZ)rLrXqgph z!Y9!=kgBA#7mr12>X`|4=hka(Ep+?~a@e}F0Q5G@Dc}G*X+xSz?|gO1S5mUy8=sld zBDK)rf{7jH12G}e?rq6XrUEkQV#vphvO5kZZ*IEXW2}$1dm9Z3`-nS89gL;rv}g^Z zwj0~GxFKPfQ84VZ^wD_Wt)YF+nhG^EsIoyi3?{w6-AlNGfs79#anWr@}ltG8^-HY!5sgK5aohR$G7a{xn&os$S?CmT7jM@QSQ`&T->@^7HOiq{^!TvsSu&pCHSkoyDZ1@94%fw(pkFw`yTiea^^Aam+x1GOF(txk5OUU_CD}cAQR{f19 z9ea5A?X|G#*GZi}E6;!m)vA~hOO=e>-Bk=x5AFHm0b@;pAzf@rZZfqF831#FBB!J_ zx{Dly$|J5<%saI7faV})`j#|Jp5MADKUnKH$)j5t$?t6L_%0Cx72{Y6q}GRPLodyY z)Kr}(!;vPa0n;m{)0!1OIJy{6hM9sRxQHpjJ71kzNI;L9J;${!2hN$H&N+rVaE1<=B`-0U|11ky8>_`;OL>; z#(m@f`RP_#04o$wT+9tz2plEtRGl*sVs?8w41mrMN&!58jA8r~fq3}vAriLKZ3MVu z5avlPB7Xe9wX(7*19%!35xDw2S3OkZ~gTpTzGnIHHgEie`Acy;OgH8xgrZt3E9s~1*!4GX$nT|R=T zH~r(|;}Gr+m;-H6QB{5I@=h+StUTlaP>5LsAkw?x6|Z#_x1&pl;GfNwEAjfpW-$u|;#BqtbhLd3X$z zl$0K@v3&}q6bM5STR}w3B`_&kdV1=FT-V#jhpo1nwZ1+FYKO1w9UW?BKLGwN`CIP_ zlXu(2l~yw)`C64orcB0S=5Te;=j`GlMzdpJAVR0nfIuYxEOGJwf&Pg0V{IE*QlsAs5(xS2%iA06)Ka* z*dv54I^|#_f1&*dQkV&Z7P!OxgM-&T=(rlDrl#o&Y&!>oQ2h$RfHNiu2?;p`#fyyc zcSDjq{a|@;pzV$`?ieun8$v5e19a+{d9}a4|7TB8=lz?A0T`A=+P9N1kYsO-jRCXD zM0iC+5P;r=jyHNZ+aVdUCt=!8a+bcu~}JJO~445CBj%b9o7566g05F1W`|p@5ify4Bf&nAEPiM5U9Gy&jmoh zgt!DGS$YPBK^UFZ(9&WM5FkS|t;D$BX`ES522LG<`ri5oThaVu)z8;d)YLG?hJ}xh z|KN4WO%M?fd};?dw~r!A)JUh=9Z5+^poE+*Pi?**whOshpV@PgM&e}77-J}{O;ax+6$t#wl+7OTX$gie03lh zNps9EEJVh|eWDbwZ0hd51=;8GKG-!#l>C8tZSL<^coX+Dnc~i!mgZ)Zh0gF!AOT@` z8pYGo6VOgM){Bf1I9*g20Pc%_gq%?Q-;7qenuvOuJ&sygJkU1!KV$i-T#j;vb?qV7 z2j0NM!t#d6YEW?KTUv%0|BTg#2#oN85Q!X|M(zT{8?!4b0U!kgqzKxbpK$>&%A5ql z{GY#O{{Is;`fuO*^1UBzYHdXYH4id^`s34b#Pk>7fYJrVo|wn~{7HeM3k(Z`DgV&n zV|gRk@!WK+Ba(6Q$Dz1EMn;AJiXwJ+Jwo6ewGRnJ&~0oLbgevl_6!9^$Ack8wMgG_lz>C8IuRk!WehnoX$Go-x{f#L=JEh;)r z6WlYm&AbE%SoFcGHOkFM#`N#w%FD|S=WCI{oOp~`YC0h@^GS3g$LAq1F9_kJGj6E2 zWbG0De}DSJf1fw;Khwtf-nSwnK^)N5-flyUejm_wAr9>-$dBb>7Q*;hD~w`qfwc|Y zAczWs&s0ECV{a6UjhP@u7`+KEiCA(d#9evz`oAQN{HO^e7w~_bUN&HaDdse3w5OP3 i&yb&k!PkC`^0(M6u3WbM8a|W*@#6VQi2^Y_@BagMaI1R& literal 0 HcmV?d00001 diff --git a/Doxygen/build/Vector4_8h_source.html b/Doxygen/build/Vector4_8h_source.html new file mode 100644 index 0000000..331bf5c --- /dev/null +++ b/Doxygen/build/Vector4_8h_source.html @@ -0,0 +1,227 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector4.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Vector4.h
+
+
+Go to the documentation of this file.
1 #pragma once
+
2 #include <cstdlib>
+
3 #include <iomanip>
+
4 #include <ostream>
+
5 #include <sstream>
+
6 #include "Matrix4x4.h"
+
7 
+
8 namespace Eule
+
9 {
+
10  template <typename T> class Vector2;
+
11  template <typename T> class Vector3;
+
12 
+
16  template <typename T>
+
17  class Vector4
+
18  {
+
19  public:
+
20  Vector4() : x{ 0 }, y{ 0 }, z{ 0 }, w{ 0 } {}
+
21  Vector4(T _x, T _y, T _z, T _w) : x{ _x }, y{ _y }, z{ _z }, w{ _w } {}
+
22  Vector4(const Vector4<T>& other) = default;
+
23  Vector4(Vector4<T>&& other) noexcept = default;
+
24 
+
26  double SqrMagnitude() const;
+
27 
+
29  double Magnitude() const;
+
30 
+
32  [[nodiscard]] Vector4<double> Normalize() const;
+
33 
+
35  void NormalizeSelf();
+
36 
+
38  [[nodiscard]] Vector4<T> VectorScale(const Vector4<T>& scalar) const;
+
39 
+
41  void LerpSelf(const Vector4<T>& other, double t);
+
42 
+
44  [[nodiscard]] Vector4<double> Lerp(const Vector4<T>& other, double t) const;
+
45 
+
47  [[nodiscard]] bool Similar(const Vector4<T>& other, double epsilon = 0.00001) const;
+
48 
+
50  [[nodiscard]] Vector4<int> ToInt() const;
+
51 
+
53  [[nodiscard]] Vector4<double> ToDouble() const;
+
54 
+
55  T& operator[](std::size_t idx);
+
56  const T& operator[](std::size_t idx) const;
+
57 
+
58  Vector4<T> operator+(const Vector4<T>& other) const;
+
59  void operator+=(const Vector4<T>& other);
+
60  Vector4<T> operator-(const Vector4<T>& other) const;
+
61  void operator-=(const Vector4<T>& other);
+
62  Vector4<T> operator*(const T scale) const;
+
63  void operator*=(const T scale);
+
64  Vector4<T> operator/(const T scale) const;
+
65  void operator/=(const T scale);
+
66  Vector4<T> operator*(const Matrix4x4& mat) const;
+
67  void operator*=(const Matrix4x4& mat);
+
68  Vector4<T> operator-() const;
+
69 
+
70  operator Vector2<T>() const;
+
71  operator Vector3<T>() const;
+
72 
+
73  void operator=(const Vector4<T>& other);
+
74  void operator=(Vector4<T>&& other) noexcept;
+
75 
+
76  bool operator==(const Vector4<T>& other) const;
+
77  bool operator!=(const Vector4<T>& other) const;
+
78 
+
79  friend std::ostream& operator << (std::ostream& os, const Vector4<T>& v)
+
80  {
+
81  return os << "[x: " << v.x << " y: " << v.y << " z: " << v.z << " w: " << v.w << "]";
+
82  }
+
83  friend std::wostream& operator << (std::wostream& os, const Vector4<T>& v)
+
84  {
+
85  return os << L"[x: " << v.x << L" y: " << v.y << L" z: " << v.z << L" w: " << v.w << L"]";
+
86  }
+
87 
+
88  T x;
+
89  T y;
+
90  T z;
+
91  T w;
+
92 
+
93  // Some handy predefines
+
94  static const Vector4<double> up;
+
95  static const Vector4<double> down;
+
96  static const Vector4<double> right;
+
97  static const Vector4<double> left;
+
98  static const Vector4<double> forward;
+
99  static const Vector4<double> backward;
+
100  static const Vector4<double> future;
+
101  static const Vector4<double> past;
+
102  static const Vector4<double> one;
+
103  static const Vector4<double> zero;
+
104  };
+
105 
+ + +
108 }
+
+
Vector4< int > ToInt() const
Will convert this vector to a Vector4i.
Definition: Vector4.cpp:173
+
Vector4(T _x, T _y, T _z, T _w)
Definition: Vector4.h:21
+
void operator+=(const Vector4< T > &other)
Definition: Vector4.cpp:376
+
Vector4< T > operator/(const T scale) const
Definition: Vector4.cpp:603
+
Vector4< T > operator*(const T scale) const
Definition: Vector4.cpp:512
+
void NormalizeSelf()
Will normalize this vector.
Definition: Vector4.cpp:148
+ +
static const Vector4< double > backward
Definition: Vector4.h:99
+ +
void operator=(const Vector4< T > &other)
Conversion method.
Definition: Vector4.cpp:730
+
void operator-=(const Vector4< T > &other)
Definition: Vector4.cpp:466
+
Vector4< double > Normalize() const
Will return the normalization of this vector.
Definition: Vector4.cpp:92
+ +
void operator*=(const T scale)
Definition: Vector4.cpp:557
+
Vector4< double > Vector4d
Definition: Vector4.h:107
+
Vector4< T > VectorScale(const Vector4< T > &scalar) const
Will scale self.n by scalar.n.
Definition: Vector4.cpp:79
+
Vector4< T > operator-() const
Definition: Vector4.cpp:719
+
Vector4< double > Lerp(const Vector4< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector4.cpp:287
+
static const Vector4< double > one
Definition: Vector4.h:102
+
void LerpSelf(const Vector4< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector4.cpp:267
+ +
static const Vector4< double > forward
Definition: Vector4.h:98
+
void operator/=(const T scale)
Definition: Vector4.cpp:647
+ +
static const Vector4< double > down
Definition: Vector4.h:95
+
Vector4< T > operator+(const Vector4< T > &other) const
Definition: Vector4.cpp:331
+
T & operator[](std::size_t idx)
Definition: Vector4.cpp:185
+
Vector4< double > ToDouble() const
Will convert this vector to a Vector4d.
Definition: Vector4.cpp:179
+
Vector4< int > Vector4i
Definition: Vector4.h:106
+
bool operator!=(const Vector4< T > &other) const
Definition: Vector4.cpp:767
+
bool Similar(const Vector4< T > &other, double epsilon=0.00001) const
Will compare if two vectors are similar to a certain epsilon value.
Definition: Vector4.cpp:162
+
double Magnitude() const
Will compute the magnitude.
Definition: Vector4.cpp:38
+
static const Vector4< double > future
Definition: Vector4.h:100
+
bool operator==(const Vector4< T > &other) const
Definition: Vector4.cpp:659
+
static const Vector4< double > zero
Definition: Vector4.h:103
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+
static const Vector4< double > up
Definition: Vector4.h:94
+
static const Vector4< double > past
Definition: Vector4.h:101
+
friend std::ostream & operator<<(std::ostream &os, const Vector4< T > &v)
Definition: Vector4.h:79
+ +
static const Vector4< double > left
Definition: Vector4.h:97
+
Definition: Collider.h:4
+
static const Vector4< double > right
Definition: Vector4.h:96
+
Representation of a 4d vector.
Definition: Vector2.h:8
+ + + + diff --git a/Doxygen/build/annotated.html b/Doxygen/build/annotated.html new file mode 100644 index 0000000..306cd0a --- /dev/null +++ b/Doxygen/build/annotated.html @@ -0,0 +1,98 @@ + + + + + + + +Leonetienne/Eule: Class List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + +
 NEule
 CColliderAbstract class of a collider domain
 CMathMath utility class
 CMatrix4x4A matrix 4x4 class representing a 3d transformation
 CQuaternion3D rotation representation
 CRectTrivial data structure representing a rectangle
 CTrapazoidalPrismColliderA collider describing a trapazoidal prism
 CVector2Representation of a 2d vector
 CVector3Representation of a 3d vector
 CVector4Representation of a 4d vector
+
+
+ + + + diff --git a/Doxygen/build/bc_s.png b/Doxygen/build/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/Doxygen/build/bdwn.png b/Doxygen/build/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule::Collider Member List
+
+
+ +

This is the complete list of members for Eule::Collider, including all inherited members.

+ + +
Contains(const Vector3d &point) const =0Eule::Colliderpure virtual
+ + + + diff --git a/Doxygen/build/classEule_1_1Collider.html b/Doxygen/build/classEule_1_1Collider.html new file mode 100644 index 0000000..b4b3839 --- /dev/null +++ b/Doxygen/build/classEule_1_1Collider.html @@ -0,0 +1,151 @@ + + + + + + + +Leonetienne/Eule: Eule::Collider Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Eule::Collider Class Referenceabstract
+
+
+ +

Abstract class of a collider domain. + More...

+ +

#include <Collider.h>

+
+Inheritance diagram for Eule::Collider:
+
+
Inheritance graph
+ + + + +
[legend]
+ + + + + +

+Public Member Functions

virtual bool Contains (const Vector3d &point) const =0
 Tests, if this Collider contains a point. More...
 
+

Detailed Description

+

Abstract class of a collider domain.

+

Specializations describe a shape in 3d space, and provide implementations of the methods below, for their specific shape. Examples could be a SphereCollider, a BoxCollider, etc...

+ +

Definition at line 10 of file Collider.h.

+

Member Function Documentation

+ +

◆ Contains()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool Eule::Collider::Contains (const Vector3dpoint) const
+
+pure virtual
+
+ +

Tests, if this Collider contains a point.

+ +

Implemented in Eule::TrapazoidalPrismCollider.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/Doxygen/build/classEule_1_1Collider__inherit__graph.map b/Doxygen/build/classEule_1_1Collider__inherit__graph.map new file mode 100644 index 0000000..84537af --- /dev/null +++ b/Doxygen/build/classEule_1_1Collider__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doxygen/build/classEule_1_1Collider__inherit__graph.md5 b/Doxygen/build/classEule_1_1Collider__inherit__graph.md5 new file mode 100644 index 0000000..58581a3 --- /dev/null +++ b/Doxygen/build/classEule_1_1Collider__inherit__graph.md5 @@ -0,0 +1 @@ +0f12e27dac5bc597f7fa2ef2f62c1652 \ No newline at end of file diff --git a/Doxygen/build/classEule_1_1Collider__inherit__graph.png b/Doxygen/build/classEule_1_1Collider__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2e73528aab73d08b12a45d13783ee7ebce8cfa GIT binary patch literal 3690 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 literal 0 HcmV?d00001 diff --git a/Doxygen/build/classEule_1_1Math-members.html b/Doxygen/build/classEule_1_1Math-members.html new file mode 100644 index 0000000..9e76bca --- /dev/null +++ b/Doxygen/build/classEule_1_1Math-members.html @@ -0,0 +1,104 @@ + + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule::Math Member List
+
+
+ +

This is the complete list of members for Eule::Math, including all inherited members.

+ + + + + + + + + + + + + + +
Abs(const double a)Eule::Mathinlinestatic
Clamp(const double v, const double min, const double max)Eule::Mathinlinestatic
Lerp(double a, double b, double t)Eule::Mathinlinestatic
Max(const double a, const double b)Eule::Mathinlinestatic
Min(const double a, const double b)Eule::Mathinlinestatic
Oscillate(const double a, const double b, const double counter, const double speed)Eule::Mathstatic
Random()Eule::Mathstatic
RandomChance(const double chance)Eule::Mathstatic
RandomInt()Eule::Mathstatic
RandomIntRange(const int max, const int min)Eule::Mathstatic
RandomRange(const double min, const double max)Eule::Mathstatic
RandomUint()Eule::Mathstatic
Similar(const double a, const double b, const double epsilon=0.00001)Eule::Mathstatic
+ + + + diff --git a/Doxygen/build/classEule_1_1Math.html b/Doxygen/build/classEule_1_1Math.html new file mode 100644 index 0000000..27d60bf --- /dev/null +++ b/Doxygen/build/classEule_1_1Math.html @@ -0,0 +1,702 @@ + + + + + + + +Leonetienne/Eule: Eule::Math Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Eule::Math Class Reference
+
+
+ +

Math utility class. + More...

+ +

#include <Math.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static constexpr double Max (const double a, const double b)
 Will return the bigger of two values. More...
 
static constexpr double Min (const double a, const double b)
 Will return the smaller of two values. More...
 
static constexpr double Clamp (const double v, const double min, const double max)
 Will return v, but at least min, and at most max More...
 
static constexpr double Lerp (double a, double b, double t)
 Will return the linear interpolation between a and b by t More...
 
static constexpr double Abs (const double a)
 Will return the absolute value of a More...
 
static constexpr bool Similar (const double a, const double b, const double epsilon=0.00001)
 Compares two double values with a given accuracy. More...
 
static double Random ()
 Will return a random double between 0 and 1 More...
 
static unsigned int RandomUint ()
 Will return a random unsigned integer. More...
 
static unsigned int RandomInt ()
 Will return a random integer. More...
 
static double RandomRange (const double min, const double max)
 Will return a random double within a range
+ These bounds are INCLUSIVE! More...
 
static int RandomIntRange (const int max, const int min)
 Will return a random integer within a range. More...
 
static bool RandomChance (const double chance)
 Will 'roll' a dice, returning true \(100 * chance\) percent of the time. More...
 
static double Oscillate (const double a, const double b, const double counter, const double speed)
 Kind of like \(sin(counter)\), but it oscillates over \([a,b]\) instead of \([-1,1]\), by a given speed. More...
 
+

Detailed Description

+

Math utility class.

+ +

Definition at line 8 of file Math.h.

+

Member Function Documentation

+ +

◆ Abs()

+ +
+
+ + + + + +
+ + + + + + + + +
constexpr double Eule::Math::Abs (const double a)
+
+inlinestaticconstexpr
+
+ +

Will return the absolute value of a

+ +

Definition at line 92 of file Math.h.

+
93  {
+
94  return (a > 0.0) ? a : -a;
+
95  }
+
+
+
+ +

◆ Clamp()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
constexpr double Eule::Math::Clamp (const double v,
const double min,
const double max 
)
+
+inlinestaticconstexpr
+
+ +

Will return v, but at least min, and at most max

+ +

Definition at line 81 of file Math.h.

+
82  {
+
83  return Max(Min(v, max), min);
+
84  }
+
+
+
+ +

◆ Lerp()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
constexpr double Eule::Math::Lerp (double a,
double b,
double t 
)
+
+inlinestaticconstexpr
+
+ +

Will return the linear interpolation between a and b by t

+ +

Definition at line 86 of file Math.h.

+
87  {
+
88  const double it = 1.0 - t;
+
89  return (a * it) + (b * t);
+
90  }
+
+
+
+ +

◆ Max()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
constexpr double Eule::Math::Max (const double a,
const double b 
)
+
+inlinestaticconstexpr
+
+ +

Will return the bigger of two values.

+ +

Definition at line 71 of file Math.h.

+
72  {
+
73  return (a > b) ? a : b;
+
74  }
+
+
+
+ +

◆ Min()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
constexpr double Eule::Math::Min (const double a,
const double b 
)
+
+inlinestaticconstexpr
+
+ +

Will return the smaller of two values.

+ +

Definition at line 76 of file Math.h.

+
77  {
+
78  return (a < b) ? a : b;
+
79  }
+
+
+
+ +

◆ Oscillate()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double Math::Oscillate (const double a,
const double b,
const double counter,
const double speed 
)
+
+static
+
+ +

Kind of like \(sin(counter)\), but it oscillates over \([a,b]\) instead of \([-1,1]\), by a given speed.

+


+ Given that \(speed = 1\), the result will always be a if counter is even, and b if counter is uneven.
+ If counter is a rational, the result will oscillate between a and b, like sin() does.
+ If you increase speed, the oscillation frequency will increase. Meaning \(speed = 2\) would result in \(counter=0.5\) returning b.

+ +

Definition at line 68 of file Math.cpp.

+
69 {
+
70  return (sin(counter * speed * PI - HALF_PI) * 0.5 + 0.5) * (b-a) + a;
+
71 }
+
+
+
+ +

◆ Random()

+ +
+
+ + + + + +
+ + + + + + + +
double Math::Random ()
+
+static
+
+ +

Will return a random double between 0 and 1

+ +

Definition at line 29 of file Math.cpp.

+
30 {
+ +
32 
+
33  return (rng() % 694206942069ll) / 694206942069.0;
+
34 }
+
+
+
+ +

◆ RandomChance()

+ +
+
+ + + + + +
+ + + + + + + + +
bool Math::RandomChance (const double chance)
+
+static
+
+ +

Will 'roll' a dice, returning true \(100 * chance\) percent of the time.

+ +

Definition at line 73 of file Math.cpp.

+
74 {
+
75  return Random() <= chance;
+
76 }
+
+
+
+ +

◆ RandomInt()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int Math::RandomInt ()
+
+static
+
+ +

Will return a random integer.

+ +

Definition at line 45 of file Math.cpp.

+
46 {
+ +
48 
+
49  // Since this is supposed to return a random value anyways,
+
50  // we can let the random uint overflow without any problems.
+
51  return (int)rng();
+
52 }
+
+
+
+ +

◆ RandomIntRange()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int Math::RandomIntRange (const int max,
const int min 
)
+
+static
+
+ +

Will return a random integer within a range.

+

This is faster than (int)RandomRange(x,y)
+ These bounds are INCLUSIVE!

+ +

Definition at line 63 of file Math.cpp.

+
64 {
+
65  return (rng() % (max + 1 - min)) + min;
+
66 }
+
+
+
+ +

◆ RandomRange()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double Math::RandomRange (const double min,
const double max 
)
+
+static
+
+ +

Will return a random double within a range
+ These bounds are INCLUSIVE!

+ +

Definition at line 56 of file Math.cpp.

+
57 {
+
58  return (Random() * (max - min)) + min;
+
59 }
+
+
+
+ +

◆ RandomUint()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int Math::RandomUint ()
+
+static
+
+ +

Will return a random unsigned integer.

+ +

Definition at line 37 of file Math.cpp.

+
38 {
+ +
40 
+
41  return rng();
+
42 }
+
+
+
+ +

◆ Similar()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static constexpr bool Eule::Math::Similar (const double a,
const double b,
const double epsilon = 0.00001 
)
+
+staticconstexpr
+
+ +

Compares two double values with a given accuracy.

+ +
+
+
The documentation for this class was generated from the following files: +
+
#define MAKE_SURE_RNG_IS_INITIALIZED
Definition: Math.cpp:8
+
#define PI
Pi up to 50 decimal places.
Definition: Constants.h:6
+
#define HALF_PI
Pi divided by two.
Definition: Constants.h:9
+
static constexpr double Max(const double a, const double b)
Will return the bigger of two values.
Definition: Math.h:71
+
static constexpr double Min(const double a, const double b)
Will return the smaller of two values.
Definition: Math.h:76
+
static double Random()
Will return a random double between 0 and 1
Definition: Math.cpp:29
+ + + + diff --git a/Doxygen/build/classEule_1_1Matrix4x4-members.html b/Doxygen/build/classEule_1_1Matrix4x4-members.html new file mode 100644 index 0000000..97260e0 --- /dev/null +++ b/Doxygen/build/classEule_1_1Matrix4x4-members.html @@ -0,0 +1,145 @@ + + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule::Matrix4x4 Member List
+
+
+ +

This is the complete list of members for Eule::Matrix4x4, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aEule::Matrix4x4
Adjoint(std::size_t n) constEule::Matrix4x4
bEule::Matrix4x4
cEule::Matrix4x4
dEule::Matrix4x4
Determinant(std::size_t n) constEule::Matrix4x4
DropTranslationComponents() constEule::Matrix4x4
eEule::Matrix4x4
fEule::Matrix4x4
gEule::Matrix4x4
GetCofactors(std::size_t p, std::size_t q, std::size_t n) constEule::Matrix4x4
GetTranslationComponent() constEule::Matrix4x4
hEule::Matrix4x4
iEule::Matrix4x4
Inverse3x3() constEule::Matrix4x4
Inverse4x4() constEule::Matrix4x4
IsInversible3x3() constEule::Matrix4x4
IsInversible4x4() constEule::Matrix4x4
jEule::Matrix4x4
kEule::Matrix4x4
lEule::Matrix4x4
mEule::Matrix4x4
Matrix4x4()Eule::Matrix4x4
Matrix4x4(const Matrix4x4 &other)Eule::Matrix4x4
Matrix4x4(Matrix4x4 &&other) noexceptEule::Matrix4x4
Multiply4x4(const Matrix4x4 &o) constEule::Matrix4x4
nEule::Matrix4x4
oEule::Matrix4x4
operator!=(const Matrix4x4 &other)Eule::Matrix4x4
operator*(const Matrix4x4 &other) constEule::Matrix4x4
operator*(const double scalar) constEule::Matrix4x4
operator*=(const Matrix4x4 &other)Eule::Matrix4x4
operator*=(const double scalar)Eule::Matrix4x4
operator+(const Matrix4x4 &other) constEule::Matrix4x4
operator+=(const Matrix4x4 &other)Eule::Matrix4x4
operator-(const Matrix4x4 &other) constEule::Matrix4x4
operator-=(const Matrix4x4 &other)Eule::Matrix4x4
operator/(const Matrix4x4 &other) constEule::Matrix4x4
operator/(const double denominator) constEule::Matrix4x4
operator/=(const Matrix4x4 &other)Eule::Matrix4x4
operator/=(const double denominator)Eule::Matrix4x4
operator<<(std::ostream &os, const Matrix4x4 &m)Eule::Matrix4x4friend
operator<<(std::wostream &os, const Matrix4x4 &m)Eule::Matrix4x4friend
operator=(const Matrix4x4 &other)Eule::Matrix4x4
operator=(Matrix4x4 &&other) noexceptEule::Matrix4x4
operator==(const Matrix4x4 &other)Eule::Matrix4x4
operator[](std::size_t y)Eule::Matrix4x4
operator[](std::size_t y) constEule::Matrix4x4
pEule::Matrix4x4
SetTranslationComponent(const Vector3d &trans)Eule::Matrix4x4
Similar(const Matrix4x4 &other, double epsilon=0.00001) constEule::Matrix4x4
Transpose3x3() constEule::Matrix4x4
Transpose4x4() constEule::Matrix4x4
vEule::Matrix4x4
+ + + + diff --git a/Doxygen/build/classEule_1_1Matrix4x4.html b/Doxygen/build/classEule_1_1Matrix4x4.html new file mode 100644 index 0000000..cadcd2a --- /dev/null +++ b/Doxygen/build/classEule_1_1Matrix4x4.html @@ -0,0 +1,1979 @@ + + + + + + + +Leonetienne/Eule: Eule::Matrix4x4 Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Eule::Matrix4x4 Class Reference
+
+
+ +

A matrix 4x4 class representing a 3d transformation. + More...

+ +

#include <Matrix4x4.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Matrix4x4 ()
 
 Matrix4x4 (const Matrix4x4 &other)
 
 Matrix4x4 (Matrix4x4 &&other) noexcept
 
Matrix4x4 operator* (const Matrix4x4 &other) const
 
void operator*= (const Matrix4x4 &other)
 
Matrix4x4 operator/ (const Matrix4x4 &other) const
 
void operator/= (const Matrix4x4 &other)
 
Matrix4x4 operator* (const double scalar) const
 Cellwise scaling. More...
 
void operator*= (const double scalar)
 Cellwise scaling. More...
 
Matrix4x4 operator/ (const double denominator) const
 Cellwise division. More...
 
void operator/= (const double denominator)
 Cellwise division. More...
 
Matrix4x4 operator+ (const Matrix4x4 &other) const
 Cellwise addition. More...
 
void operator+= (const Matrix4x4 &other)
 Cellwise addition. More...
 
Matrix4x4 operator- (const Matrix4x4 &other) const
 Cellwise subtraction. More...
 
void operator-= (const Matrix4x4 &other)
 Cellwise subtraction. More...
 
std::array< double, 4 > & operator[] (std::size_t y)
 
const std::array< double, 4 > & operator[] (std::size_t y) const
 
void operator= (const Matrix4x4 &other)
 
void operator= (Matrix4x4 &&other) noexcept
 
bool operator== (const Matrix4x4 &other)
 
bool operator!= (const Matrix4x4 &other)
 
const Vector3d GetTranslationComponent () const
 Will return d,h,l as a Vector3d(x,y,z) More...
 
void SetTranslationComponent (const Vector3d &trans)
 Will set d,h,l from a Vector3d(x,y,z) More...
 
Matrix4x4 DropTranslationComponents () const
 Will return this Matrix4x4 with d,h,l being set to 0. More...
 
Matrix4x4 Transpose3x3 () const
 Will return the 3x3 transpose of this matrix. More...
 
Matrix4x4 Transpose4x4 () const
 Will return the 4x4 transpose of this matrix. More...
 
Matrix4x4 Multiply4x4 (const Matrix4x4 &o) const
 Will return the Matrix4x4 of an actual 4x4 multiplication. operator* only does a 3x3. More...
 
Matrix4x4 GetCofactors (std::size_t p, std::size_t q, std::size_t n) const
 Will return the cofactors of this matrix, by dimension n. More...
 
double Determinant (std::size_t n) const
 Will return the determinant, by dimension n. More...
 
Matrix4x4 Adjoint (std::size_t n) const
 Will return the adjoint of this matrix, by dimension n. More...
 
Matrix4x4 Inverse3x3 () const
 Will return the 3x3-inverse of this matrix. More...
 
Matrix4x4 Inverse4x4 () const
 Will return the full 4x4-inverse of this matrix. More...
 
bool IsInversible3x3 () const
 Will check if the 3x3-component is inversible. More...
 
bool IsInversible4x4 () const
 Will check if the entire matrix is inversible. More...
 
bool Similar (const Matrix4x4 &other, double epsilon=0.00001) const
 Will compare if two matrices are similar to a certain epsilon value. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

std::array< std::array< double, 4 >, 4 > v
 Array holding the matrices values. More...
 
double & a = v[0][0]
 
double & b = v[0][1]
 
double & c = v[0][2]
 
double & d = v[0][3]
 
double & e = v[1][0]
 
double & f = v[1][1]
 
double & g = v[1][2]
 
double & h = v[1][3]
 
double & i = v[2][0]
 
double & j = v[2][1]
 
double & k = v[2][2]
 
double & l = v[2][3]
 
double & m = v[3][0]
 
double & n = v[3][1]
 
double & o = v[3][2]
 
double & p = v[3][3]
 
+ + + + + +

+Friends

std::ostream & operator<< (std::ostream &os, const Matrix4x4 &m)
 
std::wostream & operator<< (std::wostream &os, const Matrix4x4 &m)
 
+

Detailed Description

+

A matrix 4x4 class representing a 3d transformation.

+

This matrix consists of a 3x3 matrix containing scaling and rotation information, and a vector (d,h,l) representing the translation.

+
myMatrix[y][x] = 3
+
+
X ==============>
+
Y
+
| # # # # # # # # # # #
+
| # a b c d #
+
| # #
+
| # e f g h #
+
| # #
+
V # i j k l #
+
# #
+
# m n o p #
+
# # # # # # # # # # #
+

Note: This class can also be used to compute regular 4x4 multiplications. Use Multiply4x4() for that.

+ +

Definition at line 36 of file Matrix4x4.h.

+

Constructor & Destructor Documentation

+ +

◆ Matrix4x4() [1/3]

+ +
+
+ + + + + + + +
Matrix4x4::Matrix4x4 ()
+
+ +

Definition at line 12 of file Matrix4x4.cpp.

+
13 {
+
14  // Create identity matrix
+
15  for (std::size_t i = 0; i < 4; i++)
+
16  for (std::size_t j = 0; j < 4; j++)
+
17  v[i][j] = double(i == j);
+
18 
+
19  return;
+
20 }
+
+
+
+ +

◆ Matrix4x4() [2/3]

+ +
+
+ + + + + + + + +
Matrix4x4::Matrix4x4 (const Matrix4x4other)
+
+ +

Definition at line 22 of file Matrix4x4.cpp.

+
23 {
+
24  v = other.v;
+
25  return;
+
26 }
+
+
+
+ +

◆ Matrix4x4() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + +
Matrix4x4::Matrix4x4 (Matrix4x4 && other)
+
+noexcept
+
+ +

Definition at line 28 of file Matrix4x4.cpp.

+
29 {
+
30  v = std::move(other.v);
+
31  return;
+
32 }
+
+
+
+

Member Function Documentation

+ +

◆ Adjoint()

+ +
+
+ + + + + + + + +
Matrix4x4 Matrix4x4::Adjoint (std::size_t n) const
+
+ +

Will return the adjoint of this matrix, by dimension n.

+ +

Definition at line 533 of file Matrix4x4.cpp.

+
534 {
+
535  if (n > 4)
+
536  throw std::runtime_error("Dimension out of range! 0 <= n <= 4");
+
537 
+
538  Matrix4x4 adj;
+
539  double sign = 1;
+
540 
+
541  for (std::size_t i = 0; i < n; i++)
+
542  for (std::size_t j = 0; j < n; j++)
+
543  {
+
544  Matrix4x4 cofs = GetCofactors(i, j, n);
+
545 
+
546  // sign of adj[j][i] positive if sum of row
+
547  // and column indexes is even.
+
548  sign = ((i + j) % 2 == 0) ? 1 : -1;
+
549 
+
550  // Interchanging rows and columns to get the
+
551  // transpose of the cofactor matrix
+
552  adj[j][i] = sign * (cofs.Determinant(n - 1));
+
553  }
+
554 
+
555  return adj;
+
556 }
+
+
+
+ +

◆ Determinant()

+ +
+
+ + + + + + + + +
double Matrix4x4::Determinant (std::size_t n) const
+
+ +

Will return the determinant, by dimension n.

+ +

Definition at line 511 of file Matrix4x4.cpp.

+
512 {
+
513  if (n > 4)
+
514  throw std::runtime_error("Dimension out of range! 0 <= n <= 4");
+
515 
+
516  double d = 0;
+
517  double sign = 1;
+
518 
+
519  if (n == 1)
+
520  return v[0][0];
+
521 
+
522  for (std::size_t x = 0; x < n; x++)
+
523  {
+
524  Matrix4x4 cofs = GetCofactors(0, x, n);
+
525 
+
526  d += sign * v[0][x] * cofs.Determinant(n - 1);
+
527  sign = -sign;
+
528  }
+
529 
+
530  return d;
+
531 }
+
+
+
+ +

◆ DropTranslationComponents()

+ +
+
+ + + + + + + +
Matrix4x4 Matrix4x4::DropTranslationComponents () const
+
+ +

Will return this Matrix4x4 with d,h,l being set to 0.

+ +

Definition at line 420 of file Matrix4x4.cpp.

+
421 {
+
422  Matrix4x4 m(*this);
+
423  m.d = 0;
+
424  m.h = 0;
+
425  m.l = 0;
+
426  return m;
+
427 }
+
+
+
+ +

◆ GetCofactors()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Matrix4x4 Matrix4x4::GetCofactors (std::size_t p,
std::size_t q,
std::size_t n 
) const
+
+ +

Will return the cofactors of this matrix, by dimension n.

+ +

Definition at line 478 of file Matrix4x4.cpp.

+
479 {
+
480  if (n > 4)
+
481  throw std::runtime_error("Dimension out of range! 0 <= n <= 4");
+
482 
+
483  Matrix4x4 cofs;
+
484 
+
485  std::size_t i = 0;
+
486  std::size_t j = 0;
+
487 
+
488  for (std::size_t y = 0; y < n; y++)
+
489  for (std::size_t x = 0; x < n; x++)
+
490  {
+
491  if ((y != p) && (x != q))
+
492  {
+
493  cofs[i][j] = v[y][x];
+
494  j++;
+
495  }
+
496 
+
497  if (j == n - 1)
+
498  {
+
499  j = 0;
+
500  i++;
+
501  }
+
502  }
+
503 
+
504  return cofs;
+
505 }
+
+
+
+ +

◆ GetTranslationComponent()

+ +
+
+ + + + + + + +
const Vector3d Matrix4x4::GetTranslationComponent () const
+
+ +

Will return d,h,l as a Vector3d(x,y,z)

+ +

Definition at line 407 of file Matrix4x4.cpp.

+
408 {
+
409  return Vector3d(d, h, l);
+
410 }
+
+
+
+ +

◆ Inverse3x3()

+ +
+
+ + + + + + + +
Matrix4x4 Matrix4x4::Inverse3x3 () const
+
+ +

Will return the 3x3-inverse of this matrix.

+


+ Meaning, the 3x3 component will be inverted, and the translation component will be negated

+ +

Definition at line 558 of file Matrix4x4.cpp.

+
559 {
+
560  Matrix4x4 inv;
+
561 
+
562  double det = Determinant(3);
+
563  if (det == 0.0)
+
564  throw std::runtime_error("Matrix3x3 not inversible!");
+
565 
+
566  Matrix4x4 adj = Adjoint(3);
+
567 
+
568  for (std::size_t i = 0; i < 3; i++)
+
569  for (std::size_t j = 0; j < 3; j++)
+
570  inv[i][j] = adj[i][j] / det;
+
571 
+ +
573 
+
574  return inv;
+
575 }
+
+
+
+ +

◆ Inverse4x4()

+ +
+
+ + + + + + + +
Matrix4x4 Matrix4x4::Inverse4x4 () const
+
+ +

Will return the full 4x4-inverse of this matrix.

+ +

Definition at line 577 of file Matrix4x4.cpp.

+
578 {
+
579  Matrix4x4 inv;
+
580 
+
581  double det = Determinant(4);
+
582  if (det == 0.0)
+
583  throw std::runtime_error("Matrix4x4 not inversible!");
+
584 
+
585  Matrix4x4 adj = Adjoint(4);
+
586 
+
587  for (std::size_t i = 0; i < 4; i++)
+
588  for (std::size_t j = 0; j < 4; j++)
+
589  inv[i][j] = adj[i][j] / det;
+
590 
+
591  return inv;
+
592 }
+
+
+
+ +

◆ IsInversible3x3()

+ +
+
+ + + + + + + +
bool Matrix4x4::IsInversible3x3 () const
+
+ +

Will check if the 3x3-component is inversible.

+ +

Definition at line 598 of file Matrix4x4.cpp.

+
599 {
+
600  return (Determinant(3) != 0);
+
601 }
+
+
+
+ +

◆ IsInversible4x4()

+ +
+
+ + + + + + + +
bool Matrix4x4::IsInversible4x4 () const
+
+ +

Will check if the entire matrix is inversible.

+ +

Definition at line 603 of file Matrix4x4.cpp.

+
604 {
+
605  return (Determinant(4) != 0);
+
606 }
+
+
+
+ +

◆ Multiply4x4()

+ +
+
+ + + + + + + + +
Matrix4x4 Matrix4x4::Multiply4x4 (const Matrix4x4o) const
+
+ +

Will return the Matrix4x4 of an actual 4x4 multiplication. operator* only does a 3x3.

+ +

Definition at line 451 of file Matrix4x4.cpp.

+
452 {
+
453  Matrix4x4 m;
+
454 
+
455  m[0][0] = (v[0][0]*o[0][0]) + (v[0][1]*o[1][0]) + (v[0][2]*o[2][0]) + (v[0][3]*o[3][0]);
+
456  m[0][1] = (v[0][0]*o[0][1]) + (v[0][1]*o[1][1]) + (v[0][2]*o[2][1]) + (v[0][3]*o[3][1]);
+
457  m[0][2] = (v[0][0]*o[0][2]) + (v[0][1]*o[1][2]) + (v[0][2]*o[2][2]) + (v[0][3]*o[3][2]);
+
458  m[0][3] = (v[0][0]*o[0][3]) + (v[0][1]*o[1][3]) + (v[0][2]*o[2][3]) + (v[0][3]*o[3][3]);
+
459 
+
460  m[1][0] = (v[1][0]*o[0][0]) + (v[1][1]*o[1][0]) + (v[1][2]*o[2][0]) + (v[1][3]*o[3][0]);
+
461  m[1][1] = (v[1][0]*o[0][1]) + (v[1][1]*o[1][1]) + (v[1][2]*o[2][1]) + (v[1][3]*o[3][1]);
+
462  m[1][2] = (v[1][0]*o[0][2]) + (v[1][1]*o[1][2]) + (v[1][2]*o[2][2]) + (v[1][3]*o[3][2]);
+
463  m[1][3] = (v[1][0]*o[0][3]) + (v[1][1]*o[1][3]) + (v[1][2]*o[2][3]) + (v[1][3]*o[3][3]);
+
464 
+
465  m[2][0] = (v[2][0]*o[0][0]) + (v[2][1]*o[1][0]) + (v[2][2]*o[2][0]) + (v[2][3]*o[3][0]);
+
466  m[2][1] = (v[2][0]*o[0][1]) + (v[2][1]*o[1][1]) + (v[2][2]*o[2][1]) + (v[2][3]*o[3][1]);
+
467  m[2][2] = (v[2][0]*o[0][2]) + (v[2][1]*o[1][2]) + (v[2][2]*o[2][2]) + (v[2][3]*o[3][2]);
+
468  m[2][3] = (v[2][0]*o[0][3]) + (v[2][1]*o[1][3]) + (v[2][2]*o[2][3]) + (v[2][3]*o[3][3]);
+
469 
+
470  m[3][0] = (v[3][0]*o[0][0]) + (v[3][1]*o[1][0]) + (v[3][2]*o[2][0]) + (v[3][3]*o[3][0]);
+
471  m[3][1] = (v[3][0]*o[0][1]) + (v[3][1]*o[1][1]) + (v[3][2]*o[2][1]) + (v[3][3]*o[3][1]);
+
472  m[3][2] = (v[3][0]*o[0][2]) + (v[3][1]*o[1][2]) + (v[3][2]*o[2][2]) + (v[3][3]*o[3][2]);
+
473  m[3][3] = (v[3][0]*o[0][3]) + (v[3][1]*o[1][3]) + (v[3][2]*o[2][3]) + (v[3][3]*o[3][3]);
+
474 
+
475  return m;
+
476 }
+
+
+
+ +

◆ operator!=()

+ +
+
+ + + + + + + + +
bool Matrix4x4::operator!= (const Matrix4x4other)
+
+ +

Definition at line 402 of file Matrix4x4.cpp.

+
403 {
+
404  return !operator==(other);
+
405 }
+
+
+
+ +

◆ operator*() [1/2]

+ +
+
+ + + + + + + + +
Matrix4x4 Matrix4x4::operator* (const double scalar) const
+
+ +

Cellwise scaling.

+ +

Definition at line 164 of file Matrix4x4.cpp.

+
165 {
+
166  Matrix4x4 m;
+
167 
+
168  #ifndef _EULE_NO_INTRINSICS_
+
169 
+
170  // Load matrix rows
+
171  __m256d __row0 = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
172  __m256d __row1 = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
173  __m256d __row2 = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
174  __m256d __row3 = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
175 
+
176  // Load scalar
+
177  __m256d __scalar = _mm256_set1_pd(scalar);
+
178 
+
179  // Scale values
+
180  __m256d __sr0 = _mm256_mul_pd(__row0, __scalar);
+
181  __m256d __sr1 = _mm256_mul_pd(__row1, __scalar);
+
182  __m256d __sr2 = _mm256_mul_pd(__row2, __scalar);
+
183  __m256d __sr3 = _mm256_mul_pd(__row3, __scalar);
+
184 
+
185  // Extract results
+
186  _mm256_storeu_pd(m.v[0].data(), __sr0);
+
187  _mm256_storeu_pd(m.v[1].data(), __sr1);
+
188  _mm256_storeu_pd(m.v[2].data(), __sr2);
+
189  _mm256_storeu_pd(m.v[3].data(), __sr3);
+
190 
+
191  #else
+
192 
+
193  for (std::size_t x = 0; x < 4; x++)
+
194  for (std::size_t y = 0; y < 4; y++)
+
195  m[x][y] = v[x][y] * scalar;
+
196 
+
197  #endif
+
198 
+
199  return m;
+
200 }
+
+
+
+ +

◆ operator*() [2/2]

+ +
+
+ + + + + + + + +
Matrix4x4 Matrix4x4::operator* (const Matrix4x4other) const
+
+ +

Definition at line 34 of file Matrix4x4.cpp.

+
35 {
+
36  Matrix4x4 newMatrix;
+
37  newMatrix.p = 1;
+
38 
+
39  #ifndef _EULE_NO_INTRINSICS_
+
40 
+
41 
+
42  /* <= Matrix3x3 multiplication => */
+
43 
+
44  // Load matrix components
+
45  __m256d __va1 = _mm256_set_pd(v[0][0], v[0][0], v[0][0], v[1][0]);
+
46  __m256d __va2 = _mm256_set_pd(v[1][0], v[1][0], v[2][0], v[2][0]);
+
47 
+
48  __m256d __oa1 = _mm256_set_pd(other[0][0], other[0][1], other[0][2], other[0][0]);
+
49  __m256d __oa2 = _mm256_set_pd(other[0][1], other[0][2], other[0][0], other[0][1]);
+
50 
+
51  __m256d __vb1 = _mm256_set_pd(v[0][1], v[0][1], v[0][1], v[1][1]);
+
52  __m256d __vb2 = _mm256_set_pd(v[1][1], v[1][1], v[2][1], v[2][1]);
+
53 
+
54  __m256d __ob1 = _mm256_set_pd(other[1][0], other[1][1], other[1][2], other[1][0]);
+
55  __m256d __ob2 = _mm256_set_pd(other[1][1], other[1][2], other[1][0], other[1][1]);
+
56 
+
57  __m256d __vc1 = _mm256_set_pd(v[0][2], v[0][2], v[0][2], v[1][2]);
+
58  __m256d __vc2 = _mm256_set_pd(v[1][2], v[1][2], v[2][2], v[2][2]);
+
59 
+
60  __m256d __oc1 = _mm256_set_pd(other[2][0], other[2][1], other[2][2], other[2][0]);
+
61  __m256d __oc2 = _mm256_set_pd(other[2][1], other[2][2], other[2][0], other[2][1]);
+
62 
+
63  // Initialize sums
+
64  __m256d __sum1 = _mm256_set1_pd(0);
+
65  __m256d __sum2 = _mm256_set1_pd(0);
+
66 
+
67  // Let's multiply-add them together
+
68  // First, the first block
+
69  __sum1 = _mm256_fmadd_pd(__va1, __oa1, __sum1);
+
70  __sum1 = _mm256_fmadd_pd(__vb1, __ob1, __sum1);
+
71  __sum1 = _mm256_fmadd_pd(__vc1, __oc1, __sum1);
+
72 
+
73  // Then the second block
+
74  __sum2 = _mm256_fmadd_pd(__va2, __oa2, __sum2);
+
75  __sum2 = _mm256_fmadd_pd(__vb2, __ob2, __sum2);
+
76  __sum2 = _mm256_fmadd_pd(__vc2, __oc2, __sum2);
+
77 
+
78  // Retrieve results
+
79  double sum1[4];
+
80  double sum2[4];
+
81 
+
82  _mm256_storeu_pd(sum1, __sum1);
+
83  _mm256_storeu_pd(sum2, __sum2);
+
84 
+
85  // Apply results
+
86  // Block 1
+
87  newMatrix[0][0] = sum1[3];
+
88  newMatrix[0][1] = sum1[2];
+
89  newMatrix[0][2] = sum1[1];
+
90  newMatrix[1][0] = sum1[0];
+
91 
+
92  // Block 2
+
93  newMatrix[1][1] = sum2[3];
+
94  newMatrix[1][2] = sum2[2];
+
95  newMatrix[2][0] = sum2[1];
+
96  newMatrix[2][1] = sum2[0];
+
97 
+
98  // Does not fit in the intrinsic calculation. Might just calculate 'by hand'.
+
99  newMatrix[2][2] = (v[2][0] * other[0][2]) + (v[2][1] * other[1][2]) + (v[2][2] * other[2][2]);
+
100 
+
101 
+
102  /* <= Translation component => */
+
103 
+
104  // Load translation components into registers
+
105  __m256d __transSelf = _mm256_set_pd(0, l, h, d);
+
106  __m256d __transOther = _mm256_set_pd(0, other.l, other.h, other.d);
+
107 
+
108  // Let's add them
+
109  __m256d __sum = _mm256_add_pd(__transSelf, __transOther);
+
110 
+
111  // Retrieve results
+
112  double sum[4];
+
113  _mm256_storeu_pd(sum, __sum);
+
114 
+
115  // Apply them
+
116  newMatrix.d = sum[0];
+
117  newMatrix.h = sum[1];
+
118  newMatrix.l = sum[2];
+
119 
+
120  #else
+
121 
+
122 
+
123  // Rotation, Scaling
+
124  newMatrix[0][0] = (v[0][0] * other[0][0]) + (v[0][1] * other[1][0]) + (v[0][2] * other[2][0]);
+
125  newMatrix[0][1] = (v[0][0] * other[0][1]) + (v[0][1] * other[1][1]) + (v[0][2] * other[2][1]);
+
126  newMatrix[0][2] = (v[0][0] * other[0][2]) + (v[0][1] * other[1][2]) + (v[0][2] * other[2][2]);
+
127 
+
128  newMatrix[1][0] = (v[1][0] * other[0][0]) + (v[1][1] * other[1][0]) + (v[1][2] * other[2][0]);
+
129  newMatrix[1][1] = (v[1][0] * other[0][1]) + (v[1][1] * other[1][1]) + (v[1][2] * other[2][1]);
+
130  newMatrix[1][2] = (v[1][0] * other[0][2]) + (v[1][1] * other[1][2]) + (v[1][2] * other[2][2]);
+
131 
+
132  newMatrix[2][0] = (v[2][0] * other[0][0]) + (v[2][1] * other[1][0]) + (v[2][2] * other[2][0]);
+
133  newMatrix[2][1] = (v[2][0] * other[0][1]) + (v[2][1] * other[1][1]) + (v[2][2] * other[2][1]);
+
134  newMatrix[2][2] = (v[2][0] * other[0][2]) + (v[2][1] * other[1][2]) + (v[2][2] * other[2][2]);
+
135 
+
136 
+
137  // Translation
+
138  newMatrix[0][3] = v[0][3] + other[0][3];
+
139  newMatrix[1][3] = v[1][3] + other[1][3];
+
140  newMatrix[2][3] = v[2][3] + other[2][3];
+
141 
+
142  #endif
+
143 
+
144  return newMatrix;
+
145 }
+
+
+
+ +

◆ operator*=() [1/2]

+ +
+
+ + + + + + + + +
void Matrix4x4::operator*= (const double scalar)
+
+ +

Cellwise scaling.

+ +

Definition at line 202 of file Matrix4x4.cpp.

+
203 {
+
204  *this = *this * scalar;
+
205  return;
+
206 }
+
+
+
+ +

◆ operator*=() [2/2]

+ +
+
+ + + + + + + + +
void Matrix4x4::operator*= (const Matrix4x4other)
+
+ +

Definition at line 147 of file Matrix4x4.cpp.

+
148 {
+
149  *this = *this * other;
+
150  return;
+
151 }
+
+
+
+ +

◆ operator+()

+ +
+
+ + + + + + + + +
Matrix4x4 Matrix4x4::operator+ (const Matrix4x4other) const
+
+ +

Cellwise addition.

+ +

Definition at line 221 of file Matrix4x4.cpp.

+
222 {
+
223  Matrix4x4 m;
+
224 
+
225  #ifndef _EULE_NO_INTRINSICS_
+
226 
+
227  // Load matrix rows
+
228  __m256d __row0a = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
229  __m256d __row1a = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
230  __m256d __row2a = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
231  __m256d __row3a = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
232 
+
233  __m256d __row0b = _mm256_set_pd(other[0][3], other[0][2], other[0][1], other[0][0]);
+
234  __m256d __row1b = _mm256_set_pd(other[1][3], other[1][2], other[1][1], other[1][0]);
+
235  __m256d __row2b = _mm256_set_pd(other[2][3], other[2][2], other[2][1], other[2][0]);
+
236  __m256d __row3b = _mm256_set_pd(other[3][3], other[3][2], other[3][1], other[3][0]);
+
237 
+
238  // Add rows
+
239  __m256d __sr0 = _mm256_add_pd(__row0a, __row0b);
+
240  __m256d __sr1 = _mm256_add_pd(__row1a, __row1b);
+
241  __m256d __sr2 = _mm256_add_pd(__row2a, __row2b);
+
242  __m256d __sr3 = _mm256_add_pd(__row3a, __row3b);
+
243 
+
244  // Extract results
+
245  _mm256_storeu_pd(m.v[0].data(), __sr0);
+
246  _mm256_storeu_pd(m.v[1].data(), __sr1);
+
247  _mm256_storeu_pd(m.v[2].data(), __sr2);
+
248  _mm256_storeu_pd(m.v[3].data(), __sr3);
+
249 
+
250  #else
+
251 
+
252  for (std::size_t x = 0; x < 4; x++)
+
253  for (std::size_t y = 0; y < 4; y++)
+
254  m[x][y] = v[x][y] + other[x][y];
+
255 
+
256  #endif
+
257 
+
258  return m;
+
259 }
+
+
+
+ +

◆ operator+=()

+ +
+
+ + + + + + + + +
void Matrix4x4::operator+= (const Matrix4x4other)
+
+ +

Cellwise addition.

+ +

Definition at line 261 of file Matrix4x4.cpp.

+
262 {
+
263  #ifndef _EULE_NO_INTRINSICS_
+
264  // Doing it again is a tad directer, and thus faster. We avoid an intermittent Matrix4x4 instance
+
265 
+
266  // Load matrix rows
+
267  __m256d __row0a = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
268  __m256d __row1a = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
269  __m256d __row2a = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
270  __m256d __row3a = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
271 
+
272  __m256d __row0b = _mm256_set_pd(other[0][3], other[0][2], other[0][1], other[0][0]);
+
273  __m256d __row1b = _mm256_set_pd(other[1][3], other[1][2], other[1][1], other[1][0]);
+
274  __m256d __row2b = _mm256_set_pd(other[2][3], other[2][2], other[2][1], other[2][0]);
+
275  __m256d __row3b = _mm256_set_pd(other[3][3], other[3][2], other[3][1], other[3][0]);
+
276 
+
277  // Add rows
+
278  __m256d __sr0 = _mm256_add_pd(__row0a, __row0b);
+
279  __m256d __sr1 = _mm256_add_pd(__row1a, __row1b);
+
280  __m256d __sr2 = _mm256_add_pd(__row2a, __row2b);
+
281  __m256d __sr3 = _mm256_add_pd(__row3a, __row3b);
+
282 
+
283  // Extract results
+
284  _mm256_storeu_pd(v[0].data(), __sr0);
+
285  _mm256_storeu_pd(v[1].data(), __sr1);
+
286  _mm256_storeu_pd(v[2].data(), __sr2);
+
287  _mm256_storeu_pd(v[3].data(), __sr3);
+
288 
+
289  #else
+
290 
+
291  *this = *this + other;
+
292 
+
293  #endif
+
294 
+
295  return;
+
296 }
+
+
+
+ +

◆ operator-()

+ +
+
+ + + + + + + + +
Matrix4x4 Matrix4x4::operator- (const Matrix4x4other) const
+
+ +

Cellwise subtraction.

+ +

Definition at line 298 of file Matrix4x4.cpp.

+
299 {
+
300  Matrix4x4 m;
+
301 
+
302  #ifndef _EULE_NO_INTRINSICS_
+
303 
+
304  // Load matrix rows
+
305  __m256d __row0a = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
306  __m256d __row1a = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
307  __m256d __row2a = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
308  __m256d __row3a = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
309 
+
310  __m256d __row0b = _mm256_set_pd(other[0][3], other[0][2], other[0][1], other[0][0]);
+
311  __m256d __row1b = _mm256_set_pd(other[1][3], other[1][2], other[1][1], other[1][0]);
+
312  __m256d __row2b = _mm256_set_pd(other[2][3], other[2][2], other[2][1], other[2][0]);
+
313  __m256d __row3b = _mm256_set_pd(other[3][3], other[3][2], other[3][1], other[3][0]);
+
314 
+
315  // Subtract rows
+
316  __m256d __sr0 = _mm256_sub_pd(__row0a, __row0b);
+
317  __m256d __sr1 = _mm256_sub_pd(__row1a, __row1b);
+
318  __m256d __sr2 = _mm256_sub_pd(__row2a, __row2b);
+
319  __m256d __sr3 = _mm256_sub_pd(__row3a, __row3b);
+
320 
+
321  // Extract results
+
322  _mm256_storeu_pd(m.v[0].data(), __sr0);
+
323  _mm256_storeu_pd(m.v[1].data(), __sr1);
+
324  _mm256_storeu_pd(m.v[2].data(), __sr2);
+
325  _mm256_storeu_pd(m.v[3].data(), __sr3);
+
326 
+
327  #else
+
328 
+
329  for (std::size_t x = 0; x < 4; x++)
+
330  for (std::size_t y = 0; y < 4; y++)
+
331  m[x][y] = v[x][y] - other[x][y];
+
332 
+
333  #endif
+
334 
+
335  return m;
+
336 }
+
+
+
+ +

◆ operator-=()

+ +
+
+ + + + + + + + +
void Matrix4x4::operator-= (const Matrix4x4other)
+
+ +

Cellwise subtraction.

+ +

Definition at line 338 of file Matrix4x4.cpp.

+
339 {
+
340  #ifndef _EULE_NO_INTRINSICS_
+
341  // Doing it again is a tad directer, and thus faster. We avoid an intermittent Matrix4x4 instance
+
342 
+
343  // Load matrix rows
+
344  __m256d __row0a = _mm256_set_pd(v[0][3], v[0][2], v[0][1], v[0][0]);
+
345  __m256d __row1a = _mm256_set_pd(v[1][3], v[1][2], v[1][1], v[1][0]);
+
346  __m256d __row2a = _mm256_set_pd(v[2][3], v[2][2], v[2][1], v[2][0]);
+
347  __m256d __row3a = _mm256_set_pd(v[3][3], v[3][2], v[3][1], v[3][0]);
+
348 
+
349  __m256d __row0b = _mm256_set_pd(other[0][3], other[0][2], other[0][1], other[0][0]);
+
350  __m256d __row1b = _mm256_set_pd(other[1][3], other[1][2], other[1][1], other[1][0]);
+
351  __m256d __row2b = _mm256_set_pd(other[2][3], other[2][2], other[2][1], other[2][0]);
+
352  __m256d __row3b = _mm256_set_pd(other[3][3], other[3][2], other[3][1], other[3][0]);
+
353 
+
354  // Subtract rows
+
355  __m256d __sr0 = _mm256_sub_pd(__row0a, __row0b);
+
356  __m256d __sr1 = _mm256_sub_pd(__row1a, __row1b);
+
357  __m256d __sr2 = _mm256_sub_pd(__row2a, __row2b);
+
358  __m256d __sr3 = _mm256_sub_pd(__row3a, __row3b);
+
359 
+
360  // Extract results
+
361  _mm256_storeu_pd(v[0].data(), __sr0);
+
362  _mm256_storeu_pd(v[1].data(), __sr1);
+
363  _mm256_storeu_pd(v[2].data(), __sr2);
+
364  _mm256_storeu_pd(v[3].data(), __sr3);
+
365 
+
366  #else
+
367 
+
368  * this = *this - other;
+
369 
+
370  #endif
+
371 
+
372  return;
+
373 }
+
+
+
+ +

◆ operator/() [1/2]

+ +
+
+ + + + + + + + +
Matrix4x4 Matrix4x4::operator/ (const double denominator) const
+
+ +

Cellwise division.

+ +

Definition at line 208 of file Matrix4x4.cpp.

+
209 {
+
210  const double precomputeDivision = 1.0 / denominator;
+
211 
+
212  return *this * precomputeDivision;
+
213 }
+
+
+
+ +

◆ operator/() [2/2]

+ +
+
+ + + + + + + + +
Matrix4x4 Matrix4x4::operator/ (const Matrix4x4other) const
+
+ +

Definition at line 153 of file Matrix4x4.cpp.

+
154 {
+
155  return *this * other.Inverse3x3();
+
156 }
+
+
+
+ +

◆ operator/=() [1/2]

+ +
+
+ + + + + + + + +
void Matrix4x4::operator/= (const double denominator)
+
+ +

Cellwise division.

+ +

Definition at line 215 of file Matrix4x4.cpp.

+
216 {
+
217  *this = *this / denominator;
+
218  return;
+
219 }
+
+
+
+ +

◆ operator/=() [2/2]

+ +
+
+ + + + + + + + +
void Matrix4x4::operator/= (const Matrix4x4other)
+
+ +

Definition at line 158 of file Matrix4x4.cpp.

+
159 {
+
160  *this = *this * other.Inverse3x3();
+
161  return;
+
162 }
+
+
+
+ +

◆ operator=() [1/2]

+ +
+
+ + + + + + + + +
void Matrix4x4::operator= (const Matrix4x4other)
+
+ +

Definition at line 385 of file Matrix4x4.cpp.

+
386 {
+
387  v = other.v;
+
388  return;
+
389 }
+
+
+
+ +

◆ operator=() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void Matrix4x4::operator= (Matrix4x4 && other)
+
+noexcept
+
+ +

Definition at line 391 of file Matrix4x4.cpp.

+
392 {
+
393  v = std::move(other.v);
+
394  return;
+
395 }
+
+
+
+ +

◆ operator==()

+ +
+
+ + + + + + + + +
bool Matrix4x4::operator== (const Matrix4x4other)
+
+ +

Definition at line 397 of file Matrix4x4.cpp.

+
398 {
+
399  return v == other.v;
+
400 }
+
+
+
+ +

◆ operator[]() [1/2]

+ +
+
+ + + + + + + + +
std::array< double, 4 > & Matrix4x4::operator[] (std::size_t y)
+
+ +

Definition at line 375 of file Matrix4x4.cpp.

+
376 {
+
377  return v[y];
+
378 }
+
+
+
+ +

◆ operator[]() [2/2]

+ +
+
+ + + + + + + + +
const std::array< double, 4 > & Matrix4x4::operator[] (std::size_t y) const
+
+ +

Definition at line 380 of file Matrix4x4.cpp.

+
381 {
+
382  return v[y];
+
383 }
+
+
+
+ +

◆ SetTranslationComponent()

+ +
+
+ + + + + + + + +
void Matrix4x4::SetTranslationComponent (const Vector3dtrans)
+
+ +

Will set d,h,l from a Vector3d(x,y,z)

+ +

Definition at line 412 of file Matrix4x4.cpp.

+
413 {
+
414  d = trans.x;
+
415  h = trans.y;
+
416  l = trans.z;
+
417  return;
+
418 }
+
+
+
+ +

◆ Similar()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool Matrix4x4::Similar (const Matrix4x4other,
double epsilon = 0.00001 
) const
+
+ +

Will compare if two matrices are similar to a certain epsilon value.

+ +

Definition at line 608 of file Matrix4x4.cpp.

+
609 {
+
610  for (std::size_t i = 0; i < 4; i++)
+
611  for (std::size_t j = 0; j < 4; j++)
+
612  if (!Math::Similar(v[i][j], other[i][j], epsilon))
+
613  return false;
+
614 
+
615  return true;
+
616 }
+
+
+
+ +

◆ Transpose3x3()

+ +
+
+ + + + + + + +
Matrix4x4 Matrix4x4::Transpose3x3 () const
+
+ +

Will return the 3x3 transpose of this matrix.

+ +

Definition at line 429 of file Matrix4x4.cpp.

+
430 {
+
431  Matrix4x4 trans(*this); // Keep other cells
+
432 
+
433  for (std::size_t i = 0; i < 3; i++)
+
434  for (std::size_t j = 0; j < 3; j++)
+
435  trans[j][i] = v[i][j];
+
436 
+
437  return trans;
+
438 }
+
+
+
+ +

◆ Transpose4x4()

+ +
+
+ + + + + + + +
Matrix4x4 Matrix4x4::Transpose4x4 () const
+
+ +

Will return the 4x4 transpose of this matrix.

+ +

Definition at line 440 of file Matrix4x4.cpp.

+
441 {
+
442  Matrix4x4 trans;
+
443 
+
444  for (std::size_t i = 0; i < 4; i++)
+
445  for (std::size_t j = 0; j < 4; j++)
+
446  trans[j][i] = v[i][j];
+
447 
+
448  return trans;
+
449 }
+
+
+
+

Friends And Related Function Documentation

+ +

◆ operator<< [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & os,
const Matrix4x4m 
)
+
+friend
+
+ +

Definition at line 620 of file Matrix4x4.cpp.

+
621  {
+
622  os << std::endl;
+
623 
+
624  for (std::size_t y = 0; y < 4; y++)
+
625  {
+
626  for (std::size_t x = 0; x < 4; x++)
+
627  os << " | " << m[y][x];
+
628 
+
629  os << " |" << std::endl;
+
630  }
+
631 
+
632  return os;
+
633  }
+
+
+
+ +

◆ operator<< [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::wostream& operator<< (std::wostream & os,
const Matrix4x4m 
)
+
+friend
+
+ +

Definition at line 635 of file Matrix4x4.cpp.

+
636  {
+
637  os << std::endl;
+
638 
+
639  for (std::size_t y = 0; y < 4; y++)
+
640  {
+
641  for (std::size_t x = 0; x < 4; x++)
+
642  os << L" | " << m[y][x];
+
643 
+
644  os << L" |" << std::endl;
+
645  }
+
646 
+
647  return os;
+
648  }
+
+
+
+

Member Data Documentation

+ +

◆ a

+ +
+
+ + + + +
double& Eule::Matrix4x4::a = v[0][0]
+
+ +

Definition at line 128 of file Matrix4x4.h.

+ +
+
+ +

◆ b

+ +
+
+ + + + +
double& Eule::Matrix4x4::b = v[0][1]
+
+ +

Definition at line 129 of file Matrix4x4.h.

+ +
+
+ +

◆ c

+ +
+
+ + + + +
double& Eule::Matrix4x4::c = v[0][2]
+
+ +

Definition at line 130 of file Matrix4x4.h.

+ +
+
+ +

◆ d

+ +
+
+ + + + +
double& Eule::Matrix4x4::d = v[0][3]
+
+ +

Definition at line 131 of file Matrix4x4.h.

+ +
+
+ +

◆ e

+ +
+
+ + + + +
double& Eule::Matrix4x4::e = v[1][0]
+
+ +

Definition at line 132 of file Matrix4x4.h.

+ +
+
+ +

◆ f

+ +
+
+ + + + +
double& Eule::Matrix4x4::f = v[1][1]
+
+ +

Definition at line 133 of file Matrix4x4.h.

+ +
+
+ +

◆ g

+ +
+
+ + + + +
double& Eule::Matrix4x4::g = v[1][2]
+
+ +

Definition at line 134 of file Matrix4x4.h.

+ +
+
+ +

◆ h

+ +
+
+ + + + +
double& Eule::Matrix4x4::h = v[1][3]
+
+ +

Definition at line 135 of file Matrix4x4.h.

+ +
+
+ +

◆ i

+ +
+
+ + + + +
double& Eule::Matrix4x4::i = v[2][0]
+
+ +

Definition at line 136 of file Matrix4x4.h.

+ +
+
+ +

◆ j

+ +
+
+ + + + +
double& Eule::Matrix4x4::j = v[2][1]
+
+ +

Definition at line 137 of file Matrix4x4.h.

+ +
+
+ +

◆ k

+ +
+
+ + + + +
double& Eule::Matrix4x4::k = v[2][2]
+
+ +

Definition at line 138 of file Matrix4x4.h.

+ +
+
+ +

◆ l

+ +
+
+ + + + +
double& Eule::Matrix4x4::l = v[2][3]
+
+ +

Definition at line 139 of file Matrix4x4.h.

+ +
+
+ +

◆ m

+ +
+
+ + + + +
double& Eule::Matrix4x4::m = v[3][0]
+
+ +

Definition at line 140 of file Matrix4x4.h.

+ +
+
+ +

◆ n

+ +
+
+ + + + +
double& Eule::Matrix4x4::n = v[3][1]
+
+ +

Definition at line 141 of file Matrix4x4.h.

+ +
+
+ +

◆ o

+ +
+
+ + + + +
double& Eule::Matrix4x4::o = v[3][2]
+
+ +

Definition at line 142 of file Matrix4x4.h.

+ +
+
+ +

◆ p

+ +
+
+ + + + +
double& Eule::Matrix4x4::p = v[3][3]
+
+ +

Definition at line 143 of file Matrix4x4.h.

+ +
+
+ +

◆ v

+ +
+
+ + + + +
std::array<std::array<double, 4>, 4> Eule::Matrix4x4::v
+
+ +

Array holding the matrices values.

+ +

Definition at line 44 of file Matrix4x4.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
double & j
Definition: Matrix4x4.h:137
+
Matrix4x4 Adjoint(std::size_t n) const
Will return the adjoint of this matrix, by dimension n.
Definition: Matrix4x4.cpp:533
+
bool operator==(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:397
+
double & i
Definition: Matrix4x4.h:136
+
double & e
Definition: Matrix4x4.h:132
+
double & f
Definition: Matrix4x4.h:133
+
Matrix4x4 Inverse3x3() const
Will return the 3x3-inverse of this matrix.
Definition: Matrix4x4.cpp:558
+
double & k
Definition: Matrix4x4.h:138
+
std::array< std::array< double, 4 >, 4 > v
Array holding the matrices values.
Definition: Matrix4x4.h:44
+
Vector3< double > Vector3d
Definition: Matrix4x4.h:9
+ +
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
double & b
Definition: Matrix4x4.h:129
+
double & g
Definition: Matrix4x4.h:134
+ +
double & p
Definition: Matrix4x4.h:143
+
double & l
Definition: Matrix4x4.h:139
+
double Determinant(std::size_t n) const
Will return the determinant, by dimension n.
Definition: Matrix4x4.cpp:511
+
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
void SetTranslationComponent(const Vector3d &trans)
Will set d,h,l from a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:412
+
double & c
Definition: Matrix4x4.h:130
+
double & o
Definition: Matrix4x4.h:142
+
double & a
Definition: Matrix4x4.h:128
+
double & m
Definition: Matrix4x4.h:140
+
Matrix4x4 GetCofactors(std::size_t p, std::size_t q, std::size_t n) const
Will return the cofactors of this matrix, by dimension n.
Definition: Matrix4x4.cpp:478
+
const Vector3d GetTranslationComponent() const
Will return d,h,l as a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:407
+
double & n
Definition: Matrix4x4.h:141
+
double & h
Definition: Matrix4x4.h:135
+
double & d
Definition: Matrix4x4.h:131
+ + + + + diff --git a/Doxygen/build/classEule_1_1Quaternion-members.html b/Doxygen/build/classEule_1_1Quaternion-members.html new file mode 100644 index 0000000..4fd53f9 --- /dev/null +++ b/Doxygen/build/classEule_1_1Quaternion-members.html @@ -0,0 +1,116 @@ + + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule::Quaternion Member List
+
+
+ +

This is the complete list of members for Eule::Quaternion, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AngleBetween(const Quaternion &other) constEule::Quaternion
Conjugate() constEule::Quaternion
GetRawValues() constEule::Quaternion
Inverse() constEule::Quaternion
Lerp(const Quaternion &other, double t) constEule::Quaternion
operator!=(const Quaternion &q) constEule::Quaternion
operator*(const Quaternion &q) constEule::Quaternion
operator*(const Vector3d &p) constEule::Quaternion
operator*=(const Quaternion &q)Eule::Quaternion
operator/(Quaternion &q) constEule::Quaternion
operator/=(const Quaternion &q)Eule::Quaternion
operator<<(std::ostream &os, const Quaternion &q)Eule::Quaternionfriend
operator<<(std::wostream &os, const Quaternion &q)Eule::Quaternionfriend
operator=(const Quaternion &q)Eule::Quaternion
operator==(const Quaternion &q) constEule::Quaternion
Quaternion()Eule::Quaternion
Quaternion(const Vector4d values)Eule::Quaternionexplicit
Quaternion(const Quaternion &q)Eule::Quaternion
Quaternion(const Vector3d eulerAngles)Eule::Quaternion
RotateVector(const Vector3d &vec) constEule::Quaternion
SetRawValues(const Vector4d values)Eule::Quaternion
ToEulerAngles() constEule::Quaternion
ToRotationMatrix() constEule::Quaternion
UnitQuaternion() constEule::Quaternion
~Quaternion()Eule::Quaternion
+ + + + diff --git a/Doxygen/build/classEule_1_1Quaternion.html b/Doxygen/build/classEule_1_1Quaternion.html new file mode 100644 index 0000000..3a241ce --- /dev/null +++ b/Doxygen/build/classEule_1_1Quaternion.html @@ -0,0 +1,1044 @@ + + + + + + + +Leonetienne/Eule: Eule::Quaternion Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Eule::Quaternion Class Reference
+
+
+ +

3D rotation representation + More...

+ +

#include <Quaternion.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Quaternion ()
 
 Quaternion (const Vector4d values)
 Constructs by these raw values. More...
 
 Quaternion (const Quaternion &q)
 Copies this existing Quaternion. More...
 
 Quaternion (const Vector3d eulerAngles)
 Creates an quaternion from euler angles. More...
 
 ~Quaternion ()
 
Quaternion operator= (const Quaternion &q)
 Copies. More...
 
Quaternion operator* (const Quaternion &q) const
 Multiplies (applies) More...
 
Quaternion operator/ (Quaternion &q) const
 Divides (applies) More...
 
Quaternionoperator*= (const Quaternion &q)
 Also multiplies. More...
 
Quaternionoperator/= (const Quaternion &q)
 Also divides. More...
 
Vector3d operator* (const Vector3d &p) const
 Will transform a 3d point around its origin. More...
 
bool operator== (const Quaternion &q) const
 
bool operator!= (const Quaternion &q) const
 
Quaternion Inverse () const
 
Quaternion Conjugate () const
 
Quaternion UnitQuaternion () const
 
Vector3d RotateVector (const Vector3d &vec) const
 Will rotate a vector by this quaternion. More...
 
Vector3d ToEulerAngles () const
 Will return euler angles representing this Quaternion's rotation. More...
 
Matrix4x4 ToRotationMatrix () const
 Will return a rotation matrix representing this Quaternions rotation. More...
 
Vector4d GetRawValues () const
 Will return the raw four-dimensional values. More...
 
Quaternion AngleBetween (const Quaternion &other) const
 Will return the value between two Quaternion's as another Quaternion. More...
 
void SetRawValues (const Vector4d values)
 Will set the raw four-dimensional values. More...
 
Quaternion Lerp (const Quaternion &other, double t) const
 Will return the lerp result between two quaternions. More...
 
+ + + + + +

+Friends

std::ostream & operator<< (std::ostream &os, const Quaternion &q)
 
std::wostream & operator<< (std::wostream &os, const Quaternion &q)
 
+

Detailed Description

+

3D rotation representation

+ +

Definition at line 10 of file Quaternion.h.

+

Constructor & Destructor Documentation

+ +

◆ Quaternion() [1/4]

+ +
+
+ + + + + + + +
Quaternion::Quaternion ()
+
+ +

Definition at line 11 of file Quaternion.cpp.

+
12 {
+
13  v = Vector4d(0, 0, 0, 1);
+
14  return;
+
15 }
+
+
+
+ +

◆ Quaternion() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + +
Quaternion::Quaternion (const Vector4d values)
+
+explicit
+
+ +

Constructs by these raw values.

+ +

Definition at line 17 of file Quaternion.cpp.

+
18 {
+
19  v = values;
+
20  return;
+
21 }
+
+
+
+ +

◆ Quaternion() [3/4]

+ +
+
+ + + + + + + + +
Quaternion::Quaternion (const Quaternionq)
+
+ +

Copies this existing Quaternion.

+ +

Definition at line 23 of file Quaternion.cpp.

+
24 {
+
25  v = q.v;
+
26  return;
+
27 }
+
+
+
+ +

◆ Quaternion() [4/4]

+ +
+
+ + + + + + + + +
Quaternion::Quaternion (const Vector3d eulerAngles)
+
+ +

Creates an quaternion from euler angles.

+ +

Definition at line 29 of file Quaternion.cpp.

+
30 {
+
31  Vector3d eulerRad = eulerAngles * Deg2Rad;
+
32 
+
33  #ifndef _EULE_NO_INTRINSICS_
+
34 
+
35  // Calculate sine and cos values
+
36  __m256d __vec = _mm256_set_pd(0, eulerRad.z, eulerRad.y, eulerRad.x);
+
37  __vec = _mm256_mul_pd(__vec, _mm256_set1_pd(0.5));
+
38  __m256d __cos;
+
39  __m256d __sin = _mm256_sincos_pd(&__cos, __vec);
+
40 
+
41  // Create multiplication vectors
+
42  double sin[4];
+
43  double cos[4];
+
44 
+
45  _mm256_storeu_pd(sin, __sin);
+
46  _mm256_storeu_pd(cos, __cos);
+
47 
+
48  __m256d __a = _mm256_set_pd(cos[0], cos[0], sin[0], cos[0]);
+
49  __m256d __b = _mm256_set_pd(cos[1], sin[1], cos[1], cos[1]);
+
50  __m256d __c = _mm256_set_pd(sin[2], cos[2], cos[2], cos[2]);
+
51 
+
52  __m256d __d = _mm256_set_pd(sin[0], sin[0], cos[0], sin[0]);
+
53  __m256d __e = _mm256_set_pd(sin[1], cos[1], sin[1], sin[1]);
+
54  __m256d __f = _mm256_set_pd(cos[2], sin[2], sin[2], sin[2]);
+
55 
+
56  // Multiply them
+
57  __m256d __abc;
+
58  __abc = _mm256_mul_pd(__a, __b);
+
59  __abc = _mm256_mul_pd(__abc, __c);
+
60 
+
61  __m256d __def;
+
62  __def = _mm256_mul_pd(__d, __e);
+
63  __def = _mm256_mul_pd(__def, __f);
+
64 
+
65  // Extract results
+
66  double abc[4];
+
67  double def[4];
+
68 
+
69  _mm256_storeu_pd(abc, __abc);
+
70  _mm256_storeu_pd(def, __def);
+
71 
+
72  // Sum them up
+
73  v.w = abc[0] + def[0];
+
74  v.x = abc[1] - def[1];
+
75  v.y = abc[2] + def[2];
+
76  v.z = abc[3] - def[3];
+
77 
+
78  #else
+
79 
+
80  const double cy = cos(eulerRad.z * 0.5);
+
81  const double sy = sin(eulerRad.z * 0.5);
+
82  const double cp = cos(eulerRad.y * 0.5);
+
83  const double sp = sin(eulerRad.y * 0.5);
+
84  const double cr = cos(eulerRad.x * 0.5);
+
85  const double sr = sin(eulerRad.x * 0.5);
+
86 
+
87  v.w = cr * cp * cy + sr * sp * sy;
+
88  v.x = sr * cp * cy - cr * sp * sy;
+
89  v.y = cr * sp * cy + sr * cp * sy;
+
90  v.z = cr * cp * sy - sr * sp * cy;
+
91 
+
92  #endif
+
93 
+
94  return;
+
95 }
+
+
+
+ +

◆ ~Quaternion()

+ +
+
+ + + + + + + +
Quaternion::~Quaternion ()
+
+ +

Definition at line 97 of file Quaternion.cpp.

+
98 {
+
99  return;
+
100 }
+
+
+
+

Member Function Documentation

+ +

◆ AngleBetween()

+ +
+
+ + + + + + + + +
Quaternion Quaternion::AngleBetween (const Quaternionother) const
+
+ +

Will return the value between two Quaternion's as another Quaternion.

+ +

Definition at line 295 of file Quaternion.cpp.

+
296 {
+
297  return other * Conjugate();
+
298 }
+
+
+
+ +

◆ Conjugate()

+ +
+
+ + + + + + + +
Quaternion Quaternion::Conjugate () const
+
+ +

Definition at line 187 of file Quaternion.cpp.

+
188 {
+
189  return Quaternion(Vector4d(-v.x, -v.y, -v.z, v.w));
+
190 }
+
+
+
+ +

◆ GetRawValues()

+ +
+
+ + + + + + + +
Vector4d Quaternion::GetRawValues () const
+
+ +

Will return the raw four-dimensional values.

+ +

Definition at line 290 of file Quaternion.cpp.

+
291 {
+
292  return v;
+
293 }
+
+
+
+ +

◆ Inverse()

+ +
+
+ + + + + + + +
Quaternion Quaternion::Inverse () const
+
+ +

Definition at line 175 of file Quaternion.cpp.

+
176 {
+
177  if (!isCacheUpToDate_inverse)
+
178  {
+
179  cache_inverse = (Conjugate() * (1.0 / v.SqrMagnitude())).v;
+
180 
+
181  isCacheUpToDate_inverse = true;
+
182  }
+
183 
+
184  return Quaternion(cache_inverse);
+
185 }
+
+
+
+ +

◆ Lerp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Quaternion Quaternion::Lerp (const Quaternionother,
double t 
) const
+
+ +

Will return the lerp result between two quaternions.

+ +

Definition at line 309 of file Quaternion.cpp.

+
310 {
+
311  return Quaternion(v.Lerp(other.v, t)).UnitQuaternion();
+
312 }
+
+
+
+ +

◆ operator!=()

+ +
+
+ + + + + + + + +
bool Quaternion::operator!= (const Quaternionq) const
+
+ +

Definition at line 170 of file Quaternion.cpp.

+
171 {
+
172  return (!v.Similar(q.v)) && (!v.Similar(q.v * -1));
+
173 }
+
+
+
+ +

◆ operator*() [1/2]

+ +
+
+ + + + + + + + +
Quaternion Quaternion::operator* (const Quaternionq) const
+
+ +

Multiplies (applies)

+ +

Definition at line 111 of file Quaternion.cpp.

+
112 {
+
113  return Quaternion(Vector4d(
+
114  v.w * q.v.x + v.x * q.v.w + v.y * q.v.z - v.z * q.v.y,
+
115  v.w * q.v.y + v.y * q.v.w + v.z * q.v.x - v.x * q.v.z,
+
116  v.w * q.v.z + v.z * q.v.w + v.x * q.v.y - v.y * q.v.x,
+
117  v.w * q.v.w - v.x * q.v.x - v.y * q.v.y - v.z * q.v.z
+
118  ));
+
119 }
+
+
+
+ +

◆ operator*() [2/2]

+ +
+
+ + + + + + + + +
Vector3d Quaternion::operator* (const Vector3dp) const
+
+ +

Will transform a 3d point around its origin.

+ +

Definition at line 160 of file Quaternion.cpp.

+
161 {
+
162  return RotateVector(p);
+
163 }
+
+
+
+ +

◆ operator*=()

+ +
+
+ + + + + + + + +
Quaternion & Quaternion::operator*= (const Quaternionq)
+
+ +

Also multiplies.

+ +

Definition at line 131 of file Quaternion.cpp.

+
132 {
+
133  InvalidateCache();
+
134 
+
135  Vector4d bufr = v;
+
136  v.x = bufr.w * q.v.x + bufr.x * q.v.w + bufr.y * q.v.z - bufr.z * q.v.y; // x
+
137  v.y = bufr.w * q.v.y + bufr.y * q.v.w + bufr.z * q.v.x - bufr.x * q.v.z; // y
+
138  v.z = bufr.w * q.v.z + bufr.z * q.v.w + bufr.x * q.v.y - bufr.y * q.v.x; // z
+
139  v.w = bufr.w * q.v.w - bufr.x * q.v.x - bufr.y * q.v.y - bufr.z * q.v.z; // w
+
140 
+
141  return (*this);
+
142 }
+
+
+
+ +

◆ operator/()

+ +
+
+ + + + + + + + +
Quaternion Quaternion::operator/ (Quaternionq) const
+
+ +

Divides (applies)

+ +

Definition at line 126 of file Quaternion.cpp.

+
127 {
+
128  return ((*this) * (q.Inverse()));
+
129 }
+
+
+
+ +

◆ operator/=()

+ +
+
+ + + + + + + + +
Quaternion & Quaternion::operator/= (const Quaternionq)
+
+ +

Also divides.

+ +

Definition at line 152 of file Quaternion.cpp.

+
153 {
+
154  InvalidateCache();
+
155 
+
156  (*this) = (*this) * q.Inverse();
+
157  return (*this);
+
158 }
+
+
+
+ +

◆ operator=()

+ +
+
+ + + + + + + + +
Quaternion Quaternion::operator= (const Quaternionq)
+
+ +

Copies.

+ +

Definition at line 102 of file Quaternion.cpp.

+
103 {
+
104  InvalidateCache();
+
105 
+
106  v = q.v;
+
107 
+
108  return (*this);
+
109 }
+
+
+
+ +

◆ operator==()

+ +
+
+ + + + + + + + +
bool Quaternion::operator== (const Quaternionq) const
+
+ +

Definition at line 165 of file Quaternion.cpp.

+
166 {
+
167  return (v.Similar(q.v)) || (v.Similar(q.v * -1));
+
168 }
+
+
+
+ +

◆ RotateVector()

+ +
+
+ + + + + + + + +
Vector3d Quaternion::RotateVector (const Vector3dvec) const
+
+ +

Will rotate a vector by this quaternion.

+ +

Definition at line 197 of file Quaternion.cpp.

+
198 {
+
199  Quaternion pure(Vector4d(vec.x, vec.y, vec.z, 0));
+
200 
+
201  //Quaternion f = Conjugate() * pure * (*this);
+
202  //Quaternion f = Inverse().Conjugate() * pure * (this->Inverse());
+
203 
+
204 
+
205  Quaternion f = Inverse() * pure * (*this);
+
206 
+
207  Vector3d toRet;
+
208  toRet.x = f.v.x;
+
209  toRet.y = f.v.y;
+
210  toRet.z = f.v.z;
+
211 
+
212  return toRet;
+
213 }
+
+
+
+ +

◆ SetRawValues()

+ +
+
+ + + + + + + + +
void Quaternion::SetRawValues (const Vector4d values)
+
+ +

Will set the raw four-dimensional values.

+ +

Definition at line 300 of file Quaternion.cpp.

+
301 {
+
302  InvalidateCache();
+
303 
+
304  v = values;
+
305 
+
306  return;
+
307 }
+
+
+
+ +

◆ ToEulerAngles()

+ +
+
+ + + + + + + +
Vector3d Quaternion::ToEulerAngles () const
+
+ +

Will return euler angles representing this Quaternion's rotation.

+ +

Definition at line 215 of file Quaternion.cpp.

+
216 {
+
217  if (!isCacheUpToDate_euler)
+
218  {
+
219  Vector3d euler;
+
220  // roll (x-axis rotation)
+
221  double sinr_cosp = 2.0 * (v.w * v.x + v.y * v.z);
+
222  double cosr_cosp = 1.0 - 2.0 * (v.x * v.x + v.y * v.y);
+
223  euler.x = std::atan2(sinr_cosp, cosr_cosp);
+
224 
+
225  // pitch (y-axis rotation)
+
226  double sinp = 2.0 * (v.w * v.y - v.z * v.x);
+
227  if (std::abs(sinp) >= 1)
+
228  euler.y = std::copysign(PI / 2, sinp); // use 90 degrees if out of range
+
229  else
+
230  euler.y = std::asin(sinp);
+
231 
+
232  // yaw (z-axis rotation)
+
233  double siny_cosp = 2.0 * (v.w * v.z + v.x * v.y);
+
234  double cosy_cosp = 1.0 - 2.0 * (v.y * v.y + v.z * v.z);
+
235  euler.z = std::atan2(siny_cosp, cosy_cosp);
+
236 
+
237  euler *= Rad2Deg;
+
238 
+
239  cache_euler = euler;
+
240  isCacheUpToDate_matrix = true;
+
241  }
+
242 
+
243  return cache_euler;
+
244 }
+
+
+
+ +

◆ ToRotationMatrix()

+ +
+
+ + + + + + + +
Matrix4x4 Quaternion::ToRotationMatrix () const
+
+ +

Will return a rotation matrix representing this Quaternions rotation.

+ +

Definition at line 246 of file Quaternion.cpp.

+
247 {
+
248  if (!isCacheUpToDate_matrix)
+
249  {
+
250  Matrix4x4 m;
+
251 
+
252  const double sqx = v.x * v.x;
+
253  const double sqy = v.y * v.y;
+
254  const double sqz = v.z * v.z;
+
255  const double sqw = v.w * v.w;
+
256  const double x = v.x;
+
257  const double y = v.y;
+
258  const double z = v.z;
+
259  const double w = v.w;
+
260 
+
261  // invs (inverse square length) is only required if quaternion is not already normalised
+
262  double invs = 1.0 / (sqx + sqy + sqz + sqw);
+
263 
+
264  // since sqw + sqx + sqy + sqz =1/invs*invs
+
265 
+
266  // yaw (y)
+
267  m.c = ((2 * x * z) - (2 * w * y)) * invs;
+
268  m.f = (1 - (2 * sqx) - (2 * sqz)) * invs;
+
269  m.i = ((2 * x * z) + (2 * w * y)) * invs;
+
270 
+
271  // pitch (x)
+
272  m.a = (1 - (2 * sqy) - (2 * sqz)) * invs;
+
273  m.g = ((2 * y * z) + (2 * w * x)) * invs;
+
274  m.j = ((2 * y * z) - (2 * w * x)) * invs;
+
275 
+
276  // roll (z)
+
277  m.b = ((2 * x * v.y) + (2 * w * z)) * invs;
+
278  m.e = ((2 * x * v.y) - (2 * w * z)) * invs;
+
279  m.k = (1 - (2 * sqx) - (2 * sqy)) * invs;
+
280 
+
281  m.p = 1;
+
282 
+
283  cache_matrix = m;
+
284  isCacheUpToDate_matrix = true;
+
285  }
+
286 
+
287  return cache_matrix;
+
288 }
+
+
+
+ +

◆ UnitQuaternion()

+ +
+
+ + + + + + + +
Quaternion Quaternion::UnitQuaternion () const
+
+ +

Definition at line 192 of file Quaternion.cpp.

+
193 {
+
194  return (*this) * (1.0 / v.Magnitude());
+
195 }
+
+
+
+

Friends And Related Function Documentation

+ +

◆ operator<< [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & os,
const Quaternionq 
)
+
+friend
+
+ +

Definition at line 325 of file Quaternion.cpp.

+
326  {
+
327  os << "[" << q.v << "]";
+
328  return os;
+
329  }
+
+
+
+ +

◆ operator<< [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::wostream& operator<< (std::wostream & os,
const Quaternionq 
)
+
+friend
+
+ +

Definition at line 331 of file Quaternion.cpp.

+
332  {
+
333  os << L"[" << q.v << L"]";
+
334  return os;
+
335  }
+
+
+
+
The documentation for this class was generated from the following files: +
+
double & j
Definition: Matrix4x4.h:137
+
double & i
Definition: Matrix4x4.h:136
+ + +
double & e
Definition: Matrix4x4.h:132
+ +
Vector4< double > Vector4d
Definition: Vector4.h:107
+
#define PI
Pi up to 50 decimal places.
Definition: Constants.h:6
+
#define Deg2Rad
Factor to convert degrees to radians.
Definition: Constants.h:12
+
double & f
Definition: Matrix4x4.h:133
+
double & k
Definition: Matrix4x4.h:138
+
Vector4< double > Lerp(const Vector4< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector4.cpp:287
+ + +
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
bool Similar(const Vector4< T > &other, double epsilon=0.00001) const
Will compare if two vectors are similar to a certain epsilon value.
Definition: Vector4.cpp:162
+
double & b
Definition: Matrix4x4.h:129
+
double Magnitude() const
Will compute the magnitude.
Definition: Vector4.cpp:38
+
double & g
Definition: Matrix4x4.h:134
+ +
double & p
Definition: Matrix4x4.h:143
+
Vector3d RotateVector(const Vector3d &vec) const
Will rotate a vector by this quaternion.
Definition: Quaternion.cpp:197
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+ +
Quaternion Conjugate() const
Definition: Quaternion.cpp:187
+
Quaternion Inverse() const
Definition: Quaternion.cpp:175
+
double & c
Definition: Matrix4x4.h:130
+
3D rotation representation
Definition: Quaternion.h:10
+
double & a
Definition: Matrix4x4.h:128
+
#define Rad2Deg
Factor to convert radians to degrees.
Definition: Constants.h:15
+ + +
Representation of a 4d vector.
Definition: Vector2.h:8
+ + + + diff --git a/Doxygen/build/classEule_1_1TrapazoidalPrismCollider-members.html b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider-members.html new file mode 100644 index 0000000..f5a58fb --- /dev/null +++ b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider-members.html @@ -0,0 +1,105 @@ + + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule::TrapazoidalPrismCollider Member List
+
+
+ +

This is the complete list of members for Eule::TrapazoidalPrismCollider, including all inherited members.

+ + + + + + + + + + + + + + + +
BACKEule::TrapazoidalPrismColliderstatic
BOTTOMEule::TrapazoidalPrismColliderstatic
Contains(const Vector3d &point) const overrideEule::TrapazoidalPrismCollidervirtual
FRONTEule::TrapazoidalPrismColliderstatic
GetVertex(std::size_t index) constEule::TrapazoidalPrismCollider
LEFTEule::TrapazoidalPrismColliderstatic
operator=(const TrapazoidalPrismCollider &other)Eule::TrapazoidalPrismCollider
operator=(TrapazoidalPrismCollider &&other) noexceptEule::TrapazoidalPrismCollider
RIGHTEule::TrapazoidalPrismColliderstatic
SetVertex(std::size_t index, const Vector3d value)Eule::TrapazoidalPrismCollider
TOPEule::TrapazoidalPrismColliderstatic
TrapazoidalPrismCollider()Eule::TrapazoidalPrismCollider
TrapazoidalPrismCollider(const TrapazoidalPrismCollider &other)=defaultEule::TrapazoidalPrismCollider
TrapazoidalPrismCollider(TrapazoidalPrismCollider &&other) noexcept=defaultEule::TrapazoidalPrismCollider
+ + + + diff --git a/Doxygen/build/classEule_1_1TrapazoidalPrismCollider.html b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider.html new file mode 100644 index 0000000..7e5c566 --- /dev/null +++ b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider.html @@ -0,0 +1,544 @@ + + + + + + + +Leonetienne/Eule: Eule::TrapazoidalPrismCollider Class Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Eule::TrapazoidalPrismCollider Class Reference
+
+
+ +

A collider describing a trapazoidal prism. + More...

+ +

#include <TrapazoidalPrismCollider.h>

+
+Inheritance diagram for Eule::TrapazoidalPrismCollider:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for Eule::TrapazoidalPrismCollider:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TrapazoidalPrismCollider ()
 
 TrapazoidalPrismCollider (const TrapazoidalPrismCollider &other)=default
 
 TrapazoidalPrismCollider (TrapazoidalPrismCollider &&other) noexcept=default
 
void operator= (const TrapazoidalPrismCollider &other)
 
void operator= (TrapazoidalPrismCollider &&other) noexcept
 
const Vector3dGetVertex (std::size_t index) const
 Will return a specific vertex. More...
 
void SetVertex (std::size_t index, const Vector3d value)
 Will set the value of a specific vertex. More...
 
bool Contains (const Vector3d &point) const override
 Tests, if this Collider contains a point. More...
 
+ + + + + + + + + + + + + +

+Static Public Attributes

static constexpr std::size_t BACK = 0
 
static constexpr std::size_t FRONT = 4
 
static constexpr std::size_t LEFT = 0
 
static constexpr std::size_t RIGHT = 2
 
static constexpr std::size_t BOTTOM = 0
 
static constexpr std::size_t TOP = 1
 
+

Detailed Description

+

A collider describing a trapazoidal prism.

+

A trapazoidal prism is basically a box, but each vertex can be manipulated individually, altering the angles between faces. Distorting a 2d face into 3d space will result in undefined behaviour. Each face should stay flat, relative to itself. This shape is based on QUADS!

+ +

Definition at line 13 of file TrapazoidalPrismCollider.h.

+

Constructor & Destructor Documentation

+ +

◆ TrapazoidalPrismCollider() [1/3]

+ +
+
+ + + + + + + +
TrapazoidalPrismCollider::TrapazoidalPrismCollider ()
+
+ +

Definition at line 5 of file TrapazoidalPrismCollider.cpp.

+
6 {
+
7  return;
+
8 }
+
+
+
+ +

◆ TrapazoidalPrismCollider() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + +
Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider (const TrapazoidalPrismColliderother)
+
+default
+
+ +
+
+ +

◆ TrapazoidalPrismCollider() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + +
Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider (TrapazoidalPrismCollider && other)
+
+defaultnoexcept
+
+ +
+
+

Member Function Documentation

+ +

◆ Contains()

+ +
+
+ + + + + +
+ + + + + + + + +
bool TrapazoidalPrismCollider::Contains (const Vector3dpoint) const
+
+overridevirtual
+
+ +

Tests, if this Collider contains a point.

+ +

Implements Eule::Collider.

+ +

Definition at line 103 of file TrapazoidalPrismCollider.cpp.

+
104 {
+
105  for (std::size_t i = 0; i < 6; i++)
+
106  if (FaceDot((FACE_NORMALS)i, point) < 0)
+
107  return false;
+
108 
+
109  return true;
+
110 }
+
+
+
+ +

◆ GetVertex()

+ +
+
+ + + + + + + + +
const Vector3d & TrapazoidalPrismCollider::GetVertex (std::size_t index) const
+
+ +

Will return a specific vertex.

+ +

Definition at line 26 of file TrapazoidalPrismCollider.cpp.

+
27 {
+
28  return vertices[index];
+
29 }
+
+
+
+ +

◆ operator=() [1/2]

+ +
+
+ + + + + + + + +
void TrapazoidalPrismCollider::operator= (const TrapazoidalPrismColliderother)
+
+ +

Definition at line 10 of file TrapazoidalPrismCollider.cpp.

+
11 {
+
12  vertices = other.vertices;
+
13  faceNormals = other.faceNormals;
+
14 
+
15  return;
+
16 }
+
+
+
+ +

◆ operator=() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void TrapazoidalPrismCollider::operator= (TrapazoidalPrismCollider && other)
+
+noexcept
+
+ +

Definition at line 18 of file TrapazoidalPrismCollider.cpp.

+
19 {
+
20  vertices = std::move(other.vertices);
+
21  faceNormals = std::move(other.faceNormals);
+
22 
+
23  return;
+
24 }
+
+
+
+ +

◆ SetVertex()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void TrapazoidalPrismCollider::SetVertex (std::size_t index,
const Vector3d value 
)
+
+ +

Will set the value of a specific vertex.

+ +

Definition at line 31 of file TrapazoidalPrismCollider.cpp.

+
32 {
+
33  vertices[index] = value;
+
34  GenerateNormalsFromVertices();
+
35  return;
+
36 }
+
+
+
+

Member Data Documentation

+ +

◆ BACK

+ +
+
+ + + + + +
+ + + + +
constexpr std::size_t Eule::TrapazoidalPrismCollider::BACK = 0
+
+staticconstexpr
+
+ +

Definition at line 32 of file TrapazoidalPrismCollider.h.

+ +
+
+ +

◆ BOTTOM

+ +
+
+ + + + + +
+ + + + +
constexpr std::size_t Eule::TrapazoidalPrismCollider::BOTTOM = 0
+
+staticconstexpr
+
+ +

Definition at line 36 of file TrapazoidalPrismCollider.h.

+ +
+
+ +

◆ FRONT

+ +
+
+ + + + + +
+ + + + +
constexpr std::size_t Eule::TrapazoidalPrismCollider::FRONT = 4
+
+staticconstexpr
+
+ +

Definition at line 33 of file TrapazoidalPrismCollider.h.

+ +
+
+ +

◆ LEFT

+ +
+
+ + + + + +
+ + + + +
constexpr std::size_t Eule::TrapazoidalPrismCollider::LEFT = 0
+
+staticconstexpr
+
+ +

Definition at line 34 of file TrapazoidalPrismCollider.h.

+ +
+
+ +

◆ RIGHT

+ +
+
+ + + + + +
+ + + + +
constexpr std::size_t Eule::TrapazoidalPrismCollider::RIGHT = 2
+
+staticconstexpr
+
+ +

Definition at line 35 of file TrapazoidalPrismCollider.h.

+ +
+
+ +

◆ TOP

+ +
+
+ + + + + +
+ + + + +
constexpr std::size_t Eule::TrapazoidalPrismCollider::TOP = 1
+
+staticconstexpr
+
+ +

Definition at line 37 of file TrapazoidalPrismCollider.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.map b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.map new file mode 100644 index 0000000..399a8f0 --- /dev/null +++ b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.md5 b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.md5 new file mode 100644 index 0000000..c621060 --- /dev/null +++ b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.md5 @@ -0,0 +1 @@ +deee938530b892f287194fe0561c7d94 \ No newline at end of file diff --git a/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.png b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3620945e60c0b419814724b0291ccee156ba5402 GIT binary patch literal 3783 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 + + + diff --git a/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.md5 b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.md5 new file mode 100644 index 0000000..c621060 --- /dev/null +++ b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.md5 @@ -0,0 +1 @@ +deee938530b892f287194fe0561c7d94 \ No newline at end of file diff --git a/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.png b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3620945e60c0b419814724b0291ccee156ba5402 GIT binary patch literal 3783 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 + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule::Vector2< T > Member List
+
+
+ +

This is the complete list of members for Eule::Vector2< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CrossProduct(const Vector2< T > &other) constEule::Vector2< T >
DotProduct(const Vector2< T > &other) constEule::Vector2< T >
downEule::Vector2< T >static
leftEule::Vector2< T >static
Lerp(const Vector2< T > &other, double t) constEule::Vector2< T >
LerpSelf(const Vector2< T > &other, double t)Eule::Vector2< T >
Magnitude() constEule::Vector2< T >
Normalize() constEule::Vector2< T >
NormalizeSelf()Eule::Vector2< T >
oneEule::Vector2< T >static
operator Vector3< T >() constEule::Vector2< T >
operator Vector4< T >() constEule::Vector2< T >
operator!=(const Vector2< T > &other) constEule::Vector2< T >
operator*(const T scale) constEule::Vector2< T >
operator*=(const T scale)Eule::Vector2< T >
operator+(const Vector2< T > &other) constEule::Vector2< T >
operator+=(const Vector2< T > &other)Eule::Vector2< T >
operator-(const Vector2< T > &other) constEule::Vector2< T >
operator-() constEule::Vector2< T >
operator-=(const Vector2< T > &other)Eule::Vector2< T >
operator/(const T scale) constEule::Vector2< T >
operator/=(const T scale)Eule::Vector2< T >
operator<<(std::ostream &os, const Vector2< T > &v)Eule::Vector2< T >friend
operator<<(std::wostream &os, const Vector2< T > &v)Eule::Vector2< T >friend
operator=(const Vector2< T > &other)Eule::Vector2< T >
operator=(Vector2< T > &&other) noexceptEule::Vector2< T >
operator==(const Vector2< T > &other) constEule::Vector2< T >
operator[](std::size_t idx)Eule::Vector2< T >
operator[](std::size_t idx) constEule::Vector2< T >
rightEule::Vector2< T >static
Similar(const Vector2< T > &other, double epsilon=0.00001) constEule::Vector2< T >
SqrMagnitude() constEule::Vector2< T >
ToDouble() constEule::Vector2< T >
ToInt() constEule::Vector2< T >
upEule::Vector2< T >static
Vector2()Eule::Vector2< T >inline
Vector2(T _x, T _y)Eule::Vector2< T >inline
Vector2(const Vector2< T > &other)=defaultEule::Vector2< T >
Vector2(Vector2< T > &&other) noexcept=defaultEule::Vector2< T >
VectorScale(const Vector2< T > &scalar) constEule::Vector2< T >
xEule::Vector2< T >
yEule::Vector2< T >
zeroEule::Vector2< T >static
+ + + + diff --git a/Doxygen/build/classEule_1_1Vector2.html b/Doxygen/build/classEule_1_1Vector2.html new file mode 100644 index 0000000..1db3c5c --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector2.html @@ -0,0 +1,1478 @@ + + + + + + + +Leonetienne/Eule: Eule::Vector2< T > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Eule::Vector2< T > Class Template Reference
+
+
+ +

Representation of a 2d vector. + More...

+ +

#include <Vector2.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Vector2 ()
 
 Vector2 (T _x, T _y)
 
 Vector2 (const Vector2< T > &other)=default
 
 Vector2 (Vector2< T > &&other) noexcept=default
 
double DotProduct (const Vector2< T > &other) const
 Will compute the dot product to another Vector2. More...
 
double CrossProduct (const Vector2< T > &other) const
 Will compute the cross product to another Vector2. More...
 
double SqrMagnitude () const
 Will compute the square magnitude. More...
 
double Magnitude () const
 Will compute the magnitude. More...
 
Vector2< double > Normalize () const
 Will return the normalization of this vector. More...
 
void NormalizeSelf ()
 Will normalize this vector. More...
 
Vector2< T > VectorScale (const Vector2< T > &scalar) const
 Will scale self.n by scalar.n. More...
 
void LerpSelf (const Vector2< T > &other, double t)
 Will lerp itself towards other by t. More...
 
Vector2< double > Lerp (const Vector2< T > &other, double t) const
 Will return a lerp result between this and another vector. More...
 
bool Similar (const Vector2< T > &other, double epsilon=0.00001) const
 Will compare if two vectors are similar to a certain epsilon value. More...
 
Vector2< int > ToInt () const
 Will convert this vector to a Vector2i. More...
 
Vector2< double > ToDouble () const
 Will convert this vector to a Vector2d. More...
 
T & operator[] (std::size_t idx)
 
const T & operator[] (std::size_t idx) const
 
Vector2< T > operator+ (const Vector2< T > &other) const
 
void operator+= (const Vector2< T > &other)
 
Vector2< T > operator- (const Vector2< T > &other) const
 
void operator-= (const Vector2< T > &other)
 
Vector2< T > operator* (const T scale) const
 
void operator*= (const T scale)
 
Vector2< T > operator/ (const T scale) const
 
void operator/= (const T scale)
 
Vector2< T > operator- () const
 
 operator Vector3< T > () const
 
 operator Vector4< T > () const
 Conversion method. More...
 
void operator= (const Vector2< T > &other)
 Conversion method. More...
 
void operator= (Vector2< T > &&other) noexcept
 
bool operator== (const Vector2< T > &other) const
 
bool operator!= (const Vector2< T > &other) const
 
+ + + + + +

+Public Attributes

x
 
y
 
+ + + + + + + + + + + + + +

+Static Public Attributes

static const Vector2< double > up
 
static const Vector2< double > down
 
static const Vector2< double > right
 
static const Vector2< double > left
 
static const Vector2< double > one
 
static const Vector2< double > zero
 
+ + + + + +

+Friends

std::ostream & operator<< (std::ostream &os, const Vector2< T > &v)
 
std::wostream & operator<< (std::wostream &os, const Vector2< T > &v)
 
+

Detailed Description

+

template<typename T>
+class Eule::Vector2< T >

+ +

Representation of a 2d vector.

+

Contains a lot of utility methods.

+ +

Definition at line 14 of file Vector2.h.

+

Constructor & Destructor Documentation

+ +

◆ Vector2() [1/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
Eule::Vector2< T >::Vector2 ()
+
+inline
+
+ +

Definition at line 17 of file Vector2.h.

+
17 : x{ 0 }, y{ 0 } {}
+
+
+
+ +

◆ Vector2() [2/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eule::Vector2< T >::Vector2 (_x,
_y 
)
+
+inline
+
+ +

Definition at line 18 of file Vector2.h.

+
18 : x{ _x }, y{ _y } {}
+
+
+
+ +

◆ Vector2() [3/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Eule::Vector2< T >::Vector2 (const Vector2< T > & other)
+
+default
+
+ +
+
+ +

◆ Vector2() [4/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Eule::Vector2< T >::Vector2 (Vector2< T > && other)
+
+defaultnoexcept
+
+ +
+
+

Member Function Documentation

+ +

◆ CrossProduct()

+ +
+
+
+template<typename T >
+ + + + + + + + +
double Vector2::CrossProduct (const Vector2< T > & other) const
+
+ +

Will compute the cross product to another Vector2.

+ +

Definition at line 65 of file Vector2.cpp.

+
66 {
+
67  int iCross = (x * other.y) -
+
68  (y * other.x);
+
69 
+
70  return (double)iCross;
+
71 }
+
+
+
+ +

◆ DotProduct()

+ +
+
+
+template<typename T >
+ + + + + + + + +
double Vector2::DotProduct (const Vector2< T > & other) const
+
+ +

Will compute the dot product to another Vector2.

+ +

Definition at line 47 of file Vector2.cpp.

+
48 {
+
49  int iDot = (x * other.x) +
+
50  (y * other.y);
+
51 
+
52  return (double)iDot;
+
53 }
+
+
+
+ +

◆ Lerp()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
Vector2< double > Vector2::Lerp (const Vector2< T > & other,
double t 
) const
+
+ +

Will return a lerp result between this and another vector.

+ +

Definition at line 256 of file Vector2.cpp.

+
257 {
+
258  Vector2d copy(this->ToDouble());
+
259  copy.LerpSelf(other.ToDouble(), t);
+
260 
+
261  return copy;
+
262 }
+
+
+
+ +

◆ LerpSelf()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
void Vector2::LerpSelf (const Vector2< T > & other,
double t 
)
+
+ +

Will lerp itself towards other by t.

+ +

Definition at line 238 of file Vector2.cpp.

+
239 {
+
240  const double it = 1.0 - t; // Inverse t
+
241 
+
242  x = (int)(it * (double)x + t * (double)other.x);
+
243  y = (int)(it * (double)y + t * (double)other.y);
+
244 
+
245  return;
+
246 }
+
+
+
+ +

◆ Magnitude()

+ +
+
+
+template<typename T >
+ + + + +
double Vector2::Magnitude
+
+ +

Will compute the magnitude.

+ +

Definition at line 90 of file Vector2.cpp.

+
91 {
+
92  return sqrt(SqrMagnitude());
+
93 }
+
+
+
+ +

◆ Normalize()

+ +
+
+
+template<typename T >
+ + + + +
Vector2< double > Vector2::Normalize
+
+ +

Will return the normalization of this vector.

+ +

Definition at line 137 of file Vector2.cpp.

+
138 {
+
139  Vector2<double> norm(x, y);
+
140  norm.NormalizeSelf();
+
141 
+
142  return norm;
+
143 }
+
+
+
+ +

◆ NormalizeSelf()

+ +
+
+
+template<typename T >
+ + + + + + + +
void Vector2::NormalizeSelf ()
+
+ +

Will normalize this vector.

+ +

Definition at line 187 of file Vector2.cpp.

+
188 {
+
189  std::cerr << "Stop normalizing int-vectors!!" << std::endl;
+
190  x = 0;
+
191  y = 0;
+
192 
+
193  return;
+
194 }
+
+
+
+ +

◆ operator Vector3< T >()

+ +
+
+
+template<typename T >
+ + + + +
Vector2::operator Vector3< T >
+
+ +

Definition at line 674 of file Vector2.cpp.

+
675 {
+
676  return Vector3<T>(x, y, 0);
+
677 }
+
+
+
+ +

◆ operator Vector4< T >()

+ +
+
+
+template<typename T >
+ + + + +
Vector2::operator Vector4< T >
+
+ +

Conversion method.

+ +

Definition at line 680 of file Vector2.cpp.

+
681 {
+
682  return Vector4<T>(x, y, 0, 0);
+
683 }
+
+
+
+ +

◆ operator!=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
bool Vector2::operator!= (const Vector2< T > & other) const
+
+ +

Definition at line 656 of file Vector2.cpp.

+
657 {
+
658  return !operator==(other);
+
659 }
+
+
+
+ +

◆ operator*()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector2< T > Vector2::operator* (const T scale) const
+
+ +

Definition at line 503 of file Vector2.cpp.

+
504 {
+
505  return Vector2<T>(
+
506  x * scale,
+
507  y * scale
+
508  );
+
509 }
+
+
+
+ +

◆ operator*=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector2::operator*= (const T scale)
+
+ +

Definition at line 542 of file Vector2.cpp.

+
543 {
+
544  x *= scale;
+
545  y *= scale;
+
546  return;
+
547 }
+
+
+
+ +

◆ operator+()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector2< T > Vector2::operator+ (const Vector2< T > & other) const
+
+ +

Definition at line 346 of file Vector2.cpp.

+
347 {
+
348  return Vector2<T>(
+
349  x + other.x,
+
350  y + other.y
+
351  );
+
352 }
+
+
+
+ +

◆ operator+=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector2::operator+= (const Vector2< T > & other)
+
+ +

Definition at line 385 of file Vector2.cpp.

+
386 {
+
387  x += other.x;
+
388  y += other.y;
+
389  return;
+
390 }
+
+
+
+ +

◆ operator-() [1/2]

+ +
+
+
+template<typename T >
+ + + + +
Vector2< T > Vector2::operator-
+
+ +

Definition at line 662 of file Vector2.cpp.

+
663 {
+
664  return Vector2<T>(
+
665  -x,
+
666  -y
+
667  );
+
668 }
+
+
+
+ +

◆ operator-() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector2< T > Vector2::operator- (const Vector2< T > & other) const
+
+ +

Definition at line 424 of file Vector2.cpp.

+
425 {
+
426  return Vector2<T>(
+
427  x - other.x,
+
428  y - other.y
+
429  );
+
430 }
+
+
+
+ +

◆ operator-=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector2::operator-= (const Vector2< T > & other)
+
+ +

Definition at line 463 of file Vector2.cpp.

+
464 {
+
465  x -= other.x;
+
466  y -= other.y;
+
467  return;
+
468 }
+
+
+
+ +

◆ operator/()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector2< T > Vector2::operator/ (const T scale) const
+
+ +

Definition at line 582 of file Vector2.cpp.

+
583 {
+
584  return Vector2<T>(
+
585  x / scale,
+
586  y / scale
+
587  );
+
588 }
+
+
+
+ +

◆ operator/=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector2::operator/= (const T scale)
+
+ +

Definition at line 620 of file Vector2.cpp.

+
621 {
+
622  x /= scale;
+
623  y /= scale;
+
624  return;
+
625 }
+
+
+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector2::operator= (const Vector2< T > & other)
+
+ +

Conversion method.

+ +

Definition at line 630 of file Vector2.cpp.

+
631 {
+
632  x = other.x;
+
633  y = other.y;
+
634 
+
635  return;
+
636 }
+
+
+
+ +

◆ operator=() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void Vector2::operator= (Vector2< T > && other)
+
+noexcept
+
+ +

Definition at line 639 of file Vector2.cpp.

+
640 {
+
641  x = std::move(other.x);
+
642  y = std::move(other.y);
+
643 
+
644  return;
+
645 }
+
+
+
+ +

◆ operator==()

+ +
+
+
+template<typename T >
+ + + + + + + + +
bool Vector2::operator== (const Vector2< T > & other) const
+
+ +

Definition at line 648 of file Vector2.cpp.

+
649 {
+
650  return
+
651  (x == other.x) &&
+
652  (y == other.y);
+
653 }
+
+
+
+ +

◆ operator[]() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
T & Vector2::operator[] (std::size_t idx)
+
+ +

Definition at line 267 of file Vector2.cpp.

+
268 {
+
269  switch (idx)
+
270  {
+
271  case 0:
+
272  return x;
+
273  case 1:
+
274  return y;
+
275  default:
+
276  throw std::out_of_range("Array descriptor on Vector2<T> out of range!");
+
277  }
+
278 }
+
+
+
+ +

◆ operator[]() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
const T & Vector2::operator[] (std::size_t idx) const
+
+ +

Definition at line 281 of file Vector2.cpp.

+
282 {
+
283  switch (idx)
+
284  {
+
285  case 0:
+
286  return x;
+
287  case 1:
+
288  return y;
+
289  default:
+
290  throw std::out_of_range("Array descriptor on Vector2<T> out of range!");
+
291  }
+
292 }
+
+
+
+ +

◆ Similar()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
bool Vector2::Similar (const Vector2< T > & other,
double epsilon = 0.00001 
) const
+
+ +

Will compare if two vectors are similar to a certain epsilon value.

+ +

Definition at line 295 of file Vector2.cpp.

+
296 {
+
297  return
+
298  (::Math::Similar(x, other.x, epsilon)) &&
+
299  (::Math::Similar(y, other.y, epsilon))
+
300  ;
+
301 }
+
+
+
+ +

◆ SqrMagnitude()

+ +
+
+
+template<typename T >
+ + + + + + + +
double Vector2::SqrMagnitude () const
+
+ +

Will compute the square magnitude.

+ +

Definition at line 83 of file Vector2.cpp.

+
84 {
+
85  int iSqrMag = x*x + y*y;
+
86  return (double)iSqrMag;
+
87 }
+
+
+
+ +

◆ ToDouble()

+ +
+
+
+template<typename T >
+ + + + +
Vector2< double > Vector2::ToDouble
+
+ +

Will convert this vector to a Vector2d.

+ +

Definition at line 310 of file Vector2.cpp.

+
311 {
+
312  return Vector2<double>((double)x, (double)y);
+
313 }
+
+
+
+ +

◆ ToInt()

+ +
+
+
+template<typename T >
+ + + + +
Vector2< int > Vector2::ToInt
+
+ +

Will convert this vector to a Vector2i.

+ +

Definition at line 304 of file Vector2.cpp.

+
305 {
+
306  return Vector2<int>((int)x, (int)y);
+
307 }
+
+
+
+ +

◆ VectorScale()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector2< int > Vector2::VectorScale (const Vector2< T > & scalar) const
+
+ +

Will scale self.n by scalar.n.

+ +

Definition at line 127 of file Vector2.cpp.

+
128 {
+
129  return Vector2<int>(
+
130  x * scalar.x,
+
131  y * scalar.y
+
132  );
+
133 }
+
+
+
+

Friends And Related Function Documentation

+ +

◆ operator<< [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & os,
const Vector2< T > & v 
)
+
+friend
+
+ +

Definition at line 80 of file Vector2.h.

+
81  {
+
82  return os << "[x: " << v.x << " y: " << v.y << "]";
+
83  }
+
+
+
+ +

◆ operator<< [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::wostream& operator<< (std::wostream & os,
const Vector2< T > & v 
)
+
+friend
+
+ +

Definition at line 84 of file Vector2.h.

+
85  {
+
86  return os << L"[x: " << v.x << L" y: " << v.y << L"]";
+
87  }
+
+
+
+

Member Data Documentation

+ +

◆ down

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector2< double > Vector2::down
+
+static
+
+ +

Definition at line 94 of file Vector2.h.

+ +
+
+ +

◆ left

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector2< double > Vector2::left
+
+static
+
+ +

Definition at line 96 of file Vector2.h.

+ +
+
+ +

◆ one

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector2< double > Vector2::one
+
+static
+
+ +

Definition at line 97 of file Vector2.h.

+ +
+
+ +

◆ right

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector2< double > Vector2::right
+
+static
+
+ +

Definition at line 95 of file Vector2.h.

+ +
+
+ +

◆ up

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector2< double > Vector2::up
+
+static
+
+ +

Definition at line 93 of file Vector2.h.

+ +
+
+ +

◆ x

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector2< T >::x
+
+ +

Definition at line 89 of file Vector2.h.

+ +
+
+ +

◆ y

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector2< T >::y
+
+ +

Definition at line 90 of file Vector2.h.

+ +
+
+ +

◆ zero

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector2< double > Vector2::zero
+
+static
+
+ +

Definition at line 98 of file Vector2.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector2.cpp:83
+
Vector2< double > ToDouble() const
Will convert this vector to a Vector2d.
Definition: Vector2.cpp:310
+ + + +
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
bool operator==(const Vector2< T > &other) const
Definition: Vector2.cpp:648
+
Representation of a 4d vector.
Definition: Vector2.h:8
+ + + + diff --git a/Doxygen/build/classEule_1_1Vector3-members.html b/Doxygen/build/classEule_1_1Vector3-members.html new file mode 100644 index 0000000..7a65cec --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector3-members.html @@ -0,0 +1,139 @@ + + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule::Vector3< T > Member List
+
+
+ +

This is the complete list of members for Eule::Vector3< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
backwardEule::Vector3< T >static
CrossProduct(const Vector3< T > &other) constEule::Vector3< T >
DotProduct(const Vector3< T > &other) constEule::Vector3< T >
downEule::Vector3< T >static
forwardEule::Vector3< T >static
leftEule::Vector3< T >static
Lerp(const Vector3< T > &other, double t) constEule::Vector3< T >
LerpSelf(const Vector3< T > &other, double t)Eule::Vector3< T >
Magnitude() constEule::Vector3< T >
Normalize() constEule::Vector3< T >
NormalizeSelf()Eule::Vector3< T >
oneEule::Vector3< T >static
operator Vector2< T >() constEule::Vector3< T >
operator Vector4< T >() constEule::Vector3< T >
operator!=(const Vector3< T > &other) constEule::Vector3< T >
operator*(const T scale) constEule::Vector3< T >
operator*(const Matrix4x4 &mat) constEule::Vector3< T >
operator*=(const T scale)Eule::Vector3< T >
operator*=(const Matrix4x4 &mat)Eule::Vector3< T >
operator+(const Vector3< T > &other) constEule::Vector3< T >
operator+=(const Vector3< T > &other)Eule::Vector3< T >
operator-(const Vector3< T > &other) constEule::Vector3< T >
operator-() constEule::Vector3< T >
operator-=(const Vector3< T > &other)Eule::Vector3< T >
operator/(const T scale) constEule::Vector3< T >
operator/=(const T scale)Eule::Vector3< T >
operator<<(std::ostream &os, const Vector3< T > &v)Eule::Vector3< T >friend
operator<<(std::wostream &os, const Vector3< T > &v)Eule::Vector3< T >friend
operator=(const Vector3< T > &other)Eule::Vector3< T >
operator=(Vector3< T > &&other) noexceptEule::Vector3< T >
operator==(const Vector3< T > &other) constEule::Vector3< T >
operator[](std::size_t idx)Eule::Vector3< T >
operator[](std::size_t idx) constEule::Vector3< T >
rightEule::Vector3< T >static
Similar(const Vector3< T > &other, double epsilon=0.00001) constEule::Vector3< T >
SqrMagnitude() constEule::Vector3< T >
ToDouble() constEule::Vector3< T >
ToInt() constEule::Vector3< T >
upEule::Vector3< T >static
Vector3()Eule::Vector3< T >inline
Vector3(T _x, T _y, T _z)Eule::Vector3< T >inline
Vector3(const Vector3< T > &other)=defaultEule::Vector3< T >
Vector3(Vector3< T > &&other) noexcept=defaultEule::Vector3< T >
VectorScale(const Vector3< T > &scalar) constEule::Vector3< T >
xEule::Vector3< T >
yEule::Vector3< T >
zEule::Vector3< T >
zeroEule::Vector3< T >static
+ + + + diff --git a/Doxygen/build/classEule_1_1Vector3.html b/Doxygen/build/classEule_1_1Vector3.html new file mode 100644 index 0000000..b39913c --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector3.html @@ -0,0 +1,1672 @@ + + + + + + + +Leonetienne/Eule: Eule::Vector3< T > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Eule::Vector3< T > Class Template Reference
+
+
+ +

Representation of a 3d vector. + More...

+ +

#include <Matrix4x4.h>

+
+Collaboration diagram for Eule::Vector3< T >:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Vector3 ()
 
 Vector3 (T _x, T _y, T _z)
 
 Vector3 (const Vector3< T > &other)=default
 
 Vector3 (Vector3< T > &&other) noexcept=default
 
double DotProduct (const Vector3< T > &other) const
 Will compute the dot product to another Vector3. More...
 
Vector3< double > CrossProduct (const Vector3< T > &other) const
 Will compute the cross product to another Vector3. More...
 
double SqrMagnitude () const
 Will compute the square magnitude. More...
 
double Magnitude () const
 Will compute the magnitude. More...
 
Vector3< double > Normalize () const
 Will return the normalization of this vector. More...
 
void NormalizeSelf ()
 Will normalize this vector. More...
 
Vector3< T > VectorScale (const Vector3< T > &scalar) const
 Will scale self.n by scalar.n. More...
 
void LerpSelf (const Vector3< T > &other, double t)
 Will lerp itself towards other by t. More...
 
Vector3< double > Lerp (const Vector3< T > &other, double t) const
 Will return a lerp result between this and another vector. More...
 
bool Similar (const Vector3< T > &other, double epsilon=0.00001) const
 Will compare if two vectors are similar to a certain epsilon value. More...
 
Vector3< int > ToInt () const
 Will convert this vector to a Vector3i. More...
 
Vector3< double > ToDouble () const
 Will convert this vector to a Vector3d. More...
 
T & operator[] (std::size_t idx)
 
const T & operator[] (std::size_t idx) const
 
Vector3< T > operator+ (const Vector3< T > &other) const
 
void operator+= (const Vector3< T > &other)
 
Vector3< T > operator- (const Vector3< T > &other) const
 
void operator-= (const Vector3< T > &other)
 
Vector3< T > operator* (const T scale) const
 
void operator*= (const T scale)
 
Vector3< T > operator/ (const T scale) const
 
void operator/= (const T scale)
 
Vector3< T > operator* (const Matrix4x4 &mat) const
 
void operator*= (const Matrix4x4 &mat)
 
Vector3< T > operator- () const
 
 operator Vector2< T > () const
 
 operator Vector4< T > () const
 Conversion method. More...
 
void operator= (const Vector3< T > &other)
 Conversion method. More...
 
void operator= (Vector3< T > &&other) noexcept
 
bool operator== (const Vector3< T > &other) const
 
bool operator!= (const Vector3< T > &other) const
 
+ + + + + + + +

+Public Attributes

x
 
y
 
z
 
+ + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const Vector3< double > up
 
static const Vector3< double > down
 
static const Vector3< double > right
 
static const Vector3< double > left
 
static const Vector3< double > forward
 
static const Vector3< double > backward
 
static const Vector3< double > one
 
static const Vector3< double > zero
 
+ + + + + +

+Friends

std::ostream & operator<< (std::ostream &os, const Vector3< T > &v)
 
std::wostream & operator<< (std::wostream &os, const Vector3< T > &v)
 
+

Detailed Description

+

template<typename T>
+class Eule::Vector3< T >

+ +

Representation of a 3d vector.

+

Contains a lot of utility methods.

+ +

Definition at line 9 of file Matrix4x4.h.

+

Constructor & Destructor Documentation

+ +

◆ Vector3() [1/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
Eule::Vector3< T >::Vector3 ()
+
+inline
+
+ +

Definition at line 20 of file Vector3.h.

+
20 : x{ 0 }, y{ 0 }, z{ 0 } {}
+
+
+
+ +

◆ Vector3() [2/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Eule::Vector3< T >::Vector3 (_x,
_y,
_z 
)
+
+inline
+
+ +

Definition at line 21 of file Vector3.h.

+
21 : x{ _x }, y{ _y }, z{ _z } {}
+
+
+
+ +

◆ Vector3() [3/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Eule::Vector3< T >::Vector3 (const Vector3< T > & other)
+
+default
+
+ +
+
+ +

◆ Vector3() [4/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Eule::Vector3< T >::Vector3 (Vector3< T > && other)
+
+defaultnoexcept
+
+ +
+
+

Member Function Documentation

+ +

◆ CrossProduct()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector3< double > Vector3::CrossProduct (const Vector3< T > & other) const
+
+ +

Will compute the cross product to another Vector3.

+ +

Definition at line 68 of file Vector3.cpp.

+
69 {
+
70  Vector3<double> cp;
+
71  cp.x = ((double)y * (double)other.z) - ((double)z * (double)other.y);
+
72  cp.y = ((double)z * (double)other.x) - ((double)x * (double)other.z);
+
73  cp.z = ((double)x * (double)other.y) - ((double)y * (double)other.x);
+
74 
+
75  return cp;
+
76 }
+
+
+
+ +

◆ DotProduct()

+ +
+
+
+template<typename T >
+ + + + + + + + +
double Vector3::DotProduct (const Vector3< T > & other) const
+
+ +

Will compute the dot product to another Vector3.

+ +

Definition at line 48 of file Vector3.cpp.

+
49 {
+
50  int iDot = (x * other.x) + (y * other.y) + (z * other.z);
+
51  return (double)iDot;
+
52 }
+
+
+
+ +

◆ Lerp()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
Vector3< double > Vector3::Lerp (const Vector3< T > & other,
double t 
) const
+
+ +

Will return a lerp result between this and another vector.

+ +

Definition at line 330 of file Vector3.cpp.

+
331 {
+
332  Vector3d copy(this->ToDouble());
+
333  copy.LerpSelf(other.ToDouble(), t);
+
334 
+
335  return copy;
+
336 }
+
+
+
+ +

◆ LerpSelf()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
void Vector3::LerpSelf (const Vector3< T > & other,
double t 
)
+
+ +

Will lerp itself towards other by t.

+ +

Definition at line 311 of file Vector3.cpp.

+
312 {
+
313  const double it = 1.0 - t; // Inverse t
+
314 
+
315  x = (int)(it * (double)x + t * (double)other.x);
+
316  y = (int)(it * (double)y + t * (double)other.y);
+
317  z = (int)(it * (double)z + t * (double)other.z);
+
318 
+
319  return;
+
320 }
+
+
+
+ +

◆ Magnitude()

+ +
+
+
+template<typename T >
+ + + + +
double Vector3::Magnitude
+
+ +

Will compute the magnitude.

+ +

Definition at line 95 of file Vector3.cpp.

+
96 {
+
97  return sqrt(SqrMagnitude());
+
98 }
+
+
+
+ +

◆ Normalize()

+ +
+
+
+template<typename T >
+ + + + +
Vector3< double > Vector3::Normalize
+
+ +

Will return the normalization of this vector.

+ +

Definition at line 147 of file Vector3.cpp.

+
148 {
+
149  Vector3<double> norm(x, y, z);
+
150  norm.NormalizeSelf();
+
151 
+
152  return norm;
+
153 }
+
+
+
+ +

◆ NormalizeSelf()

+ +
+
+
+template<typename T >
+ + + + + + + +
void Vector3::NormalizeSelf ()
+
+ +

Will normalize this vector.

+ +

Definition at line 200 of file Vector3.cpp.

+
201 {
+
202  std::cerr << "Stop normalizing int-vectors!!" << std::endl;
+
203  x = 0;
+
204  y = 0;
+
205  z = 0;
+
206 
+
207  return;
+
208 }
+
+
+
+ +

◆ operator Vector2< T >()

+ +
+
+
+template<typename T >
+ + + + +
Vector3::operator Vector2< T >
+
+ +

Definition at line 873 of file Vector3.cpp.

+
874 {
+
875  return Vector2<T>(x, y);
+
876 }
+
+
+
+ +

◆ operator Vector4< T >()

+ +
+
+
+template<typename T >
+ + + + +
Vector3::operator Vector4< T >
+
+ +

Conversion method.

+ +

Definition at line 879 of file Vector3.cpp.

+
880 {
+
881  return Vector4<T>(x, y, z, 0);
+
882 }
+
+
+
+ +

◆ operator!=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
bool Vector3::operator!= (const Vector3< T > & other) const
+
+ +

Definition at line 864 of file Vector3.cpp.

+
865 {
+
866  return !operator==(other);
+
867 }
+
+
+
+ +

◆ operator*() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector3< int > Vector3::operator* (const Matrix4x4mat) const
+
+ +

Definition at line 731 of file Vector3.cpp.

+
732 {
+
733  Vector3<double> newVec;
+
734 
+
735  // Rotation, Scaling
+
736  newVec.x = ((mat[0][0] * x) + (mat[1][0] * y) + (mat[2][0] * z));
+
737  newVec.y = ((mat[0][1] * x) + (mat[1][1] * y) + (mat[2][1] * z));
+
738  newVec.z = ((mat[0][2] * x) + (mat[1][2] * y) + (mat[2][2] * z));
+
739 
+
740  // Translation
+
741  newVec.x += mat[0][3];
+
742  newVec.y += mat[1][3];
+
743  newVec.z += mat[2][3];
+
744 
+
745  return Vector3<int>(
+
746  (int)newVec.x,
+
747  (int)newVec.y,
+
748  (int)newVec.z
+
749  );
+
750 }
+
+
+
+ +

◆ operator*() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector3< T > Vector3::operator* (const T scale) const
+
+ +

Definition at line 541 of file Vector3.cpp.

+
542 {
+
543  return Vector3<T>(
+
544  x * scale,
+
545  y * scale,
+
546  z * scale
+
547  );
+
548 }
+
+
+
+ +

◆ operator*=() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector3::operator*= (const Matrix4x4mat)
+
+ +

Definition at line 836 of file Vector3.cpp.

+
837 {
+
838  Vector3<double> buffer(x, y, z);
+
839 
+
840  x = (int)((mat[0][0] * buffer.x) + (mat[0][1] * buffer.y) + (mat[0][2] * buffer.z));
+
841  y = (int)((mat[1][0] * buffer.x) + (mat[1][1] * buffer.y) + (mat[1][2] * buffer.z));
+
842  z = (int)((mat[2][0] * buffer.x) + (mat[2][1] * buffer.y) + (mat[2][2] * buffer.z));
+
843 
+
844  // Translation
+
845  x += (int)mat[0][3];
+
846  y += (int)mat[1][3];
+
847  z += (int)mat[2][3];
+
848 
+
849  return;
+
850 }
+
+
+
+ +

◆ operator*=() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector3::operator*= (const T scale)
+
+ +

Definition at line 583 of file Vector3.cpp.

+
584 {
+
585  x *= scale;
+
586  y *= scale;
+
587  z *= scale;
+
588  return;
+
589 }
+
+
+
+ +

◆ operator+()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector3< T > Vector3::operator+ (const Vector3< T > & other) const
+
+ +

Definition at line 372 of file Vector3.cpp.

+
373 {
+
374  return Vector3<T>(
+
375  x + other.x,
+
376  y + other.y,
+
377  z + other.z
+
378  );
+
379 }
+
+
+
+ +

◆ operator+=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector3::operator+= (const Vector3< T > & other)
+
+ +

Definition at line 414 of file Vector3.cpp.

+
415 {
+
416  x += other.x;
+
417  y += other.y;
+
418  z += other.z;
+
419  return;
+
420 }
+
+
+
+ +

◆ operator-() [1/2]

+ +
+
+
+template<typename T >
+ + + + +
Vector3< T > Vector3::operator-
+
+ +

Definition at line 806 of file Vector3.cpp.

+
807 {
+
808  return Vector3<T>(
+
809  -x,
+
810  -y,
+
811  -z
+
812  );
+
813 }
+
+
+
+ +

◆ operator-() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector3< T > Vector3::operator- (const Vector3< T > & other) const
+
+ +

Definition at line 456 of file Vector3.cpp.

+
457 {
+
458  return Vector3<T>(
+
459  x - other.x,
+
460  y - other.y,
+
461  z - other.z
+
462  );
+
463 }
+
+
+
+ +

◆ operator-=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector3::operator-= (const Vector3< T > & other)
+
+ +

Definition at line 498 of file Vector3.cpp.

+
499 {
+
500  x -= other.x;
+
501  y -= other.y;
+
502  z -= other.z;
+
503  return;
+
504 }
+
+
+
+ +

◆ operator/()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector3< T > Vector3::operator/ (const T scale) const
+
+ +

Definition at line 626 of file Vector3.cpp.

+
627 {
+
628  return Vector3<T>(
+
629  x / scale,
+
630  y / scale,
+
631  z / scale
+
632  );
+
633 }
+
+
+
+ +

◆ operator/=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector3::operator/= (const T scale)
+
+ +

Definition at line 667 of file Vector3.cpp.

+
668 {
+
669  x /= scale;
+
670  y /= scale;
+
671  z /= scale;
+
672  return;
+
673 }
+
+
+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector3::operator= (const Vector3< T > & other)
+
+ +

Conversion method.

+ +

Definition at line 816 of file Vector3.cpp.

+
817 {
+
818  x = other.x;
+
819  y = other.y;
+
820  z = other.z;
+
821 
+
822  return;
+
823 }
+
+
+
+ +

◆ operator=() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void Vector3::operator= (Vector3< T > && other)
+
+noexcept
+
+ +

Definition at line 826 of file Vector3.cpp.

+
827 {
+
828  x = std::move(other.x);
+
829  y = std::move(other.y);
+
830  z = std::move(other.z);
+
831 
+
832  return;
+
833 }
+
+
+
+ +

◆ operator==()

+ +
+
+
+template<typename T >
+ + + + + + + + +
bool Vector3::operator== (const Vector3< T > & other) const
+
+ +

Definition at line 855 of file Vector3.cpp.

+
856 {
+
857  return
+
858  (x == other.x) &&
+
859  (y == other.y) &&
+
860  (z == other.z);
+
861 }
+
+
+
+ +

◆ operator[]() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
T & Vector3::operator[] (std::size_t idx)
+
+ +

Definition at line 235 of file Vector3.cpp.

+
236 {
+
237  switch (idx)
+
238  {
+
239  case 0:
+
240  return x;
+
241  case 1:
+
242  return y;
+
243  case 2:
+
244  return z;
+
245  default:
+
246  throw std::out_of_range("Array descriptor on Vector3<T> out of range!");
+
247  }
+
248 }
+
+
+
+ +

◆ operator[]() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
const T & Vector3::operator[] (std::size_t idx) const
+
+ +

Definition at line 251 of file Vector3.cpp.

+
252 {
+
253  switch (idx)
+
254  {
+
255  case 0:
+
256  return x;
+
257  case 1:
+
258  return y;
+
259  case 2:
+
260  return z;
+
261  default:
+
262  throw std::out_of_range("Array descriptor on Vector3<T> out of range!");
+
263  }
+
264 }
+
+
+
+ +

◆ Similar()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
bool Vector3::Similar (const Vector3< T > & other,
double epsilon = 0.00001 
) const
+
+ +

Will compare if two vectors are similar to a certain epsilon value.

+ +

Definition at line 213 of file Vector3.cpp.

+
214 {
+
215  return
+
216  (::Math::Similar(x, other.x, epsilon)) &&
+
217  (::Math::Similar(y, other.y, epsilon)) &&
+
218  (::Math::Similar(z, other.z, epsilon))
+
219  ;
+
220 }
+
+
+
+ +

◆ SqrMagnitude()

+ +
+
+
+template<typename T >
+ + + + + + + +
double Vector3::SqrMagnitude () const
+
+ +

Will compute the square magnitude.

+ +

Definition at line 88 of file Vector3.cpp.

+
89 {
+
90  int iSqrMag = x*x + y*y + z*z;
+
91  return (double)iSqrMag;
+
92 }
+
+
+
+ +

◆ ToDouble()

+ +
+
+
+template<typename T >
+ + + + +
Vector3< double > Vector3::ToDouble
+
+ +

Will convert this vector to a Vector3d.

+ +

Definition at line 229 of file Vector3.cpp.

+
230 {
+
231  return Vector3<double>((double)x, (double)y, (double)z);
+
232 }
+
+
+
+ +

◆ ToInt()

+ +
+
+
+template<typename T >
+ + + + +
Vector3< int > Vector3::ToInt
+
+ +

Will convert this vector to a Vector3i.

+ +

Definition at line 223 of file Vector3.cpp.

+
224 {
+
225  return Vector3<int>((int)x, (int)y, (int)z);
+
226 }
+
+
+
+ +

◆ VectorScale()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector3< int > Vector3::VectorScale (const Vector3< T > & scalar) const
+
+ +

Will scale self.n by scalar.n.

+ +

Definition at line 135 of file Vector3.cpp.

+
136 {
+
137  return Vector3<int>(
+
138  x * scalar.x,
+
139  y * scalar.y,
+
140  z * scalar.z
+
141  );
+
142 }
+
+
+
+

Friends And Related Function Documentation

+ +

◆ operator<< [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & os,
const Vector3< T > & v 
)
+
+friend
+
+ +

Definition at line 85 of file Vector3.h.

+
86  {
+
87  return os << "[x: " << v.x << " y: " << v.y << " z: " << v.z << "]";
+
88  }
+
+
+
+ +

◆ operator<< [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::wostream& operator<< (std::wostream & os,
const Vector3< T > & v 
)
+
+friend
+
+ +

Definition at line 89 of file Vector3.h.

+
90  {
+
91  return os << L"[x: " << v.x << L" y: " << v.y << L" z: " << v.z << L"]";
+
92  }
+
+
+
+

Member Data Documentation

+ +

◆ backward

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector3< double > Vector3::backward
+
+static
+
+ +

Definition at line 104 of file Vector3.h.

+ +
+
+ +

◆ down

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector3< double > Vector3::down
+
+static
+
+ +

Definition at line 100 of file Vector3.h.

+ +
+
+ +

◆ forward

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector3< double > Vector3::forward
+
+static
+
+ +

Definition at line 103 of file Vector3.h.

+ +
+
+ +

◆ left

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector3< double > Vector3::left
+
+static
+
+ +

Definition at line 102 of file Vector3.h.

+ +
+
+ +

◆ one

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector3< double > Vector3::one
+
+static
+
+ +

Definition at line 105 of file Vector3.h.

+ +
+
+ +

◆ right

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector3< double > Vector3::right
+
+static
+
+ +

Definition at line 101 of file Vector3.h.

+ +
+
+ +

◆ up

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector3< double > Vector3::up
+
+static
+
+ +

Definition at line 99 of file Vector3.h.

+ +
+
+ +

◆ x

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector3< T >::x
+
+ +

Definition at line 94 of file Vector3.h.

+ +
+
+ +

◆ y

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector3< T >::y
+
+ +

Definition at line 95 of file Vector3.h.

+ +
+
+ +

◆ z

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector3< T >::z
+
+ +

Definition at line 96 of file Vector3.h.

+ +
+
+ +

◆ zero

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector3< double > Vector3::zero
+
+static
+
+ +

Definition at line 106 of file Vector3.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ +
Vector3< double > ToDouble() const
Will convert this vector to a Vector3d.
Definition: Vector3.cpp:229
+
bool operator==(const Vector3< T > &other) const
Definition: Vector3.cpp:855
+ + +
Representation of a 2d vector.
Definition: Vector2.h:14
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector3.cpp:88
+
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+ +
Representation of a 4d vector.
Definition: Vector2.h:8
+ + + + diff --git a/Doxygen/build/classEule_1_1Vector3__coll__graph.map b/Doxygen/build/classEule_1_1Vector3__coll__graph.map new file mode 100644 index 0000000..1e1b359 --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector3__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doxygen/build/classEule_1_1Vector3__coll__graph.md5 b/Doxygen/build/classEule_1_1Vector3__coll__graph.md5 new file mode 100644 index 0000000..71ea584 --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector3__coll__graph.md5 @@ -0,0 +1 @@ +b3a7a2417e6523c8919c534d316cd3d7 \ No newline at end of file diff --git a/Doxygen/build/classEule_1_1Vector3__coll__graph.png b/Doxygen/build/classEule_1_1Vector3__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8937b43d18864c2d96f06ec484e71f3a019585 GIT binary patch literal 12048 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 XMf|GGwHGkrjv)0^PP{-=-}iq2&qHFI literal 0 HcmV?d00001 diff --git a/Doxygen/build/classEule_1_1Vector4-members.html b/Doxygen/build/classEule_1_1Vector4-members.html new file mode 100644 index 0000000..3b17a2d --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector4-members.html @@ -0,0 +1,140 @@ + + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule::Vector4< T > Member List
+
+
+ +

This is the complete list of members for Eule::Vector4< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
backwardEule::Vector4< T >static
downEule::Vector4< T >static
forwardEule::Vector4< T >static
futureEule::Vector4< T >static
leftEule::Vector4< T >static
Lerp(const Vector4< T > &other, double t) constEule::Vector4< T >
LerpSelf(const Vector4< T > &other, double t)Eule::Vector4< T >
Magnitude() constEule::Vector4< T >
Normalize() constEule::Vector4< T >
NormalizeSelf()Eule::Vector4< T >
oneEule::Vector4< T >static
operator Vector2< T >() constEule::Vector4< T >
operator Vector3< T >() constEule::Vector4< T >
operator!=(const Vector4< T > &other) constEule::Vector4< T >
operator*(const T scale) constEule::Vector4< T >
operator*(const Matrix4x4 &mat) constEule::Vector4< T >
operator*=(const T scale)Eule::Vector4< T >
operator*=(const Matrix4x4 &mat)Eule::Vector4< T >
operator+(const Vector4< T > &other) constEule::Vector4< T >
operator+=(const Vector4< T > &other)Eule::Vector4< T >
operator-(const Vector4< T > &other) constEule::Vector4< T >
operator-() constEule::Vector4< T >
operator-=(const Vector4< T > &other)Eule::Vector4< T >
operator/(const T scale) constEule::Vector4< T >
operator/=(const T scale)Eule::Vector4< T >
operator<<(std::ostream &os, const Vector4< T > &v)Eule::Vector4< T >friend
operator<<(std::wostream &os, const Vector4< T > &v)Eule::Vector4< T >friend
operator=(const Vector4< T > &other)Eule::Vector4< T >
operator=(Vector4< T > &&other) noexceptEule::Vector4< T >
operator==(const Vector4< T > &other) constEule::Vector4< T >
operator[](std::size_t idx)Eule::Vector4< T >
operator[](std::size_t idx) constEule::Vector4< T >
pastEule::Vector4< T >static
rightEule::Vector4< T >static
Similar(const Vector4< T > &other, double epsilon=0.00001) constEule::Vector4< T >
SqrMagnitude() constEule::Vector4< T >
ToDouble() constEule::Vector4< T >
ToInt() constEule::Vector4< T >
upEule::Vector4< T >static
Vector4()Eule::Vector4< T >inline
Vector4(T _x, T _y, T _z, T _w)Eule::Vector4< T >inline
Vector4(const Vector4< T > &other)=defaultEule::Vector4< T >
Vector4(Vector4< T > &&other) noexcept=defaultEule::Vector4< T >
VectorScale(const Vector4< T > &scalar) constEule::Vector4< T >
wEule::Vector4< T >
xEule::Vector4< T >
yEule::Vector4< T >
zEule::Vector4< T >
zeroEule::Vector4< T >static
+ + + + diff --git a/Doxygen/build/classEule_1_1Vector4.html b/Doxygen/build/classEule_1_1Vector4.html new file mode 100644 index 0000000..08822ad --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector4.html @@ -0,0 +1,1703 @@ + + + + + + + +Leonetienne/Eule: Eule::Vector4< T > Class Template Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
Eule::Vector4< T > Class Template Reference
+
+
+ +

Representation of a 4d vector. + More...

+ +

#include <Vector2.h>

+
+Collaboration diagram for Eule::Vector4< T >:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Vector4 ()
 
 Vector4 (T _x, T _y, T _z, T _w)
 
 Vector4 (const Vector4< T > &other)=default
 
 Vector4 (Vector4< T > &&other) noexcept=default
 
double SqrMagnitude () const
 Will compute the square magnitude. More...
 
double Magnitude () const
 Will compute the magnitude. More...
 
Vector4< double > Normalize () const
 Will return the normalization of this vector. More...
 
void NormalizeSelf ()
 Will normalize this vector. More...
 
Vector4< T > VectorScale (const Vector4< T > &scalar) const
 Will scale self.n by scalar.n. More...
 
void LerpSelf (const Vector4< T > &other, double t)
 Will lerp itself towards other by t. More...
 
Vector4< double > Lerp (const Vector4< T > &other, double t) const
 Will return a lerp result between this and another vector. More...
 
bool Similar (const Vector4< T > &other, double epsilon=0.00001) const
 Will compare if two vectors are similar to a certain epsilon value. More...
 
Vector4< int > ToInt () const
 Will convert this vector to a Vector4i. More...
 
Vector4< double > ToDouble () const
 Will convert this vector to a Vector4d. More...
 
T & operator[] (std::size_t idx)
 
const T & operator[] (std::size_t idx) const
 
Vector4< T > operator+ (const Vector4< T > &other) const
 
void operator+= (const Vector4< T > &other)
 
Vector4< T > operator- (const Vector4< T > &other) const
 
void operator-= (const Vector4< T > &other)
 
Vector4< T > operator* (const T scale) const
 
void operator*= (const T scale)
 
Vector4< T > operator/ (const T scale) const
 
void operator/= (const T scale)
 
Vector4< T > operator* (const Matrix4x4 &mat) const
 
void operator*= (const Matrix4x4 &mat)
 
Vector4< T > operator- () const
 
 operator Vector2< T > () const
 
 operator Vector3< T > () const
 Conversion method. More...
 
void operator= (const Vector4< T > &other)
 Conversion method. More...
 
void operator= (Vector4< T > &&other) noexcept
 
bool operator== (const Vector4< T > &other) const
 
bool operator!= (const Vector4< T > &other) const
 
+ + + + + + + + + +

+Public Attributes

x
 
y
 
z
 
w
 
+ + + + + + + + + + + + + + + + + + + + + +

+Static Public Attributes

static const Vector4< double > up
 
static const Vector4< double > down
 
static const Vector4< double > right
 
static const Vector4< double > left
 
static const Vector4< double > forward
 
static const Vector4< double > backward
 
static const Vector4< double > future
 
static const Vector4< double > past
 
static const Vector4< double > one
 
static const Vector4< double > zero
 
+ + + + + +

+Friends

std::ostream & operator<< (std::ostream &os, const Vector4< T > &v)
 
std::wostream & operator<< (std::wostream &os, const Vector4< T > &v)
 
+

Detailed Description

+

template<typename T>
+class Eule::Vector4< T >

+ +

Representation of a 4d vector.

+

Contains a lot of utility methods.

+ +

Definition at line 8 of file Vector2.h.

+

Constructor & Destructor Documentation

+ +

◆ Vector4() [1/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
Eule::Vector4< T >::Vector4 ()
+
+inline
+
+ +

Definition at line 20 of file Vector4.h.

+
20 : x{ 0 }, y{ 0 }, z{ 0 }, w{ 0 } {}
+
+
+
+ +

◆ Vector4() [2/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Eule::Vector4< T >::Vector4 (_x,
_y,
_z,
_w 
)
+
+inline
+
+ +

Definition at line 21 of file Vector4.h.

+
21 : x{ _x }, y{ _y }, z{ _z }, w{ _w } {}
+
+
+
+ +

◆ Vector4() [3/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Eule::Vector4< T >::Vector4 (const Vector4< T > & other)
+
+default
+
+ +
+
+ +

◆ Vector4() [4/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Eule::Vector4< T >::Vector4 (Vector4< T > && other)
+
+defaultnoexcept
+
+ +
+
+

Member Function Documentation

+ +

◆ Lerp()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
Vector4< double > Vector4::Lerp (const Vector4< T > & other,
double t 
) const
+
+ +

Will return a lerp result between this and another vector.

+ +

Definition at line 287 of file Vector4.cpp.

+
288 {
+
289  Vector4d copy(this->ToDouble());
+
290  copy.LerpSelf(other.ToDouble(), t);
+
291 
+
292  return copy;
+
293 }
+
+
+
+ +

◆ LerpSelf()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
void Vector4::LerpSelf (const Vector4< T > & other,
double t 
)
+
+ +

Will lerp itself towards other by t.

+ +

Definition at line 267 of file Vector4.cpp.

+
268 {
+
269  const double it = 1.0 - t;
+
270 
+
271  x = (int)(it * (double)x + t * (double)other.x);
+
272  y = (int)(it * (double)y + t * (double)other.y);
+
273  z = (int)(it * (double)z + t * (double)other.z);
+
274  w = (int)(it * (double)w + t * (double)other.w);
+
275 
+
276  return;
+
277 }
+
+
+
+ +

◆ Magnitude()

+ +
+
+
+template<typename T >
+ + + + +
double Vector4::Magnitude
+
+ +

Will compute the magnitude.

+ +

Definition at line 38 of file Vector4.cpp.

+
39 {
+
40  return sqrt(SqrMagnitude());
+
41 }
+
+
+
+ +

◆ Normalize()

+ +
+
+
+template<typename T >
+ + + + +
Vector4< double > Vector4::Normalize
+
+ +

Will return the normalization of this vector.

+ +

Definition at line 92 of file Vector4.cpp.

+
93 {
+
94  Vector4<double> norm(x, y, z, w);
+
95  norm.NormalizeSelf();
+
96 
+
97  return norm;
+
98 }
+
+
+
+ +

◆ NormalizeSelf()

+ +
+
+
+template<typename T >
+ + + + + + + +
void Vector4::NormalizeSelf ()
+
+ +

Will normalize this vector.

+ +

Definition at line 148 of file Vector4.cpp.

+
149 {
+
150  std::cerr << "Stop normalizing int-vectors!!" << std::endl;
+
151  x = 0;
+
152  y = 0;
+
153  z = 0;
+
154  w = 0;
+
155 
+
156  return;
+
157 }
+
+
+
+ +

◆ operator Vector2< T >()

+ +
+
+
+template<typename T >
+ + + + +
Vector4::operator Vector2< T >
+
+ +

Definition at line 775 of file Vector4.cpp.

+
776 {
+
777  return Vector2<T>(x, y);
+
778 }
+
+
+
+ +

◆ operator Vector3< T >()

+ +
+
+
+template<typename T >
+ + + + +
Vector4::operator Vector3< T >
+
+ +

Conversion method.

+ +

Definition at line 781 of file Vector4.cpp.

+
782 {
+
783  return Vector3<T>(x, y, z);
+
784 }
+
+
+
+ +

◆ operator!=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
bool Vector4::operator!= (const Vector4< T > & other) const
+
+ +

Definition at line 767 of file Vector4.cpp.

+
768 {
+
769  return !operator==(other);
+
770 }
+
+
+
+ +

◆ operator*() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector4< int > Vector4::operator* (const Matrix4x4mat) const
+
+ +

Definition at line 684 of file Vector4.cpp.

+
685 {
+
686  Vector4<double> newVec;
+
687 
+
688  newVec.x = (mat[0][0] * x) + (mat[0][1] * y) + (mat[0][2] * z) + (mat[0][3] * w);
+
689  newVec.y = (mat[1][0] * x) + (mat[1][1] * y) + (mat[1][2] * z) + (mat[1][3] * w);
+
690  newVec.z = (mat[2][0] * x) + (mat[2][1] * y) + (mat[2][2] * z) + (mat[2][3] * w);
+
691  newVec.w = (mat[3][0] * x) + (mat[3][1] * y) + (mat[3][2] * z) + (mat[3][3] * w);
+
692 
+
693  return Vector4<int>(
+
694  (int)newVec.x,
+
695  (int)newVec.y,
+
696  (int)newVec.z,
+
697  (int)newVec.w
+
698  );
+
699 }
+
+
+
+ +

◆ operator*() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector4< T > Vector4::operator* (const T scale) const
+
+ +

Definition at line 512 of file Vector4.cpp.

+
513 {
+
514  return Vector4<T>(
+
515  x * scale,
+
516  y * scale,
+
517  z * scale,
+
518  w * scale
+
519  );
+
520 }
+
+
+
+ +

◆ operator*=() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector4::operator*= (const Matrix4x4mat)
+
+ +

Definition at line 752 of file Vector4.cpp.

+
753 {
+
754  Vector4<double> buffer(x, y, z, w);
+
755 
+
756  // Should this still be reversed...? like, instead of mat[x][y], use mat[y][m]
+
757  // idk right now. check that if something doesn't work
+
758  x = (int)((mat[0][0] * buffer.x) + (mat[0][1] * buffer.y) + (mat[0][2] * buffer.z) + (mat[0][3] * buffer.w));
+
759  y = (int)((mat[1][0] * buffer.x) + (mat[1][1] * buffer.y) + (mat[1][2] * buffer.z) + (mat[1][3] * buffer.w));
+
760  z = (int)((mat[2][0] * buffer.x) + (mat[2][1] * buffer.y) + (mat[2][2] * buffer.z) + (mat[2][3] * buffer.w));
+
761  w = (int)((mat[3][0] * buffer.x) + (mat[3][1] * buffer.y) + (mat[3][2] * buffer.z) + (mat[3][3] * buffer.w));
+
762 
+
763  return;
+
764 }
+
+
+
+ +

◆ operator*=() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector4::operator*= (const T scale)
+
+ +

Definition at line 557 of file Vector4.cpp.

+
558 {
+
559  x *= scale;
+
560  y *= scale;
+
561  z *= scale;
+
562  w *= scale;
+
563  return;
+
564 }
+
+
+
+ +

◆ operator+()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector4< T > Vector4::operator+ (const Vector4< T > & other) const
+
+ +

Definition at line 331 of file Vector4.cpp.

+
332 {
+
333  return Vector4<T>(
+
334  x + other.x,
+
335  y + other.y,
+
336  z + other.z,
+
337  w + other.w
+
338  );
+
339 }
+
+
+
+ +

◆ operator+=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector4::operator+= (const Vector4< T > & other)
+
+ +

Definition at line 376 of file Vector4.cpp.

+
377 {
+
378  x += other.x;
+
379  y += other.y;
+
380  z += other.z;
+
381  w += other.w;
+
382  return;
+
383 }
+
+
+
+ +

◆ operator-() [1/2]

+ +
+
+
+template<typename T >
+ + + + +
Vector4< T > Vector4::operator-
+
+ +

Definition at line 719 of file Vector4.cpp.

+
720 {
+
721  return Vector4<T>(
+
722  -x,
+
723  -y,
+
724  -z,
+
725  -w
+
726  );
+
727 }
+
+
+
+ +

◆ operator-() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector4< T > Vector4::operator- (const Vector4< T > & other) const
+
+ +

Definition at line 421 of file Vector4.cpp.

+
422 {
+
423  return Vector4<T>(
+
424  x - other.x,
+
425  y - other.y,
+
426  z - other.z,
+
427  w - other.w
+
428  );
+
429 }
+
+
+
+ +

◆ operator-=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector4::operator-= (const Vector4< T > & other)
+
+ +

Definition at line 466 of file Vector4.cpp.

+
467 {
+
468  x -= other.x;
+
469  y -= other.y;
+
470  z -= other.z;
+
471  w -= other.w;
+
472  return;
+
473 }
+
+
+
+ +

◆ operator/()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector4< T > Vector4::operator/ (const T scale) const
+
+ +

Definition at line 603 of file Vector4.cpp.

+
604 {
+
605  return Vector4<T>(
+
606  x / scale,
+
607  y / scale,
+
608  z / scale,
+
609  w / scale
+
610  );
+
611 }
+
+
+
+ +

◆ operator/=()

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector4::operator/= (const T scale)
+
+ +

Definition at line 647 of file Vector4.cpp.

+
648 {
+
649  x /= scale;
+
650  y /= scale;
+
651  z /= scale;
+
652  w /= scale;
+
653  return;
+
654 }
+
+
+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
void Vector4::operator= (const Vector4< T > & other)
+
+ +

Conversion method.

+ +

Definition at line 730 of file Vector4.cpp.

+
731 {
+
732  x = other.x;
+
733  y = other.y;
+
734  z = other.z;
+
735  w = other.w;
+
736 
+
737  return;
+
738 }
+
+
+
+ +

◆ operator=() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void Vector4::operator= (Vector4< T > && other)
+
+noexcept
+
+ +

Definition at line 741 of file Vector4.cpp.

+
742 {
+
743  x = std::move(other.x);
+
744  y = std::move(other.y);
+
745  z = std::move(other.z);
+
746  w = std::move(other.w);
+
747 
+
748  return;
+
749 }
+
+
+
+ +

◆ operator==()

+ +
+
+
+template<typename T >
+ + + + + + + + +
bool Vector4::operator== (const Vector4< T > & other) const
+
+ +

Definition at line 659 of file Vector4.cpp.

+
660 {
+
661  return
+
662  (x == other.x) &&
+
663  (y == other.y) &&
+
664  (z == other.z) &&
+
665  (w == other.w);
+
666 }
+
+
+
+ +

◆ operator[]() [1/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
T & Vector4::operator[] (std::size_t idx)
+
+ +

Definition at line 185 of file Vector4.cpp.

+
186 {
+
187  switch (idx)
+
188  {
+
189  case 0:
+
190  return x;
+
191  case 1:
+
192  return y;
+
193  case 2:
+
194  return z;
+
195  case 3:
+
196  return w;
+
197  default:
+
198  throw std::out_of_range("Array descriptor on Vector4<T> out of range!");
+
199  }
+
200 }
+
+
+
+ +

◆ operator[]() [2/2]

+ +
+
+
+template<typename T >
+ + + + + + + + +
const T & Vector4::operator[] (std::size_t idx) const
+
+ +

Definition at line 203 of file Vector4.cpp.

+
204 {
+
205  switch (idx)
+
206  {
+
207  case 0:
+
208  return x;
+
209  case 1:
+
210  return y;
+
211  case 2:
+
212  return z;
+
213  case 3:
+
214  return w;
+
215  default:
+
216  throw std::out_of_range("Array descriptor on Vector4<T> out of range!");
+
217  }
+
218 }
+
+
+
+ +

◆ Similar()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
bool Vector4::Similar (const Vector4< T > & other,
double epsilon = 0.00001 
) const
+
+ +

Will compare if two vectors are similar to a certain epsilon value.

+ +

Definition at line 162 of file Vector4.cpp.

+
163 {
+
164  return
+
165  (::Math::Similar(x, other.x, epsilon)) &&
+
166  (::Math::Similar(y, other.y, epsilon)) &&
+
167  (::Math::Similar(z, other.z, epsilon)) &&
+
168  (::Math::Similar(w, other.w, epsilon))
+
169  ;
+
170 }
+
+
+
+ +

◆ SqrMagnitude()

+ +
+
+
+template<typename T >
+ + + + + + + +
double Vector4::SqrMagnitude () const
+
+ +

Will compute the square magnitude.

+ +

Definition at line 31 of file Vector4.cpp.

+
32 {
+
33  int iSqrMag = x*x + y*y + z*z + w*w;
+
34  return (double)iSqrMag;
+
35 }
+
+
+
+ +

◆ ToDouble()

+ +
+
+
+template<typename T >
+ + + + +
Vector4< double > Vector4::ToDouble
+
+ +

Will convert this vector to a Vector4d.

+ +

Definition at line 179 of file Vector4.cpp.

+
180 {
+
181  return Vector4<double>((double)x, (double)y, (double)z, (double)w);
+
182 }
+
+
+
+ +

◆ ToInt()

+ +
+
+
+template<typename T >
+ + + + +
Vector4< int > Vector4::ToInt
+
+ +

Will convert this vector to a Vector4i.

+ +

Definition at line 173 of file Vector4.cpp.

+
174 {
+
175  return Vector4<int>((int)x, (int)y, (int)z, (int)w);
+
176 }
+
+
+
+ +

◆ VectorScale()

+ +
+
+
+template<typename T >
+ + + + + + + + +
Vector4< int > Vector4::VectorScale (const Vector4< T > & scalar) const
+
+ +

Will scale self.n by scalar.n.

+ +

Definition at line 79 of file Vector4.cpp.

+
80 {
+
81  return Vector4<int>(
+
82  x * scalar.x,
+
83  y * scalar.y,
+
84  z * scalar.z,
+
85  w * scalar.w
+
86  );
+
87 }
+
+
+
+

Friends And Related Function Documentation

+ +

◆ operator<< [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& operator<< (std::ostream & os,
const Vector4< T > & v 
)
+
+friend
+
+ +

Definition at line 79 of file Vector4.h.

+
80  {
+
81  return os << "[x: " << v.x << " y: " << v.y << " z: " << v.z << " w: " << v.w << "]";
+
82  }
+
+
+
+ +

◆ operator<< [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::wostream& operator<< (std::wostream & os,
const Vector4< T > & v 
)
+
+friend
+
+ +

Definition at line 83 of file Vector4.h.

+
84  {
+
85  return os << L"[x: " << v.x << L" y: " << v.y << L" z: " << v.z << L" w: " << v.w << L"]";
+
86  }
+
+
+
+

Member Data Documentation

+ +

◆ backward

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::backward
+
+static
+
+ +

Definition at line 99 of file Vector4.h.

+ +
+
+ +

◆ down

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::down
+
+static
+
+ +

Definition at line 95 of file Vector4.h.

+ +
+
+ +

◆ forward

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::forward
+
+static
+
+ +

Definition at line 98 of file Vector4.h.

+ +
+
+ +

◆ future

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::future
+
+static
+
+ +

Definition at line 100 of file Vector4.h.

+ +
+
+ +

◆ left

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::left
+
+static
+
+ +

Definition at line 97 of file Vector4.h.

+ +
+
+ +

◆ one

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::one
+
+static
+
+ +

Definition at line 102 of file Vector4.h.

+ +
+
+ +

◆ past

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::past
+
+static
+
+ +

Definition at line 101 of file Vector4.h.

+ +
+
+ +

◆ right

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::right
+
+static
+
+ +

Definition at line 96 of file Vector4.h.

+ +
+
+ +

◆ up

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::up
+
+static
+
+ +

Definition at line 94 of file Vector4.h.

+ +
+
+ +

◆ w

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector4< T >::w
+
+ +

Definition at line 91 of file Vector4.h.

+ +
+
+ +

◆ x

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector4< T >::x
+
+ +

Definition at line 88 of file Vector4.h.

+ +
+
+ +

◆ y

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector4< T >::y
+
+ +

Definition at line 89 of file Vector4.h.

+ +
+
+ +

◆ z

+ +
+
+
+template<typename T >
+ + + + +
T Eule::Vector4< T >::z
+
+ +

Definition at line 90 of file Vector4.h.

+ +
+
+ +

◆ zero

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
const Vector4< double > Vector4::zero
+
+static
+
+ +

Definition at line 103 of file Vector4.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+ + + +
Vector4< double > ToDouble() const
Will convert this vector to a Vector4d.
Definition: Vector4.cpp:179
+
Representation of a 2d vector.
Definition: Vector2.h:14
+
bool operator==(const Vector4< T > &other) const
Definition: Vector4.cpp:659
+
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+ + + + + + diff --git a/Doxygen/build/classEule_1_1Vector4__coll__graph.map b/Doxygen/build/classEule_1_1Vector4__coll__graph.map new file mode 100644 index 0000000..4c69d0c --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doxygen/build/classEule_1_1Vector4__coll__graph.md5 b/Doxygen/build/classEule_1_1Vector4__coll__graph.md5 new file mode 100644 index 0000000..f5ae0ed --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector4__coll__graph.md5 @@ -0,0 +1 @@ +09796771b7af89436ab56cfd53f68a29 \ No newline at end of file diff --git a/Doxygen/build/classEule_1_1Vector4__coll__graph.png b/Doxygen/build/classEule_1_1Vector4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fe84ceadb80cf4e946f7923a417122707ec2b9c9 GIT binary patch literal 14909 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 + + + + + + +Leonetienne/Eule: Class Index + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
c | m | q | r | t | v
+ + + + + + + + + + + + + + + + + + + + + + + + +
  c  
+
Matrix4x4 (Eule)   
  t  
+
Vector3 (Eule)   
  q  
+
Vector4 (Eule)   
Collider (Eule)   TrapazoidalPrismCollider (Eule)   
  m  
+
Quaternion (Eule)   
  v  
+
  r  
+
Math (Eule)   Vector2 (Eule)   
Rect (Eule)   
+
c | m | q | r | t | v
+
+ + + + diff --git a/Doxygen/build/closed.png b/Doxygen/build/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/Doxygen/build/dir_1fefb9009d41306f82e23dc917083c9e.html b/Doxygen/build/dir_1fefb9009d41306f82e23dc917083c9e.html new file mode 100644 index 0000000..2d95d71 --- /dev/null +++ b/Doxygen/build/dir_1fefb9009d41306f82e23dc917083c9e.html @@ -0,0 +1,88 @@ + + + + + + + +Leonetienne/Eule: Eule/x64/Release Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Release Directory Reference
+
+
+
+ + + + diff --git a/Doxygen/build/dir_29a3c7679fa29c698d8a016dea7d0b26.html b/Doxygen/build/dir_29a3c7679fa29c698d8a016dea7d0b26.html new file mode 100644 index 0000000..51dd381 --- /dev/null +++ b/Doxygen/build/dir_29a3c7679fa29c698d8a016dea7d0b26.html @@ -0,0 +1,135 @@ + + + + + + + +Leonetienne/Eule: Eule Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Eule Directory Reference
+
+
+ + + + + + +

+Directories

directory  Debug
 
directory  x64
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  Collider.cpp [code]
 
file  Collider.h [code]
 
file  Constants.h [code]
 
file  Math.cpp [code]
 
file  Math.h [code]
 
file  Matrix4x4.cpp [code]
 
file  Matrix4x4.h [code]
 
file  Quaternion.cpp [code]
 
file  Quaternion.h [code]
 
file  Rect.h [code]
 
file  TrapazoidalPrismCollider.cpp [code]
 
file  TrapazoidalPrismCollider.h [code]
 
file  Vector2.cpp [code]
 
file  Vector2.h [code]
 
file  Vector3.cpp [code]
 
file  Vector3.h [code]
 
file  Vector4.cpp [code]
 
file  Vector4.h [code]
 
+
+ + + + diff --git a/Doxygen/build/dir_b9243fac9f130637c8e868960898670e.html b/Doxygen/build/dir_b9243fac9f130637c8e868960898670e.html new file mode 100644 index 0000000..2ea8d6e --- /dev/null +++ b/Doxygen/build/dir_b9243fac9f130637c8e868960898670e.html @@ -0,0 +1,96 @@ + + + + + + + +Leonetienne/Eule: Eule/x64 Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
x64 Directory Reference
+
+
+ + + + + + +

+Directories

directory  Debug
 
directory  Release
 
+
+ + + + diff --git a/Doxygen/build/dir_c806cfdecfdfd6ea1cddf5ffe1bf0281.html b/Doxygen/build/dir_c806cfdecfdfd6ea1cddf5ffe1bf0281.html new file mode 100644 index 0000000..a947677 --- /dev/null +++ b/Doxygen/build/dir_c806cfdecfdfd6ea1cddf5ffe1bf0281.html @@ -0,0 +1,88 @@ + + + + + + + +Leonetienne/Eule: Eule/Debug Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Debug Directory Reference
+
+
+
+ + + + diff --git a/Doxygen/build/dir_e847076a3068559a2237d545d5d06d37.html b/Doxygen/build/dir_e847076a3068559a2237d545d5d06d37.html new file mode 100644 index 0000000..b658d6e --- /dev/null +++ b/Doxygen/build/dir_e847076a3068559a2237d545d5d06d37.html @@ -0,0 +1,88 @@ + + + + + + + +Leonetienne/Eule: Eule/x64/Debug Directory Reference + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Debug Directory Reference
+
+
+
+ + + + diff --git a/Doxygen/build/doc.png b/Doxygen/build/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/Doxygen/build/doxygen.css b/Doxygen/build/doxygen.css new file mode 100644 index 0000000..73ecbb2 --- /dev/null +++ b/Doxygen/build/doxygen.css @@ -0,0 +1,1771 @@ +/* The standard CSS for doxygen 1.8.17 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, p.intertd, p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #FFFFFF; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/Doxygen/build/doxygen.png b/Doxygen/build/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 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 literal 0 HcmV?d00001 diff --git a/Doxygen/build/dynsections.js b/Doxygen/build/dynsections.js new file mode 100644 index 0000000..c8e84aa --- /dev/null +++ b/Doxygen/build/dynsections.js @@ -0,0 +1,127 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Leonetienne/Eule: File List + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
+ + + + diff --git a/Doxygen/build/folderclosed.png b/Doxygen/build/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/Doxygen/build/functions.html b/Doxygen/build/functions.html new file mode 100644 index 0000000..8285919 --- /dev/null +++ b/Doxygen/build/functions.html @@ -0,0 +1,96 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/Doxygen/build/functions_b.html b/Doxygen/build/functions_b.html new file mode 100644 index 0000000..b04f2ff --- /dev/null +++ b/Doxygen/build/functions_b.html @@ -0,0 +1,97 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/Doxygen/build/functions_c.html b/Doxygen/build/functions_c.html new file mode 100644 index 0000000..e1e0e12 --- /dev/null +++ b/Doxygen/build/functions_c.html @@ -0,0 +1,101 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/Doxygen/build/functions_d.html b/Doxygen/build/functions_d.html new file mode 100644 index 0000000..88c242a --- /dev/null +++ b/Doxygen/build/functions_d.html @@ -0,0 +1,102 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/Doxygen/build/functions_e.html b/Doxygen/build/functions_e.html new file mode 100644 index 0000000..38f36f6 --- /dev/null +++ b/Doxygen/build/functions_e.html @@ -0,0 +1,87 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/Doxygen/build/functions_f.html b/Doxygen/build/functions_f.html new file mode 100644 index 0000000..ededa47 --- /dev/null +++ b/Doxygen/build/functions_f.html @@ -0,0 +1,97 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- f -

+
+ + + + diff --git a/Doxygen/build/functions_func.html b/Doxygen/build/functions_func.html new file mode 100644 index 0000000..166181b --- /dev/null +++ b/Doxygen/build/functions_func.html @@ -0,0 +1,428 @@ + + + + + + + +Leonetienne/Eule: Class Members - Functions + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- ~ -

+
+ + + + diff --git a/Doxygen/build/functions_g.html b/Doxygen/build/functions_g.html new file mode 100644 index 0000000..1a811f1 --- /dev/null +++ b/Doxygen/build/functions_g.html @@ -0,0 +1,99 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- g -

+
+ + + + diff --git a/Doxygen/build/functions_h.html b/Doxygen/build/functions_h.html new file mode 100644 index 0000000..30c2a60 --- /dev/null +++ b/Doxygen/build/functions_h.html @@ -0,0 +1,87 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- h -

+
+ + + + diff --git a/Doxygen/build/functions_i.html b/Doxygen/build/functions_i.html new file mode 100644 index 0000000..8cd289e --- /dev/null +++ b/Doxygen/build/functions_i.html @@ -0,0 +1,102 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- i -

+
+ + + + diff --git a/Doxygen/build/functions_j.html b/Doxygen/build/functions_j.html new file mode 100644 index 0000000..a916671 --- /dev/null +++ b/Doxygen/build/functions_j.html @@ -0,0 +1,87 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- j -

+
+ + + + diff --git a/Doxygen/build/functions_k.html b/Doxygen/build/functions_k.html new file mode 100644 index 0000000..afdb2d2 --- /dev/null +++ b/Doxygen/build/functions_k.html @@ -0,0 +1,87 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- k -

+
+ + + + diff --git a/Doxygen/build/functions_l.html b/Doxygen/build/functions_l.html new file mode 100644 index 0000000..25c5ba0 --- /dev/null +++ b/Doxygen/build/functions_l.html @@ -0,0 +1,107 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/Doxygen/build/functions_m.html b/Doxygen/build/functions_m.html new file mode 100644 index 0000000..bb17537 --- /dev/null +++ b/Doxygen/build/functions_m.html @@ -0,0 +1,104 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/Doxygen/build/functions_n.html b/Doxygen/build/functions_n.html new file mode 100644 index 0000000..1e11bf9 --- /dev/null +++ b/Doxygen/build/functions_n.html @@ -0,0 +1,97 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/Doxygen/build/functions_o.html b/Doxygen/build/functions_o.html new file mode 100644 index 0000000..6510862 --- /dev/null +++ b/Doxygen/build/functions_o.html @@ -0,0 +1,194 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/Doxygen/build/functions_p.html b/Doxygen/build/functions_p.html new file mode 100644 index 0000000..2ba886d --- /dev/null +++ b/Doxygen/build/functions_p.html @@ -0,0 +1,93 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/Doxygen/build/functions_q.html b/Doxygen/build/functions_q.html new file mode 100644 index 0000000..996bbbe --- /dev/null +++ b/Doxygen/build/functions_q.html @@ -0,0 +1,87 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- q -

+
+ + + + diff --git a/Doxygen/build/functions_r.html b/Doxygen/build/functions_r.html new file mode 100644 index 0000000..e383c4a --- /dev/null +++ b/Doxygen/build/functions_r.html @@ -0,0 +1,113 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- r -

+
+ + + + diff --git a/Doxygen/build/functions_rela.html b/Doxygen/build/functions_rela.html new file mode 100644 index 0000000..a05267d --- /dev/null +++ b/Doxygen/build/functions_rela.html @@ -0,0 +1,89 @@ + + + + + + + +Leonetienne/Eule: Class Members - Related Functions + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/Doxygen/build/functions_s.html b/Doxygen/build/functions_s.html new file mode 100644 index 0000000..fa0980f --- /dev/null +++ b/Doxygen/build/functions_s.html @@ -0,0 +1,108 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/Doxygen/build/functions_t.html b/Doxygen/build/functions_t.html new file mode 100644 index 0000000..14eee67 --- /dev/null +++ b/Doxygen/build/functions_t.html @@ -0,0 +1,112 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/Doxygen/build/functions_u.html b/Doxygen/build/functions_u.html new file mode 100644 index 0000000..2a2d7b3 --- /dev/null +++ b/Doxygen/build/functions_u.html @@ -0,0 +1,92 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/Doxygen/build/functions_v.html b/Doxygen/build/functions_v.html new file mode 100644 index 0000000..7f0aa9e --- /dev/null +++ b/Doxygen/build/functions_v.html @@ -0,0 +1,101 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- v -

+
+ + + + diff --git a/Doxygen/build/functions_vars.html b/Doxygen/build/functions_vars.html new file mode 100644 index 0000000..7d31058 --- /dev/null +++ b/Doxygen/build/functions_vars.html @@ -0,0 +1,316 @@ + + + + + + + +Leonetienne/Eule: Class Members - Variables + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- j -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- w -

+ + +

- x -

+ + +

- y -

+ + +

- z -

+
+ + + + diff --git a/Doxygen/build/functions_w.html b/Doxygen/build/functions_w.html new file mode 100644 index 0000000..24f19aa --- /dev/null +++ b/Doxygen/build/functions_w.html @@ -0,0 +1,87 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- w -

+
+ + + + diff --git a/Doxygen/build/functions_x.html b/Doxygen/build/functions_x.html new file mode 100644 index 0000000..1169760 --- /dev/null +++ b/Doxygen/build/functions_x.html @@ -0,0 +1,89 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- x -

+
+ + + + diff --git a/Doxygen/build/functions_y.html b/Doxygen/build/functions_y.html new file mode 100644 index 0000000..703a0f7 --- /dev/null +++ b/Doxygen/build/functions_y.html @@ -0,0 +1,89 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- y -

+
+ + + + diff --git a/Doxygen/build/functions_z.html b/Doxygen/build/functions_z.html new file mode 100644 index 0000000..8fd38aa --- /dev/null +++ b/Doxygen/build/functions_z.html @@ -0,0 +1,93 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- z -

+
+ + + + diff --git a/Doxygen/build/functions_~.html b/Doxygen/build/functions_~.html new file mode 100644 index 0000000..33131f7 --- /dev/null +++ b/Doxygen/build/functions_~.html @@ -0,0 +1,87 @@ + + + + + + + +Leonetienne/Eule: Class Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- ~ -

+
+ + + + diff --git a/Doxygen/build/globals.html b/Doxygen/build/globals.html new file mode 100644 index 0000000..0336f46 --- /dev/null +++ b/Doxygen/build/globals.html @@ -0,0 +1,97 @@ + + + + + + + +Leonetienne/Eule: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
+
+ + + + diff --git a/Doxygen/build/globals_defs.html b/Doxygen/build/globals_defs.html new file mode 100644 index 0000000..3acdd0e --- /dev/null +++ b/Doxygen/build/globals_defs.html @@ -0,0 +1,97 @@ + + + + + + + +Leonetienne/Eule: File Members + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/Doxygen/build/graph_legend.html b/Doxygen/build/graph_legend.html new file mode 100644 index 0000000..e49e39c --- /dev/null +++ b/Doxygen/build/graph_legend.html @@ -0,0 +1,144 @@ + + + + + + + +Leonetienne/Eule: Graph Legend + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+ + + + diff --git a/Doxygen/build/graph_legend.md5 b/Doxygen/build/graph_legend.md5 new file mode 100644 index 0000000..8fcdccd --- /dev/null +++ b/Doxygen/build/graph_legend.md5 @@ -0,0 +1 @@ +f51bf6e9a10430aafef59831b08dcbfe \ No newline at end of file diff --git a/Doxygen/build/graph_legend.png b/Doxygen/build/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2cbcfb2d143e382be6ed65635a3d859e53bc36 GIT binary patch literal 20615 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 literal 0 HcmV?d00001 diff --git a/Doxygen/build/hierarchy.html b/Doxygen/build/hierarchy.html new file mode 100644 index 0000000..ae2b2ae --- /dev/null +++ b/Doxygen/build/hierarchy.html @@ -0,0 +1,102 @@ + + + + + + + +Leonetienne/Eule: Class Hierarchy + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + +
 CEule::ColliderAbstract class of a collider domain
 CEule::TrapazoidalPrismColliderA collider describing a trapazoidal prism
 CEule::MathMath utility class
 CEule::Matrix4x4A matrix 4x4 class representing a 3d transformation
 CEule::Quaternion3D rotation representation
 CEule::RectTrivial data structure representing a rectangle
 CEule::Vector2< T >Representation of a 2d vector
 CEule::Vector2< double >
 CEule::Vector3< T >Representation of a 3d vector
 CEule::Vector3< double >
 CEule::Vector4< T >Representation of a 4d vector
 CEule::Vector4< double >
+
+
+ + + + diff --git a/Doxygen/build/index.html b/Doxygen/build/index.html new file mode 100644 index 0000000..ae08c61 --- /dev/null +++ b/Doxygen/build/index.html @@ -0,0 +1,84 @@ + + + + + + + +Leonetienne/Eule: Main Page + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Leonetienne/Eule Documentation
+
+
+
+ + + + diff --git a/Doxygen/build/inherit_graph_0.map b/Doxygen/build/inherit_graph_0.map new file mode 100644 index 0000000..40c0fac --- /dev/null +++ b/Doxygen/build/inherit_graph_0.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doxygen/build/inherit_graph_0.md5 b/Doxygen/build/inherit_graph_0.md5 new file mode 100644 index 0000000..92d61c3 --- /dev/null +++ b/Doxygen/build/inherit_graph_0.md5 @@ -0,0 +1 @@ +faecc536e16ff6fdde92040a1b4025d5 \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_0.png b/Doxygen/build/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3d3407f9e906e920171b8a154373410abe5c0b04 GIT binary patch literal 2620 zcmV-C3d8k@P)nG_#4PZK@>rq`M!h2PYAa8bE^y&WANP+j zy|bk)V@0OL^GW}hIdkTm@BDth^PAH%%@k3q)c^v4KnQ|Fv;YVM@?8US5Cj4t5}1P^ z5D1aL90Y+th{O`R)7;#glaoV~l*L3DOUN~UuUH%BTfDVHRta1W zfxZufP7Dn0SL|A)i?opH5FtBf7A()bV_Fftj!H z&{)#i+IrKbO-)Tr-?Tem{sY9wc~DA9iWA|wQJWtdGcg*bhNCj zOfHw#*4BQb?!Gl2K1|-c`Iyfa{_w-;GiUCL#r;Gp`acWcQ!6VgP5XQH>`6#SK(`eN z#k}`LAgCo}GMT@>e`sjv@bK`r>uV7Vkoo*B=IrdOxp_*ZQUpQ9#>TYjOiWCqq@=jH zx!Ks*@OZqwzCN@(D=TZwnl)P6YPI^%p+oWU@fR*!ShsE+nN0Ta@ev3F5fKppfZ^fc z=;&yBdwT~5hl2+Xe)#agusrNkb6{YA$K%mxG;eS3+qZAeDUZ!&XJ%$@*|Npj+Pb2m z;!7{*{$tp>mh-kLJ+KGlhqd3ih@f*>RkiOFQ1Idewy zdKosGee&c` z5!>CROP82TCWS)ba=A~RKGj@oYHBK%%cWAO-rnA=t*sX?UUYVLrqk(3Nl7Y|3M`fZ zve4^6v9Yml-n?mSZ0zsv_w@7(3kyT7sgqZ)UiJ3&#>U3#JQ@)ZA(zX=VsU$WyF?;6 zaNq!b8Ih5ZR#sMBU0t=cwZ+B7c;sEbeqA6CjE#-$+qVyAFP}as>g!(|JzDDRo%z#G zC5?^$Rw`9WrAnnTgY1K!FY>8Au;#sg|GrwSo|&1sbLY;@n>WkL%Qe*s3JOl2J}s3> zBO@bs?%X*tG6De5SwA>9STpB3b?TI#pC5Fs8*{tY}jz^+BHp~OeRC?D3wYYjn>i8p|7LH z#zp`@e}Dh%LvP={1pxH)^q{-XpFalxynFW!+nv7cuC6Wsz|hbTT8`cxM@B{r$YZfs z=zVWaL?RIYNNelc%*;EUo*7O~$6Q?g?&x?-=f~gwUwGR58cfZn8nEBR4479a6h=ly zYN};qWM~d~d3hBU78Y&R7z}J-Z*TAV_3L%kx3jYY0LWxA7Z(?;LlTL^($do1-5uRU z=lK$e#L>}lP8m|EltQ7{+uNhN9v&WehaZcC+7!}T9N ze3+h|-q_fSS<7q8vg(QD=RB9nM|QjG`r}kv)K(0oy_O+h~>+dYZl~nuEV*xxsgbu z;o;$xD_7!a(96rq-QB&kv=p61V{vhDQ79Ds{r%{bqnUfQCv@WM>^wO+IXpa!TDiNs z8;?8$LFR0kL_)S~alC&0!m(pH_wGIW^UvueOGq;_dUKGK)spk)Bk*W8n%35qUw$$E z^m+HGJ~ZYX8XAgwIVrpt?JUu

kA=1pU>y>RVr0kSy^CU;K0BDnM|J3V!#Xsh)(7+2eH}g8#iun zxm>wio}QjQyMn8$YiMX_TwENwy7uD53xPmTQBkpM*|MyxtfHbK)KZ#l1VQri^TWcz zs8nh~LIQ)q=;`SxD=TBMSP>Bsfq{XC4TN^v9SpW z30bjXMQ(0xWo0FmO2vP=`3?{bh#K>J5q0 zuB!TDe0-W{Q4k2hz#K#X4i5CBq|Hf5n}>$vL~DUS2nOaLB5`n_6D`4<5R1h`OMuKj zCb~Wffk3_!U=D&nAVdOl5Cj4t5}1P^5D1azSd*@-tXy~ + + diff --git a/Doxygen/build/inherit_graph_1.md5 b/Doxygen/build/inherit_graph_1.md5 new file mode 100644 index 0000000..183b95f --- /dev/null +++ b/Doxygen/build/inherit_graph_1.md5 @@ -0,0 +1 @@ +55775381c0d6f713bcc2b3c47ff21c8f \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_1.png b/Doxygen/build/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0c7dd1abe8d7d9f30376ea924ba3b3500d9f98c5 GIT binary patch literal 1071 zcmV+~1kn45P)76O1$Kuz_P&7>QW$7hi*#I#ZJ|s%#E_FBr1u@`5zW!o{6vZ?cY~0pVQ25 zfAgE)ex3cz?g$Y=fbeCgf1SV&gXqN$q8B@eUhMdVcY?v-%*@QcO67af)YN3N+0xzL z)>kwdU0Yi#cuL=wP$(1(264-;&rW{7zfk#nce=Z~Gc2Tjv4iNv4x$%33Za)urJA3g zFTg~(Q7V&Z5rmM>=l^kRLqo&D!UDJX zSt>2ky6^C*!>(hH5IX$WB=k;w3QdU~>2 ztumRctgK9{)kY!_#%{OUtE;O&w*dg{?d|b+e1CtR8SeFZ`}_Oxm|CqCLP$|mRaMo* z!~}Cf)zi~+czD>?*9Rd~sZ@;T@$qqUbF)AosHv&h-rmmR9t&N+OeWLm>FM6y-o?d* zTrSt?bg5J-_YjJrEEdb`>?{CaX=zEVR!gN)++k~L3nBFO_O`LHvADSC^?CsSD=RDY z_4RJI8zB@5g&0qd$78qKudlC7CR1;3Z$4*#_+z!Yx|(6hN^5ItMv&XvTZE8UEZ*7K zVSJ*|C;;H$;Q=Ak*w{EXH)$Dlaep%BZum zGXQ{CEM|6zqN1Y5$H(*Y^FIz0i9{NW#$vHNKRnq4v?-|r;H9}~3csRqJOeRyQlu#%vE-ns*LJo%`eW{|NA{-8< z<>Q1r^>R9$`1=?0nlm{$8IQ-sVzE}M?ds~vI?&_s$mMd4Mk5l5hK7dBW^+kNN#5B5 z04gghr>3TiMx#I=u-R<*ydxtcfk1%AB&%qD4$oCLC zh+gaG@n pZJrgRezAk-#SWquJBVKF_z&=9HmM@j^O*nu002ovPDHLkV1nx&4zK_K literal 0 HcmV?d00001 diff --git a/Doxygen/build/inherit_graph_10.map b/Doxygen/build/inherit_graph_10.map new file mode 100644 index 0000000..30fc0c2 --- /dev/null +++ b/Doxygen/build/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/Doxygen/build/inherit_graph_10.md5 b/Doxygen/build/inherit_graph_10.md5 new file mode 100644 index 0000000..daa19f2 --- /dev/null +++ b/Doxygen/build/inherit_graph_10.md5 @@ -0,0 +1 @@ +7155a82293b3a5bd041fc17368c37b0b \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_10.png b/Doxygen/build/inherit_graph_10.png new file mode 100644 index 0000000000000000000000000000000000000000..dac013993d4a8a86f9b8ef0dcefd7984a2d26988 GIT binary patch literal 1666 zcmV-|27UR7P)52jG8*#bx9g_U78in^LugNcH7*_ z``d5*xSY?ca~_`a+~=O}Ip?{%+Xx6Dzz7S`-%bD%f3T#l^*J_m`bY)3np+On6F|e}&WOq-mOK5l1@RyLT^9`C#GzK@edUTvG)I z7FB>?Q3XgMMAc|CH*VZWz=bdfyi)}TA5qK8%ZXok`t)hsGXntZ-@m`Et}e{DbLY-u z$BwNi&bDpay1KgfSiH<9j`+fJry7k$$YIy6UGYr| zK~a>`>0}s&wRpYW-rn9LM~?g#ms^(h_V(oDF)=|91XmBl+}xbeXjCW^5{aau zqGEh}9N8~jy0l@#hOl;dd3kzzdUtm>JKSouYBZY7n>R;`6AT88Mq^%HURqijMN#wf z^IEO;)vH&B4jm#0LZi_D0H&s<4jw$1k&%&^nW@+7XJ%&5Sd~iE+Sag<+S=Ndz27%)-kd&tTA@%hG&IO$vg+z;e)CpeU%zVAssjfOY}~l<+_`h3 zqoe%duq3*s*45Q{z24`~pZop(f`Wp|%F3msrD)C~k*J}e!Dh3e?vEcoZr{F*wrR9D zI-PD{VBpcCM?RmgsHmu?r^jx$7ZnwCc6LGt`}_L=0M*siv$L}vkLTsfmo!c5bUOBm zw{G3KaNz>OFj}oP6bk9}dW*%9mX^lN>f^_c?d|Pbw{9&hEoB(y&Ye4>qoe1~pU=z7 z<2NUpHf?HaYnzyuxN_yn@bIuor79^Yv0AN>TjEdQo}vziBh0caWo2byL8hmtA%rrS z?8%cS$OpZ+`uzDbgix(k+iW)07zhNAPbd^hO-&sf9E@?TKp-F%i~IZgA%u3jT_Tap z&(BATgZ8V}>kSLSiV7hd85scp_mH zNdSP`?M8OJUJn2;7z|&&eEIEMA-KoyZ<(H+-n(}%0HC$C^-uf(01k(PYl%-yl}e?5 zGRo)k0RUt&8G2+$N=ga_gJWZ3F@~&Pzkbi2Jyxp~0ARIRbvj*2N=mdiV`F1UNlE$n z`7r|0G%Xg3b8~Z17oGF$yHmMbjv7NlL)Wfd>*(l+j9@mKEf$N%<54ISM~@zLxm++F zza9yNLXRIm*6Z~oNzTm7T)%$3rKN>msCXW~$;rtJ3k#?{H8mCKpin48BGIQ$pSTMG zt;!fs6yeQ)72f19nZ{I$H!SMe5 z`>$WWzIgGXva<5~_wOLegA$^wtV}AER#jCM7Z)p)${2Cva(P8XMSXq!+qZ9LXJ>6T z+rx(s0RUN9S%ZUv=&_R|$etu*dVKSKj09{>OtR-3; zhG7~T8*_4U)~#DdQPkYr9E8y2aupO5h{a;HT8%`~YPC|SG(A1Nwzd{M5I_hE3k$ou zyCd&6tful{MKyJ$fQXvPM^w!JibzrMYeE5nMHL`eQ~`oT6(Cqt0fI#pAXroZvdkB@ zckkX!d>)uMvW%!TH8qLP0~1FGi2t7|IB-oBAXroZf<+Y|SX2S>4?d;ccFO;PA^-pY M07*qoM6N<$g3Jmd$N&HU literal 0 HcmV?d00001 diff --git a/Doxygen/build/inherit_graph_2.map b/Doxygen/build/inherit_graph_2.map new file mode 100644 index 0000000..0c0c201 --- /dev/null +++ b/Doxygen/build/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/Doxygen/build/inherit_graph_2.md5 b/Doxygen/build/inherit_graph_2.md5 new file mode 100644 index 0000000..81fa185 --- /dev/null +++ b/Doxygen/build/inherit_graph_2.md5 @@ -0,0 +1 @@ +da8ec51f432ceed38d2a3ba830433862 \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_2.png b/Doxygen/build/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f1e4c67d96e2ca23ccc78214f99575e0f2e3a6 GIT binary patch literal 1457 zcmV;i1y1^jP)$WW;&3=9Dk@^pqD9#4c7nm6R)6Be30AFIWw;Npb?a85(I^ieKGeqadcEx5zh8Ge zyWNfu0+Y$a%9Sf|I-QKa$xv5U$K%J3*|TR4LI}#s%K<1UDWR>cjmpYOa&vR(?d?sv zt-OE#o~28da_Q0~?Kpe)?q%b~jl|<|t?bpSS9EuG)7jaXG^g42PltKA=GeV^H$y{1 zJb3VcckkX&TwF{|O$~`eV%lSvOeUI|nmBXj3;-7|UZkR;g2KW=UE5o?ZXu=Q$B!S} zxN(CE7cSuSdI9L|?WL@&47b~jl#)Oop!MtN>EZbCgwu}#$2{+8J90#rlqBY zmoH!9@p!m>`!-&$m#nNT0OIjD4Gj%+bab$I@#3`hPYXH0)vH%!isDICRaHqqw|)Hh zQA#PL)oPV@?%dJZhe9C<$j_fYODUyXzkat5?h1++2C@-o2zcr_-q&ClZNBKn@HHq_zK4COO}}-@4{lvSi7O z$9ePS4FFcFRa@9*Wo7Z@%NO3heLJJEEEWsZ)zvgLH8DCmN>x==%65LgpS5e(l9Q8z z5CVt8K{y_bV%WB@u#oNBx6|0z$m`dy`S$G_j~+du zrlyAP-@gOXTab>csHi|nY50MSjg65=B*@RtXTgF61Ofrw;;x{efWg7Rq`*vv)9EA> z3gPj1xN_wR2M-?P`Sa%h?Ao;}Dfp2{1b~5o0ovQ!)6##o(iV=ct}fkkj`3#$Cr_Rv z8jWJLTCv;h?AWnm(y=@q55>jBR99DHu~;~8-~f${jVxTaFkREttXQ#vQ>RW*UtdpN zULJ=I9n#IOwY8PLzCO%mv-WLeD);Z-r@g%$zu!-Gb~crjm9)0DvUBH7Mn^|~d;fG0 zQYOEBKK?IUsa{I|D@<~})!XNaF%=HQkP3%lNQFZ&q{5*XQsGbxsc + + diff --git a/Doxygen/build/inherit_graph_3.md5 b/Doxygen/build/inherit_graph_3.md5 new file mode 100644 index 0000000..e78feaa --- /dev/null +++ b/Doxygen/build/inherit_graph_3.md5 @@ -0,0 +1 @@ +d1f60b83f5f2b808ebacc2a8461bbcf1 \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_3.png b/Doxygen/build/inherit_graph_3.png new file mode 100644 index 0000000000000000000000000000000000000000..98925f5888522d0360fdfec3288c47f6d2102f97 GIT binary patch literal 1408 zcmV-`1%LX9P)#)kA+&N5b zIh3#$2!+IzvvuK^D^VzJWD6yfa>!xEX^AD-#O}NoPwhMZwL6yfziZxiK3DVn=J!0m z@9cM;XP#+VgdhmO@athYS^$GpFh0=(#wU8f_(Tt!$&HPTjjpaPM@eBI6CWS1P$-Pe zKjssLVY9Qdc9+CpidwDS*w`RPoIfYc%*@zJ4}*Dfb8}51%=3vJFh0=(#wU7U51-=V z;syr??NI1H3^Sj8jy>KfMF|oqDJiyzj6h%=KZE9-z zOXYqowp{o8{r!y-3&(K;L9|+}NzTj53yPwFfq|Z$o)U@V{QMlo+uGVfLPAWA34$mu zFE1-AQ!14Lfq={9%H{IDzP^^0mb0@nii#461VIoMixm_U)ZE+*zugoR6l`yAmzI_y z2oe_;MwY7_ji?Fb;?CflV!C)!*;Nalw?5wD$h#Zv3 zWKK>_)GO`${5(Mr@9*z(b8};3V-ph-0D#HKNwHWwGBQFCgj%hp7Bf6N+}hfz)oKe0 z3IG5qm8z|+?dIl2E|(V-6@C6_mzS6K^z^i|v$M6eg<%+3^Ot?Cg1mf9O--3Z%#xa# zYBI>(-5o&?d_I49c^T$l7zO}%e0(GbA~rU5U|_%)yu7@GIeNXG!{O}i?pi9ewzdWU zz%a}tE)WP>TU#kAlIiK`$ja>O>zCoeBAYkHlYo&o^)d_LTLI5{~zKR?42%q-sC z-tea+2laaW&CQLUpC3h`nVFgB=x8@LHv~aY6vc7;yJ7?a0Xdn+2&0? z7=}4JI}3$E*o2EVybr$YYbCZ^_t9QudlBS219pu_s7QvJjG)Dd%e_R5CpOQ!UF;V zK0ZD!E-qm6`1lwGtsmh_Z0VCoBpMkR(Q38l=jXMxwVx9N0zp<*R!K?8;o;%y>+9y` zW_EV=+uIwku#Z3xq_?+sU|>M0RALzR@bEA`K3-8#(bCf5>+5T&qE4qX7z`dB9xg5} zYPGt%yW1$h&(CjncNf}5A?CXT2L~r4B$StzUteEi7*$R24}I$C=^?*A z!IzTu_V)Yxdp@5pkw|iKa?EyAsZ?QMVd?4VJRYyIva+P4#MRZ6qL4%)SzcaVUtf=i zh~RR$#l^+_{r%O|)$pv@ibA2VqoYG6lW{m4g+f7AQd3j2xVXq>v*CX4yJ9GqnwoNR zbBm0O6pO`tK3}C${cIeIkY~M>`v^y&(P(^peCq1z94+LpW3zpPL-6+Y9vT|z=;&Bo zU3Ih;dt>H1;cq4*BSWv(J6eSUpwoQ%Kg0M$4;Y{50pk-rV0@wnX7+p2)6@3X!9WJb zaese*a>R^J`T6gCA_VjQCpy49pXdSO6Fp#jq6dsm^xz+b!wMxgGY{zi O0000 + + diff --git a/Doxygen/build/inherit_graph_4.md5 b/Doxygen/build/inherit_graph_4.md5 new file mode 100644 index 0000000..c38e462 --- /dev/null +++ b/Doxygen/build/inherit_graph_4.md5 @@ -0,0 +1 @@ +b877581d0cf44caf9f55600648999181 \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_4.png b/Doxygen/build/inherit_graph_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b4259b125969649324f0a090b80828182b5d0336 GIT binary patch literal 965 zcmV;$13LVPP)9Lw|q&+}vFL^~*d; zrBa87hgC1Bwg`nn!C+7t`BmKL;NYNI_0%F`V`BvoydR;#9-+Y=p{a&PR;$(L^Hm|y zKLXDqG)g=g8XAIMIXykCcx45-v|4RXPtWe|t}-2q#j>@vrL3>Qc|_B+AYpKDP??VW zTrA5@PfxpCuIuaTf0wHym0W9jy*@vo(&;pWFq_R5w0VAhrfJ$}H0pFZk|dMKq!?dW zS?TKPDt^wR)oN#FXCZ`FS6Ahwa=9E$)9vl;jg5^nGczwQFXQ9m;c$3zauPylwOapn zT-Dx>TrO8M8a+Qhzq`9LnM@9c>|B&SzA9tQvr1R-w2YPC9-%Ow&CIk_^KjNNWuT3X_HzKm2Nkx;AEot>S^##NF^ zt~HHD^ZNQKK4&tS;s!>eQKeF`EGzZbZnw)3Z*Fe(`FychY;$w7j8t1&8_)BxSgfGC zN~L_HmGr2$x0hjB;N$1_A*9Kx=DjBog`f_)st|g&wW1uS?HI z;?ZMub(LjVf*?qe9334k*>QV&+hj5g4-dDrw0Jxox7%G`UoSte$K&BRj$xQGQad|4 z-QC?bo2{dxBODG73=9AO78VwckB>DPje_4bC`j%_{C>aF=@fqUO^NtzMEZdU{}(}n zJwk&$LW4a*gFQlnJwk&$LQ~@I$nW=8zmD1=olfiZdTFGDM^2}+TJ_W@6h%p2;SWDm n%K`64Xs}0Uut#XHM`(Tn(ri_nuw&1<00000NkvXXu0mjf4-mZ< literal 0 HcmV?d00001 diff --git a/Doxygen/build/inherit_graph_5.map b/Doxygen/build/inherit_graph_5.map new file mode 100644 index 0000000..023aec9 --- /dev/null +++ b/Doxygen/build/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/Doxygen/build/inherit_graph_5.md5 b/Doxygen/build/inherit_graph_5.md5 new file mode 100644 index 0000000..2a70403 --- /dev/null +++ b/Doxygen/build/inherit_graph_5.md5 @@ -0,0 +1 @@ +0c13f6ce1f78441ee21cf9d1c45e1908 \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_5.png b/Doxygen/build/inherit_graph_5.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c92c8927ca757d8ded0b3ec0804666ab8b92d6 GIT binary patch literal 1972 zcmV;l2TS;gP)TS`00006VoOIv0RI60 z0RN!9r;`8x2Wd$}K~#90?VEo{Q(qs)&((pYZJGE3+H`IfXhvHaX~`s^Xx1u?awBqD zSSu^U=^vK;mCGLl7A0Xb$}qy&fY-J)iqIpYyq&`@ZKK?{x%(5MVG%#qVz?fLYyO0bv+{1%zP)77&IJENY{x ztE;-Y`fsIzSrw?&>Rr2bk(_I+-2D7}r_;IE2>%Z(aRw?VD1a39?%lh*X(3c9m0quRI2@#grmqfXlgr z@pwFPDzaLw1VK>mJz{otwxFPZ&*ujR2g_u#FJHbOdu3(ircIkXj-^s*SXfv?Lj&1e ztJNkaCvV%fjV_MU=`1KH5C{YtHf&I-R4$iGp-{Yi`}WkSQv^XICno~{Y&P486DPvM z!y_Uha&mH}rlwF|u~=MMTDoV?9yXiZ*x1AeqLT4m&?t{%JQzs`1rU?CgX58TefU@_UsvHr^~@d4g31~BoYaS!%0X;=Sy(c5QHQ(A#HGtn?m8sZ{p&_qVsVkBp4O#>Qr5X3ovc z(K-A1`Q_#1)z#IZ=Fgu$A3b`6rXRXE+1c6e-o1PA;>FO=P-0@D!C+`?Y)ni{eE9Go zgs{828vu}%mG$l0x8B~~H*elpESBu-Y;wd04<3}4mpdE|g+f8i#Aq~%#bR_kF)?xL z)~$qugw)hjhr{vY$&ck>ldx z?%lfwnbj6TXt&!B9XbR6C@n4Z?TG*Y=yW=&WqI~Mp`oD*=`}Po1OVW2xoGR{@9*z) zI){gceRSElapS>*2en!)06?qNW@l#y1_si_86FfYX7KA(U7{CShf1Zn=O(`vN_1qFqNhodGL z!FLXH2!%rGvDIp&o?TRJ-EMbFOG{2pj!-C^nwqMutt~Dt_B}cs%ejQDUAy-C_wVS~ zX0v%a@cDc{KflSzNvinJ6W{}tN~P23dU|>c1_N5Z=;B02N4wo_^n6qC^ZWN@Mn*>d z{{4GoWCS(QBoP@IiJBhYdMYX^%FD|Q2E+F4+eu?YL_}d>VNXww(P-pwI0}VAC=_13 zde!@G@pwF!%SD!g+;I5F!AA{|M95G)9*=rr<=MJRa}Dg$qKVu(!9@WHPB# zs^H*Yur#RSEqn>{n1K+-jvdR)%$%N{9v&V>f0ubIVGzQMj0~Af_UY3nm&^6~_3Mm` zj2}OKKnN=;Dq><{kPr13Lg;q8`Fy@WAlSWoH)*7cBa_J_5=mcQpTptMYPHSH%@D%F zhYuGP7XJG63-wJ+O_j-HV`F0@BO_^PY3b?d$Sx9z8X6kNA+B7x5)~Eo`SWMr)o{Dr zt*xy}rLwZJ()(;mO3Lx$$89#-z`(%Hojbw5mV3G!=xQhui9$j`+S}WmPUnpqH`r{p z&1PF*ZKT~DLb#`|8z9>3?*AliodmyyK7#J9kNF;%Qfm^q3y?giWyaIAMoyEn) zLZL7yC@3i@>G|{L$nHZx5JHVc0|2P6uO}^ZaU2duetv#rWMoK4h)SiJot=dcnoOqH z*jN^em6VhOAsincS11&rp`l@6VJAvvOAlUy!`_;(r@ z8VG{W>2%Z=7Wh*Jh7njm7)D?LVHkl0gkc005QY(0Ko~|~0bv+1&(C_AnwnNV56miM z9s$Ya@|Dj6vq~ZGduI$2@E!=m2rM8BBd~xljKBiIFybG_ZCRlnlQDz<0000 + + diff --git a/Doxygen/build/inherit_graph_6.md5 b/Doxygen/build/inherit_graph_6.md5 new file mode 100644 index 0000000..bcc4c49 --- /dev/null +++ b/Doxygen/build/inherit_graph_6.md5 @@ -0,0 +1 @@ +d94d4c448319ade5856fe16313cdaf90 \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_6.png b/Doxygen/build/inherit_graph_6.png new file mode 100644 index 0000000000000000000000000000000000000000..432d70c7c7af8fe75909d44c22f32c07efe7eb16 GIT binary patch literal 1690 zcmV;L24(q)P)InUkQ#)1$646|VW?F2B12aC!;u&4|Ki^@Pap`G5|-jGk}welfp;nciAPk0Lc#i#?(Xh{X9fV+w{Kr{b#<6=`}XZ8 zPMla)oUL28wzs!0cXo%vp-?E+tXU%v2(((Q-|t`6@NeI~v7*7@MES&#SmNBNI-L%N zuw%!L#HNKHNz!Js(KH>jxZQ4t!*T4`vHxPaFboDmLqh{aQJtNgJv}`qPo9kGwz#hKSS(##T|0N~k-y+uVucDvnTu@n^*wY9ZD z2>bf_00320RnybcE|=@&%a;^IsZ^@qjCbzbX=-YsXFU+1 zTefT|EiI*K`rf^JLqkKCE?vsY%ZqPK#A5N4D_2HGM{nG?;qiE+QfWy^iOFP&+!B9E z=qYNoTEi?+DJv@r3o)acpc1`2+$1E|)tn zFtEg2V`F0+4yUiL4?<|MSa>|%+}vEOIB37R-R`g;K~W)ugM)(r0I%1Jx^LdR0RVjb z_z^-_SXgK<7$S4HcI{evdb-EsL0z?44FJ$+G&3_Zzg;Ut=<)koCMPHN?AZeV(ChVo z;tv3@TCJg$#MD$ipZ_PLyk0K=Kp+sHM~0M?6u;j;JUqO_koD`=@7}%JWHJE&OeT{` zrAkXnixp>hcsL~`B|krZiGUPEaX6gZ++5T}=X~(psZb~k^S^%m`o)VEySuxCVU0#( zOG}H(#>V(UCGz-PxpL+F{5)z; zOiV;Nh(sbboBjFo=g=Dh-IYr~lBCsY?eFim+wJJ=jTI+1H#ZOnpuHFhoBi`Lb8>PP z78ZOyAL@EM9%Mw_u=l9V&CN|sO?JC|^XAP#V`gUN>C>nC`}-XZ2barLDwPC5oI7`J z>AQ0Y-o1NQUtgb{on2Q~M-YU|<#IZmBuVmky!ZkpQdFr_+Sb-a)AY#5$eA-|A{~T6 z;oiM_H5$!_4Dw$07=+Pr&Z*FeR&(Du+ zBMb%u0HD3SJ!pv)ho)(*R-2QPlb)VVlH}~{EQHYMbQTm8a5x;9Oa>twA0JmLm3%%w zBO~L`p+o3_076(;SlH3gf!Z@OGhx@5nwt9Cm5If&YU*+U5j8a)Q8E83B1Ofo2^k0$ zm4RSU83-1YfnZS?2o{xrU{M)JlrL=W-@l*yJTM6)il_$;97uj1m;}Ot`2VSl1J_gr kf<miW`Tzg` literal 0 HcmV?d00001 diff --git a/Doxygen/build/inherit_graph_7.map b/Doxygen/build/inherit_graph_7.map new file mode 100644 index 0000000..1b6f392 --- /dev/null +++ b/Doxygen/build/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/Doxygen/build/inherit_graph_7.md5 b/Doxygen/build/inherit_graph_7.md5 new file mode 100644 index 0000000..68acb99 --- /dev/null +++ b/Doxygen/build/inherit_graph_7.md5 @@ -0,0 +1 @@ +6ba22a43115dfe6a9765ea4069b86b04 \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_7.png b/Doxygen/build/inherit_graph_7.png new file mode 100644 index 0000000000000000000000000000000000000000..f6283cea4222f32e7bbda208ff98e21d10be1f08 GIT binary patch literal 2005 zcmV;`2P*i9P)TS`00006VoOIv0RI60 z0RN!9r;`8x2Z~8VK~#90?VEo{Q(qs)&(%SxIhHuhoK9zfR=A;&E1M()X|2>~Zb<&9 zq?HAt`G;kHm6Z}%e@NMkG>q8HAd>#cLXC+M+N8*cO`YyKa}!<5Wt8(ge;l4Yx6Qk+ zdVTDX=e+*9=W{>jb3XTT-}jv3y^eqo0t{xk`26hzFl!quAPgh0fG~`}0>UtYMQwC< zch}U^{H;_lYl70!(%rjvyPAK@Kqix^rKM%nQ^KqnT3T96CKJ`d@^pIo^yzBlgIQw` z1mR}Edms!Wuz)a(zyiWBVl@OL7KsNvxCMPGC(N`oAJ%0Sy)Be|M zi)SDVBbFnew6rwhPhP)%z2cbx05UQ%^78WBjH#)q=g*&CQkmN^3z7Z*bc`}gl(*|ZQ!rLv`^#b&d)EPB1Zv$ON`>C^v> z;oP`)@19I1)9dwpeSI@CGYW-bLAUw&`8RLg6ciLxS68n>Rt&jt;X+YSQFnLuN(EfW zC5*@8xuznLBng6`-h0H%%uI1{F`v)pa5z$_bYx@%*{iCmwrttrcAS=$#^rLGnwnhQ zRVtNOERK(lr;B5^+lz~fqoboYZrrF;Djg1oLZRsE>pOAc1VIpDu^0egu~>3)aza8v zLPJCI^Yf>srchszNK{c#v2WkLz`#JYT7B!*t*opp4u=yN8Ch6Z*xTFdb}gSieJU?6 z=kxi6g@xha;n~^Qo;4XCAD2p{Y&Lt_wr$UzJ#*RVa_~~afq?;uM8amX6A}`-y1G2a zqN@p&lP6EETet4$(W6_pZoP8l%Fxh|r_YjD?LAOlUY=gB@95|l9UYC0jm^r+nxCJi zbN2D^DJ(3kudheVU%!4mdh`fQKXh?&b93LnfB*93%i-bS#Kgq*_I9;eotT)|(9i%O z?CI$N0Ay!pfBW{WzrVk?x7TDc<>uzPMtu12;q~j+Z8jTqzA>B4jg5^N85yWKF)?xH z&YgsWgp`yNo6Yv*$&;a>p=;N!MMp<_UV>aMU%!66!C+`@ZKW=wUUHzLuCDIt)vF{) z%H{Hd2M=1U)@9Uo`}Xa(Z{H?KvbMI?U@(Y8B8fzzQmH&2^~FM6i8LCGn`J=`95~<> z#A>xd2*bm}+uGWY4|?G}Jv|K}OiD_sudjC*$HvBxkJIU7v)La$eDE^X*w`40#p>zl zfe@4esO(qkI#fplGLQS+* zy1ws3Mn+Pd3knM6=jY94^WMFClarHw{P+O?sIIQAsj2Dj@8|RRXV0G1YPFE&zdA{h z3S7P3CphF-KP>)HHq@G<;ZJkc%t5>h`^YaA)!PL}LU0q#SS(*3I=~&4n z%+Jqnc6JsWTPzk&2R@(gmdjtEG+EOrAs3tBgi>4G_<6oM5ohrc6PGa zY=uH05C|?`zU+Cocs!oN;c%70wc+rRgO?g2iMT@Xcs%OaMb>s;V4$?Ll*i+pJ9kbX z5cK!=YqeUXQpw?P!1ADuxA-N@Z3aRdJ9aE9D{Fds+GsSQzsuZ~FbH90W~Njs{qp6D z!{K=M?p+=z*ZK|a)D2%*#I~R_C;z*@Zi9|9mFkrLU zR4P?#Yb%8C$dMx@B_+Rq|3-aNQc|Q+so88E9UVp!NFa-c7cB{_jEbX z)leuD1_cFmbadG5_M10v1_lONES5#qmP%=9>6tTUy1Kd+y0QNZ@L0lDW)FmR7=wd@ z5{bm$-+#xB9e3~ET~I)FyS=QeOdt>h1Oy}{B|U%s9NE1H2trs{SqT7WY;1H{=;GLH zwxXhlNfByWBmGOim$@KK}z`($`xVYNdT9<(6a-gfBP$(=fFHcTR z-mqbVNF;ju_AT;XOl?;XPXQ5-vVJ!=H_PR6h<~Snp@AR>jYdO#VSztoU>Jb~gkc00 z5QY(0Ko~|~0bv+{1%zP)77&IJ3;e97xw(1u^T4c877&nJE?@mTFl!V7zjwwk0q=n@ njKBiIFaiq*!w4)O3?u#pRFPoQ0rB;S00000NkvXXu0mjfGV#&4 literal 0 HcmV?d00001 diff --git a/Doxygen/build/inherit_graph_8.map b/Doxygen/build/inherit_graph_8.map new file mode 100644 index 0000000..46bb199 --- /dev/null +++ b/Doxygen/build/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/Doxygen/build/inherit_graph_8.md5 b/Doxygen/build/inherit_graph_8.md5 new file mode 100644 index 0000000..1f180c8 --- /dev/null +++ b/Doxygen/build/inherit_graph_8.md5 @@ -0,0 +1 @@ +519b7766a67ae2440b4386b052cd2b9d \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_8.png b/Doxygen/build/inherit_graph_8.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5d9a6a517db6f8e0edb0654f22a182e3613db1 GIT binary patch literal 1719 zcmV;o21xmdP)(x1)I*C(L1@HKDFDN;7z^D~ zDF`hp1))WyAn6cQB9Yv=b0-Z8(IDtbr69?OT2)nr{mQFXuTq{F0HCI(rm?Xx#<*wC zo)afdtSHWo9Xm`W(@Ix&I-Ly-4IB=K!{OA|*ZX|F6-{4QSiqKo$z0+mj?|K5rE0ZW z7{%VbdsCYhLZi`GtyYpGBNm6l(c9a5?AWpYV!0S@-MUp*SLbjz1_uX&!Ju3&U(zic z4!?f=TBTCybh>E!>eZ_w`%_z6d-Uj0biKH^7!%?2>C?^4&3%1+smeT+$8Tb6r(c#o=(eySpRP^?JQTA}KB| zP825)2xzt1f`Wo|>(*&Bn%UV|xm-RtIC$j95e&m55(xlca&oevp<%;@4LLbEN~Lmo zdK%3YiA3$~?YnpHUb}X!*=)Xg^{P}VWwBU%K3}a?4-5>%+{=d#AI_dVD-a0OYBi6? zlgVVs?ORh*)2dag4jnqQWy_We7cPvAjU^W+Lb`iuV`HPk;dt}rjmP6DDk_pnrQvWm zku!tAP^;Ajg8>bH{P=PI{(V%YiQ*^}ig)kcJ%9e(<#LslmiF}Yn9b(W(o&<*2qEn6 z?*{og$H_yu4hm*TlOGnwo+T@_4+LFJB@b^x^93*RK#lu~=*{7$QcW&xd?Mp-^^q_VDoV zGHdyKJ|>gd-`@`*G@H#V7Hf8PHc=c@uMUSJCP+k72;u1HC;-6aa-re-_wNA!e!m|= zSW;5b+1VLA(P%WH8!Rp^_Ika@s8lKe04kO0+qZAO-77@&@%vk*rlt-YH~;`>Z*Tt- ze*l2RVu`k-rl+#m>_3_1a=8EiJRT3dGGt_A1OkEa@$qG*Y}&MG|Ni}Yy&eFd*XtDu zMOIc;qB!H@;~5zlg@uL71SAN8$zphpGVh|lauid0)c?RV0`)VCHjFtPvtUbG#ZP=GBh;Q)6;{_-b8Wo^YcTY5URy! z7>u8{nU|NhxVY%?c+k-4bRr`f#(zh}FpSIPo;!EW?RF#QoSd9fr%nwG4fXc+W@l&1 z<#HUy&!0cP{L{G%A3uIN23kZYcqk&%&^nHht@@a)+$005WE9UdM=ubnuKS5#EAw6si2Ob`Td^5n^V`}T3U z+?Z5Dp^!`_v)k`C`j)UifKN6X90v$C>;LgCGuH$hxag%Ab;fws0b9LLwJ zStAyUpFDYj?3XWJE-WmJzeaR+b^-uQCR4@UI-wBB_$=@-QAHTo<4mlkw`K#Gr3%DU0vPC z$jEPZCJ`&@sVfD<_0(iUrTJeGFDm_+kb=;nQV?2H3POuYL1w2 z;lqdN&x0m~EFo%reSP}#ph+PZr2jvaa?m}Mg3zK;5L#3ULW@d4{sHX(;QfN0pdJ7K N002ovPDHLkV1iA)O&S0I literal 0 HcmV?d00001 diff --git a/Doxygen/build/inherit_graph_9.map b/Doxygen/build/inherit_graph_9.map new file mode 100644 index 0000000..640de15 --- /dev/null +++ b/Doxygen/build/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/Doxygen/build/inherit_graph_9.md5 b/Doxygen/build/inherit_graph_9.md5 new file mode 100644 index 0000000..8dcd915 --- /dev/null +++ b/Doxygen/build/inherit_graph_9.md5 @@ -0,0 +1 @@ +432c836055c60e0a7148cd35fe49ed41 \ No newline at end of file diff --git a/Doxygen/build/inherit_graph_9.png b/Doxygen/build/inherit_graph_9.png new file mode 100644 index 0000000000000000000000000000000000000000..a0707c57fdd9d37020ee55bc9aa17bcfca2693b0 GIT binary patch literal 1940 zcmV;F2W$9=P)TS`00006VoOIv0RI60 z0RN!9r;`8x2T4gpK~#90?VE8(Q{5ZK&(%SxIi~2OHk-}@t!PUlEtw?*X|2*IH==D8 z(#nG2@(;uQDk~*WK`EP2h7p??1kyiQs4-EZ+$b7|Q`a_KZlY^BifW$skHhc&_HMg- zeRqBB_2qp2y64$B&w0+X?>*1iy-Gj`0R|H(QNKF?%<2XU2tx}jAPglSGcW(tI`j_+h^Jjt}W@l$37%LPCA3b^$Z2#@K z#XAs&7Lf?3sHlkeGcRAhT=vKS07s7=mCNM;#=^qFix)5cEk8SV?(FF3h%5#O;oiM_ z34$;hjgfiyZxi7Tq*AG%AN%+3U*50~N~N;9yW8z{la{fuv4MesvuDr#6VrvHxw$ze zCMHaW#l^)}uU?gxmp3#ttXNbLbLrBh%F4>2p`qn+xSS=7%jJ?=k=<@52*UrnM=UHX zs8lK*kH=!M#A5NMPoI#zzP^6brcD9YMMXu)$;q9ao#b$hMw6G9w|)C|DnA~NN2OAw zr>7?*Bq)_iuh%P;O5eSEclz{cf*|tp@&Eu%r}N~=lWaCSB_&0nP|VHEp|L`tu(q~# z-@bkE@$p)%7633hI@;3G($v%xa=jlveypjf;qiDC6%`x~r>v|jxR1l(5R1i3CUeV{ zEl;05CGAu(gvp`FWD>?bVqD5&(F_82y=6D z+uPeof`hIm`vvT_wU2ZH8nNGU@(S7x=0)e2eu8tg4S63&INFam`hXVj$Fc^?sp-=z-%FD~Y ze*GFgQD(Cl05CH%gPLe-ak*S!VxY>QKp?n$`7-G_D=X{n-Mch%3n6s5T!#-I1_0F7 z)`sti008K8I)BUZoPm;(l9n=Ra&i&?z~OMv(K|Xi+T-z9ES4}sHf-2%=+GgJMgsuQ zXf!gJEH*Zl%8$ijiH?rW$jAue&}OqS7>u;EG}J`3l6=3japOjGVKSNS+_}@z(h}^U zp`oF%vC(KW@_4-S=g;f)dPwnCop!rDE-sGEW}_w8PvLc!Z{EBqDJl8>{X2y4=FOWK85yXL z|22fr=kxJ+y!7<+J$v?$Mk+sIu~;M$nM@|P+pW=PdU|>wgh!4Xsj8~_`ST|lTToCS z7K^8+r>$0NVPRo$aWS$B1cJ`a&fs+gl&}DNK3{KduUsy#udfgOG(SK8#EBD5r*nLK zeAljB;D6(;IK_;{z&xy0Q1qgJcWojW%;I2dv*e+dXG zVasy{LMM#z@o|wz6dN16ZQHinw{M3OkjLYxuCC_u`EhY^xw*N|o;^eMFam-Q*45Pk z06IE4NDGx8x7%G=S(%!enwXfVR4Nx179fOry*@KDlfhu*=H@~O9S(<7DosjCN={Bb zb?OxQMq#7^3Xk1xFD@>QkB`sF%4%(GB?Uwk162+M0zpkpO@4mLgDMzuTlS{ zUURH7dkdZxSL`A>ktH?)9L&lSm0L~7+PQfVQ7H`grNl%5QY|5Kp0wJ z0byu?1%#nRh=1$p>grngI54Y}5CW1&Br6{WW|czV=gt^9;4=`07Fa+ST3`WTXn_TU ap~W9`{$7512FL^e0000 + + + + + + +Leonetienne/Eule: Class Hierarchy + + + + + + + + + + + +

+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+ + + + + + + + + + + + +
+ + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
+ + + + diff --git a/Doxygen/build/jquery.js b/Doxygen/build/jquery.js new file mode 100644 index 0000000..103c32d --- /dev/null +++ b/Doxygen/build/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/Doxygen/build/menu.js b/Doxygen/build/menu.js new file mode 100644 index 0000000..433c15b --- /dev/null +++ b/Doxygen/build/menu.js @@ -0,0 +1,50 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/Doxygen/build/menudata.js b/Doxygen/build/menudata.js new file mode 100644 index 0000000..f0c1ef7 --- /dev/null +++ b/Doxygen/build/menudata.js @@ -0,0 +1,112 @@ +/* +@licstart The following is the entire license notice for the +JavaScript code in this file. + +Copyright (C) 1997-2019 by Dimitri van Heesch + +This program is free software; you can redistribute it and/or modify +it under the terms of version 2 of the GNU General Public License as published by +the Free Software Foundation + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +@licend The above is the entire license notice +for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}, +{text:"Typedefs",url:"namespacemembers_type.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"j",url:"functions_j.html#index_j"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"q",url:"functions_q.html#index_q"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"x",url:"functions_x.html#index_x"}, +{text:"y",url:"functions_y.html#index_y"}, +{text:"z",url:"functions_z.html#index_z"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"n",url:"functions_func.html#index_n"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"q",url:"functions_func.html#index_q"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"v",url:"functions_func.html#index_v"}, +{text:"~",url:"functions_func.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"g",url:"functions_vars.html#index_g"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"j",url:"functions_vars.html#index_j"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"v",url:"functions_vars.html#index_v"}, +{text:"w",url:"functions_vars.html#index_w"}, +{text:"x",url:"functions_vars.html#index_x"}, +{text:"y",url:"functions_vars.html#index_y"}, +{text:"z",url:"functions_vars.html#index_z"}]}, +{text:"Related Functions",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/Doxygen/build/namespaceEule.html b/Doxygen/build/namespaceEule.html new file mode 100644 index 0000000..9922592 --- /dev/null +++ b/Doxygen/build/namespaceEule.html @@ -0,0 +1,397 @@ + + + + + + + +Leonetienne/Eule: Eule Namespace Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    Eule Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  Collider
     Abstract class of a collider domain. More...
     
    class  Math
     Math utility class. More...
     
    class  Matrix4x4
     A matrix 4x4 class representing a 3d transformation. More...
     
    class  Quaternion
     3D rotation representation More...
     
    struct  Rect
     Trivial data structure representing a rectangle. More...
     
    class  TrapazoidalPrismCollider
     A collider describing a trapazoidal prism. More...
     
    class  Vector2
     Representation of a 2d vector. More...
     
    class  Vector3
     Representation of a 3d vector. More...
     
    class  Vector4
     Representation of a 4d vector. More...
     
    + + + + + + + + + + + + + +

    +Typedefs

    typedef Vector3< double > Vector3d
     
    typedef Vector2< int > Vector2i
     
    typedef Vector2< double > Vector2d
     
    typedef Vector3< int > Vector3i
     
    typedef Vector4< int > Vector4i
     
    typedef Vector4< double > Vector4d
     
    + + + + + + + + + +

    +Functions

    std::ostream & operator<< (std::ostream &os, const Matrix4x4 &m)
     
    std::wostream & operator<< (std::wostream &os, const Matrix4x4 &m)
     
    std::ostream & operator<< (std::ostream &os, const Quaternion &q)
     
    std::wostream & operator<< (std::wostream &os, const Quaternion &q)
     
    +

    Typedef Documentation

    + +

    ◆ Vector2d

    + +
    +
    + + + + +
    typedef Vector2<double> Eule::Vector2d
    +
    + +

    Definition at line 102 of file Vector2.h.

    + +
    +
    + +

    ◆ Vector2i

    + +
    +
    + + + + +
    typedef Vector2<int> Eule::Vector2i
    +
    + +

    Definition at line 101 of file Vector2.h.

    + +
    +
    + +

    ◆ Vector3d

    + +
    +
    + + + + +
    typedef Vector3< double > Eule::Vector3d
    +
    + +

    Definition at line 9 of file Matrix4x4.h.

    + +
    +
    + +

    ◆ Vector3i

    + +
    +
    + + + + +
    typedef Vector3<int> Eule::Vector3i
    +
    + +

    Definition at line 109 of file Vector3.h.

    + +
    +
    + +

    ◆ Vector4d

    + +
    +
    + + + + +
    typedef Vector4<double> Eule::Vector4d
    +
    + +

    Definition at line 107 of file Vector4.h.

    + +
    +
    + +

    ◆ Vector4i

    + +
    +
    + + + + +
    typedef Vector4<int> Eule::Vector4i
    +
    + +

    Definition at line 106 of file Vector4.h.

    + +
    +
    +

    Function Documentation

    + +

    ◆ operator<<() [1/4]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& Eule::operator<< (std::ostream & os,
    const Matrix4x4m 
    )
    +
    + +

    Definition at line 620 of file Matrix4x4.cpp.

    +
    621  {
    +
    622  os << std::endl;
    +
    623 
    +
    624  for (std::size_t y = 0; y < 4; y++)
    +
    625  {
    +
    626  for (std::size_t x = 0; x < 4; x++)
    +
    627  os << " | " << m[y][x];
    +
    628 
    +
    629  os << " |" << std::endl;
    +
    630  }
    +
    631 
    +
    632  return os;
    +
    633  }
    +
    +
    +
    + +

    ◆ operator<<() [2/4]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::ostream& Eule::operator<< (std::ostream & os,
    const Quaternionq 
    )
    +
    + +

    Definition at line 325 of file Quaternion.cpp.

    +
    326  {
    +
    327  os << "[" << q.v << "]";
    +
    328  return os;
    +
    329  }
    +
    +
    +
    + +

    ◆ operator<<() [3/4]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::wostream& Eule::operator<< (std::wostream & os,
    const Matrix4x4m 
    )
    +
    + +

    Definition at line 635 of file Matrix4x4.cpp.

    +
    636  {
    +
    637  os << std::endl;
    +
    638 
    +
    639  for (std::size_t y = 0; y < 4; y++)
    +
    640  {
    +
    641  for (std::size_t x = 0; x < 4; x++)
    +
    642  os << L" | " << m[y][x];
    +
    643 
    +
    644  os << L" |" << std::endl;
    +
    645  }
    +
    646 
    +
    647  return os;
    +
    648  }
    +
    +
    +
    + +

    ◆ operator<<() [4/4]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::wostream& Eule::operator<< (std::wostream & os,
    const Quaternionq 
    )
    +
    + +

    Definition at line 331 of file Quaternion.cpp.

    +
    332  {
    +
    333  os << L"[" << q.v << L"]";
    +
    334  return os;
    +
    335  }
    +
    +
    +
    +
    + + + + diff --git a/Doxygen/build/namespacemembers.html b/Doxygen/build/namespacemembers.html new file mode 100644 index 0000000..e017abf --- /dev/null +++ b/Doxygen/build/namespacemembers.html @@ -0,0 +1,103 @@ + + + + + + + +Leonetienne/Eule: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
      +
    • operator<<() +: Eule +
    • +
    • Vector2d +: Eule +
    • +
    • Vector2i +: Eule +
    • +
    • Vector3d +: Eule +
    • +
    • Vector3i +: Eule +
    • +
    • Vector4d +: Eule +
    • +
    • Vector4i +: Eule +
    • +
    +
    + + + + diff --git a/Doxygen/build/namespacemembers_func.html b/Doxygen/build/namespacemembers_func.html new file mode 100644 index 0000000..4e19420 --- /dev/null +++ b/Doxygen/build/namespacemembers_func.html @@ -0,0 +1,85 @@ + + + + + + + +Leonetienne/Eule: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
      +
    • operator<<() +: Eule +
    • +
    +
    + + + + diff --git a/Doxygen/build/namespacemembers_type.html b/Doxygen/build/namespacemembers_type.html new file mode 100644 index 0000000..bfb0435 --- /dev/null +++ b/Doxygen/build/namespacemembers_type.html @@ -0,0 +1,100 @@ + + + + + + + +Leonetienne/Eule: Namespace Members + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
      +
    • Vector2d +: Eule +
    • +
    • Vector2i +: Eule +
    • +
    • Vector3d +: Eule +
    • +
    • Vector3i +: Eule +
    • +
    • Vector4d +: Eule +
    • +
    • Vector4i +: Eule +
    • +
    +
    + + + + diff --git a/Doxygen/build/namespaces.html b/Doxygen/build/namespaces.html new file mode 100644 index 0000000..9bf17a0 --- /dev/null +++ b/Doxygen/build/namespaces.html @@ -0,0 +1,89 @@ + + + + + + + +Leonetienne/Eule: Namespace List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    + + +
     NEule
    +
    +
    + + + + diff --git a/Doxygen/build/nav_f.png b/Doxygen/build/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/Doxygen/build/nav_g.png b/Doxygen/build/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_0.js b/Doxygen/build/search/all_0.js new file mode 100644 index 0000000..f6e1bc9 --- /dev/null +++ b/Doxygen/build/search/all_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['a_0',['a',['../classEule_1_1Matrix4x4.html#ab3ff5bc09a2598faa76188d0cc31addb',1,'Eule::Matrix4x4']]], + ['abs_1',['Abs',['../classEule_1_1Math.html#ab9ccf4aa730ef825faf224445c86ab25',1,'Eule::Math']]], + ['adjoint_2',['Adjoint',['../classEule_1_1Matrix4x4.html#a1c664d93fbd68ec9f8c762263fc45a97',1,'Eule::Matrix4x4']]], + ['anglebetween_3',['AngleBetween',['../classEule_1_1Quaternion.html#a2c7d0c3521f0e6127ca4b5d5bdbf8329',1,'Eule::Quaternion']]] +]; diff --git a/Doxygen/build/search/all_1.html b/Doxygen/build/search/all_1.html new file mode 100644 index 0000000..8eb215b --- /dev/null +++ b/Doxygen/build/search/all_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_1.js b/Doxygen/build/search/all_1.js new file mode 100644 index 0000000..da0e8db --- /dev/null +++ b/Doxygen/build/search/all_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['b_4',['b',['../classEule_1_1Matrix4x4.html#a2258f9cce9558711c59ffcf140a39756',1,'Eule::Matrix4x4']]], + ['back_5',['BACK',['../classEule_1_1TrapazoidalPrismCollider.html#a756f4bcb931dd6381901362e51410da9',1,'Eule::TrapazoidalPrismCollider']]], + ['backward_6',['backward',['../classEule_1_1Vector3.html#a34083239eb29eaf4614d09d4d7014b06',1,'Eule::Vector3::backward()'],['../classEule_1_1Vector4.html#a59d02244dbcd06b9d3f09da75128242e',1,'Eule::Vector4::backward()']]], + ['bottom_7',['BOTTOM',['../classEule_1_1TrapazoidalPrismCollider.html#a7f7594171358bbc10680e2dc42f1b53d',1,'Eule::TrapazoidalPrismCollider']]] +]; diff --git a/Doxygen/build/search/all_10.html b/Doxygen/build/search/all_10.html new file mode 100644 index 0000000..6fd3a4a --- /dev/null +++ b/Doxygen/build/search/all_10.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_10.js b/Doxygen/build/search/all_10.js new file mode 100644 index 0000000..a8d6060 --- /dev/null +++ b/Doxygen/build/search/all_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['quaternion_87',['Quaternion',['../classEule_1_1Quaternion.html',1,'Eule::Quaternion'],['../classEule_1_1Quaternion.html#abcc01358aada56ea5f0db4da18aaf77d',1,'Eule::Quaternion::Quaternion()'],['../classEule_1_1Quaternion.html#a2dc0ed0c7773600cf443151573287e4a',1,'Eule::Quaternion::Quaternion(const Vector4d values)'],['../classEule_1_1Quaternion.html#ab3b8862f9fd86c7ebb426b4940d08b39',1,'Eule::Quaternion::Quaternion(const Quaternion &q)'],['../classEule_1_1Quaternion.html#a1e4c6f8984bb7a9ae1ffed45adffe02f',1,'Eule::Quaternion::Quaternion(const Vector3d eulerAngles)']]], + ['quaternion_2ecpp_88',['Quaternion.cpp',['../Quaternion_8cpp.html',1,'']]], + ['quaternion_2eh_89',['Quaternion.h',['../Quaternion_8h.html',1,'']]] +]; diff --git a/Doxygen/build/search/all_11.html b/Doxygen/build/search/all_11.html new file mode 100644 index 0000000..f78343b --- /dev/null +++ b/Doxygen/build/search/all_11.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_11.js b/Doxygen/build/search/all_11.js new file mode 100644 index 0000000..c93eaf1 --- /dev/null +++ b/Doxygen/build/search/all_11.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['rad2deg_90',['Rad2Deg',['../Constants_8h.html#a0272b2f5a4ca917a60dad22a3cbc6faf',1,'Constants.h']]], + ['random_91',['Random',['../classEule_1_1Math.html#a6aa6d6c804f995a089779219e5136e4f',1,'Eule::Math']]], + ['randomchance_92',['RandomChance',['../classEule_1_1Math.html#a60bffec38a861b7701fc90bd6f1a11d6',1,'Eule::Math']]], + ['randomint_93',['RandomInt',['../classEule_1_1Math.html#ab8d66e39e794d89594c50690ccc92c60',1,'Eule::Math']]], + ['randomintrange_94',['RandomIntRange',['../classEule_1_1Math.html#adfc55be8cb68aba351374f045f29a2ad',1,'Eule::Math']]], + ['randomrange_95',['RandomRange',['../classEule_1_1Math.html#a48ca8451f9803ce35d2a35cfb83d8ae9',1,'Eule::Math']]], + ['randomuint_96',['RandomUint',['../classEule_1_1Math.html#ad38d9a50e08cd02bb35161cc3bd77b26',1,'Eule::Math']]], + ['rect_97',['Rect',['../structEule_1_1Rect.html',1,'Eule']]], + ['rect_2eh_98',['Rect.h',['../Rect_8h.html',1,'']]], + ['right_99',['right',['../classEule_1_1Vector2.html#a594b062e78cb2e92dbb533a435258f49',1,'Eule::Vector2::right()'],['../classEule_1_1Vector3.html#a1febd6152b8964147229242630b8c8f0',1,'Eule::Vector3::right()'],['../classEule_1_1Vector4.html#a4701bae8f20522fe93575e8909478f36',1,'Eule::Vector4::right()'],['../classEule_1_1TrapazoidalPrismCollider.html#a67a468becb53ca0d50e8da3daab98b85',1,'Eule::TrapazoidalPrismCollider::RIGHT()']]], + ['rotatevector_100',['RotateVector',['../classEule_1_1Quaternion.html#aaeb89218e886e605c6e2a87c9cb773a4',1,'Eule::Quaternion']]] +]; diff --git a/Doxygen/build/search/all_12.html b/Doxygen/build/search/all_12.html new file mode 100644 index 0000000..dd9ff1d --- /dev/null +++ b/Doxygen/build/search/all_12.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_12.js b/Doxygen/build/search/all_12.js new file mode 100644 index 0000000..959219d --- /dev/null +++ b/Doxygen/build/search/all_12.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['setrawvalues_101',['SetRawValues',['../classEule_1_1Quaternion.html#a7046064a89615e16760f17f41b60a31d',1,'Eule::Quaternion']]], + ['settranslationcomponent_102',['SetTranslationComponent',['../classEule_1_1Matrix4x4.html#a6e4fd75a1f47f42f922ef4355d448411',1,'Eule::Matrix4x4']]], + ['setvertex_103',['SetVertex',['../classEule_1_1TrapazoidalPrismCollider.html#a5acc127ec848dceead5ad017f36696aa',1,'Eule::TrapazoidalPrismCollider']]], + ['similar_104',['Similar',['../classEule_1_1Math.html#ac928b1e9cde5ac60f5fdc1ba466305ff',1,'Eule::Math::Similar()'],['../classEule_1_1Matrix4x4.html#ab8340e0e909a6cbb1a32439f2ca2c092',1,'Eule::Matrix4x4::Similar()'],['../classEule_1_1Vector2.html#a69fc37a6e885b64426d5846be33c7366',1,'Eule::Vector2::Similar()'],['../classEule_1_1Vector3.html#a9613bb7d4981c921b8310d5eedf59b07',1,'Eule::Vector3::Similar()'],['../classEule_1_1Vector4.html#af49ea98d369420a07158d705eab60479',1,'Eule::Vector4::Similar()']]], + ['size_105',['size',['../structEule_1_1Rect.html#a330821ad2e2fbffe4575783619923f8d',1,'Eule::Rect']]], + ['sqrmagnitude_106',['SqrMagnitude',['../classEule_1_1Vector2.html#ad8c2b3e86fc91a641a0817047a63170f',1,'Eule::Vector2::SqrMagnitude()'],['../classEule_1_1Vector3.html#ad2f078dd733634a321157d23979a4162',1,'Eule::Vector3::SqrMagnitude()'],['../classEule_1_1Vector4.html#a2cd0433c99303b8934993b2fd2aa1c6e',1,'Eule::Vector4::SqrMagnitude()']]] +]; diff --git a/Doxygen/build/search/all_13.html b/Doxygen/build/search/all_13.html new file mode 100644 index 0000000..2611a10 --- /dev/null +++ b/Doxygen/build/search/all_13.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_13.js b/Doxygen/build/search/all_13.js new file mode 100644 index 0000000..bb9c40b --- /dev/null +++ b/Doxygen/build/search/all_13.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['todouble_107',['ToDouble',['../classEule_1_1Vector2.html#a2f7e2f5eb22ab04166cbaa0aca6dfb20',1,'Eule::Vector2::ToDouble()'],['../classEule_1_1Vector3.html#a04560b5fa992b7fa455fc4d406928df8',1,'Eule::Vector3::ToDouble()'],['../classEule_1_1Vector4.html#a267ad7bfad5ea8f6f8c001cee817c54e',1,'Eule::Vector4::ToDouble()']]], + ['toeulerangles_108',['ToEulerAngles',['../classEule_1_1Quaternion.html#a5a6349cb3e0a0c73df527e9ba907b0da',1,'Eule::Quaternion']]], + ['toint_109',['ToInt',['../classEule_1_1Vector2.html#a078a567a49b6d02fb8dce79885b4c2e9',1,'Eule::Vector2::ToInt()'],['../classEule_1_1Vector3.html#a0510707e23eb81c4a799dffc7b0ce127',1,'Eule::Vector3::ToInt()'],['../classEule_1_1Vector4.html#a53244995fd4f19de4e740b47aec029a3',1,'Eule::Vector4::ToInt()']]], + ['top_110',['TOP',['../classEule_1_1TrapazoidalPrismCollider.html#a09b3433cb41848fd166fc9c7614aff7e',1,'Eule::TrapazoidalPrismCollider']]], + ['torotationmatrix_111',['ToRotationMatrix',['../classEule_1_1Quaternion.html#aedb36036ee6a39fb97c5d2ba12b5d986',1,'Eule::Quaternion']]], + ['transpose3x3_112',['Transpose3x3',['../classEule_1_1Matrix4x4.html#a410b88abff7991d9faa3f818efd6807d',1,'Eule::Matrix4x4']]], + ['transpose4x4_113',['Transpose4x4',['../classEule_1_1Matrix4x4.html#af454812ef8205562e14ee094ce7172b1',1,'Eule::Matrix4x4']]], + ['trapazoidalprismcollider_114',['TrapazoidalPrismCollider',['../classEule_1_1TrapazoidalPrismCollider.html',1,'Eule::TrapazoidalPrismCollider'],['../classEule_1_1TrapazoidalPrismCollider.html#a787c22d1c84b74dd078a2d3d6d76ee34',1,'Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider()'],['../classEule_1_1TrapazoidalPrismCollider.html#acc761aadc1b6421db75eea36d5d722d1',1,'Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider(const TrapazoidalPrismCollider &other)=default'],['../classEule_1_1TrapazoidalPrismCollider.html#aad0faabb1b27478320da6d2fa44f034b',1,'Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider(TrapazoidalPrismCollider &&other) noexcept=default']]], + ['trapazoidalprismcollider_2ecpp_115',['TrapazoidalPrismCollider.cpp',['../TrapazoidalPrismCollider_8cpp.html',1,'']]], + ['trapazoidalprismcollider_2eh_116',['TrapazoidalPrismCollider.h',['../TrapazoidalPrismCollider_8h.html',1,'']]] +]; diff --git a/Doxygen/build/search/all_14.html b/Doxygen/build/search/all_14.html new file mode 100644 index 0000000..72d12e9 --- /dev/null +++ b/Doxygen/build/search/all_14.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_14.js b/Doxygen/build/search/all_14.js new file mode 100644 index 0000000..bf9d476 --- /dev/null +++ b/Doxygen/build/search/all_14.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['unitquaternion_117',['UnitQuaternion',['../classEule_1_1Quaternion.html#affb1a8ac42e356ee5efb304ca8df38ca',1,'Eule::Quaternion']]], + ['up_118',['up',['../classEule_1_1Vector2.html#a010bbbc9de53adcc00ffe1565c3a8208',1,'Eule::Vector2::up()'],['../classEule_1_1Vector3.html#a7508f8b060773b00cd40df94d628d7b6',1,'Eule::Vector3::up()'],['../classEule_1_1Vector4.html#a9a8c5882154587b3e34ae308466f98a5',1,'Eule::Vector4::up()']]] +]; diff --git a/Doxygen/build/search/all_15.html b/Doxygen/build/search/all_15.html new file mode 100644 index 0000000..767aec3 --- /dev/null +++ b/Doxygen/build/search/all_15.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_15.js b/Doxygen/build/search/all_15.js new file mode 100644 index 0000000..f47bd45 --- /dev/null +++ b/Doxygen/build/search/all_15.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['v_119',['v',['../classEule_1_1Matrix4x4.html#a6cf89fe3ccd64d362a1d4c6ea77ff660',1,'Eule::Matrix4x4']]], + ['vector2_120',['Vector2',['../classEule_1_1Vector2.html',1,'Eule::Vector2< T >'],['../classEule_1_1Vector2.html#a99b4d19728ca8577413ccba9cecc5948',1,'Eule::Vector2::Vector2()'],['../classEule_1_1Vector2.html#ad106a7fa36501663af6959f17b317c9f',1,'Eule::Vector2::Vector2(T _x, T _y)'],['../classEule_1_1Vector2.html#af5b98f03dae0721f155eee4ef2babc8d',1,'Eule::Vector2::Vector2(const Vector2< T > &other)=default'],['../classEule_1_1Vector2.html#a3a37db279577d277c890abe282951cb4',1,'Eule::Vector2::Vector2(Vector2< T > &&other) noexcept=default']]], + ['vector2_2ecpp_121',['Vector2.cpp',['../Vector2_8cpp.html',1,'']]], + ['vector2_2eh_122',['Vector2.h',['../Vector2_8h.html',1,'']]], + ['vector2_3c_20double_20_3e_123',['Vector2< double >',['../classEule_1_1Vector2.html',1,'Eule']]], + ['vector2d_124',['Vector2d',['../namespaceEule.html#ad2b14d99a3b97a954d09be46e86fa554',1,'Eule']]], + ['vector2i_125',['Vector2i',['../namespaceEule.html#a4b8529f841686a41ce0423f3610f0779',1,'Eule']]], + ['vector3_126',['Vector3',['../classEule_1_1Vector3.html',1,'Eule::Vector3< T >'],['../classEule_1_1Vector3.html#abba435897a7050d8c111d703c5bb3eb8',1,'Eule::Vector3::Vector3()'],['../classEule_1_1Vector3.html#ab43c649b5f80f80660ce83a28697f1e9',1,'Eule::Vector3::Vector3(T _x, T _y, T _z)'],['../classEule_1_1Vector3.html#ac485bad4d2a077e0ab2a2bc68e223740',1,'Eule::Vector3::Vector3(const Vector3< T > &other)=default'],['../classEule_1_1Vector3.html#a9c6dc41aad5e44f30baad3c3864148b8',1,'Eule::Vector3::Vector3(Vector3< T > &&other) noexcept=default']]], + ['vector3_2ecpp_127',['Vector3.cpp',['../Vector3_8cpp.html',1,'']]], + ['vector3_2eh_128',['Vector3.h',['../Vector3_8h.html',1,'']]], + ['vector3_3c_20double_20_3e_129',['Vector3< double >',['../classEule_1_1Vector3.html',1,'Eule']]], + ['vector3d_130',['Vector3d',['../namespaceEule.html#afc45246550a85134cf500caa2b81061a',1,'Eule']]], + ['vector3i_131',['Vector3i',['../namespaceEule.html#a2ee0ef456d32068e4f9b8355ca47acd7',1,'Eule']]], + ['vector4_132',['Vector4',['../classEule_1_1Vector4.html',1,'Eule::Vector4< T >'],['../classEule_1_1Vector4.html#ad49c5d39b5478aefea2acfe65bd59393',1,'Eule::Vector4::Vector4()'],['../classEule_1_1Vector4.html#aaa8aa9abea8ad8dde3aaa2de27ac2391',1,'Eule::Vector4::Vector4(T _x, T _y, T _z, T _w)'],['../classEule_1_1Vector4.html#aa47cf18eb55ec51c7dd0a95794d7230d',1,'Eule::Vector4::Vector4(const Vector4< T > &other)=default'],['../classEule_1_1Vector4.html#a9c9e20e38663621063f2437965fac438',1,'Eule::Vector4::Vector4(Vector4< T > &&other) noexcept=default']]], + ['vector4_2ecpp_133',['Vector4.cpp',['../Vector4_8cpp.html',1,'']]], + ['vector4_2eh_134',['Vector4.h',['../Vector4_8h.html',1,'']]], + ['vector4_3c_20double_20_3e_135',['Vector4< double >',['../classEule_1_1Vector4.html',1,'Eule']]], + ['vector4d_136',['Vector4d',['../namespaceEule.html#ab1f7f26891b56b960ca6cca5cc1cc44e',1,'Eule']]], + ['vector4i_137',['Vector4i',['../namespaceEule.html#aea48fbceb33833fc808355c9eec721bb',1,'Eule']]], + ['vectorscale_138',['VectorScale',['../classEule_1_1Vector2.html#a5c7eb6afd348c8409f856d398593713e',1,'Eule::Vector2::VectorScale()'],['../classEule_1_1Vector3.html#afbfdd011a51ae697bdf0d297f2f6aa95',1,'Eule::Vector3::VectorScale()'],['../classEule_1_1Vector4.html#ae24537cb41abb4365a22fe3b07869b85',1,'Eule::Vector4::VectorScale()']]] +]; diff --git a/Doxygen/build/search/all_16.html b/Doxygen/build/search/all_16.html new file mode 100644 index 0000000..7bd7afe --- /dev/null +++ b/Doxygen/build/search/all_16.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_16.js b/Doxygen/build/search/all_16.js new file mode 100644 index 0000000..071ae39 --- /dev/null +++ b/Doxygen/build/search/all_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['w_139',['w',['../classEule_1_1Vector4.html#a4b2184f91a991264ddc3dae3beadf23e',1,'Eule::Vector4']]] +]; diff --git a/Doxygen/build/search/all_17.html b/Doxygen/build/search/all_17.html new file mode 100644 index 0000000..35702ec --- /dev/null +++ b/Doxygen/build/search/all_17.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_17.js b/Doxygen/build/search/all_17.js new file mode 100644 index 0000000..8e3009a --- /dev/null +++ b/Doxygen/build/search/all_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x_140',['x',['../classEule_1_1Vector2.html#acca020e7957a9b7b2682f2df496bcdb7',1,'Eule::Vector2::x()'],['../classEule_1_1Vector3.html#a3d7770a583354b1dfc2f6af1092adc1b',1,'Eule::Vector3::x()'],['../classEule_1_1Vector4.html#a6abdc466a694e39b1bf5e71dd26e9fbf',1,'Eule::Vector4::x()']]] +]; diff --git a/Doxygen/build/search/all_18.html b/Doxygen/build/search/all_18.html new file mode 100644 index 0000000..540cdb6 --- /dev/null +++ b/Doxygen/build/search/all_18.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_18.js b/Doxygen/build/search/all_18.js new file mode 100644 index 0000000..37fb95f --- /dev/null +++ b/Doxygen/build/search/all_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y_141',['y',['../classEule_1_1Vector2.html#a077434c60e04b051347a43ce26fbdbc9',1,'Eule::Vector2::y()'],['../classEule_1_1Vector3.html#a716e038c7b599bc5c741dfc0a3c42146',1,'Eule::Vector3::y()'],['../classEule_1_1Vector4.html#a994773dc2da079a335f4b57153cf82c9',1,'Eule::Vector4::y()']]] +]; diff --git a/Doxygen/build/search/all_19.html b/Doxygen/build/search/all_19.html new file mode 100644 index 0000000..14e13e7 --- /dev/null +++ b/Doxygen/build/search/all_19.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_19.js b/Doxygen/build/search/all_19.js new file mode 100644 index 0000000..5e04e2e --- /dev/null +++ b/Doxygen/build/search/all_19.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['z_142',['z',['../classEule_1_1Vector3.html#a754b1a46c44a0fde99e670e174dba674',1,'Eule::Vector3::z()'],['../classEule_1_1Vector4.html#acf70d20ed586c3e168f2664f643902f0',1,'Eule::Vector4::z()']]], + ['zero_143',['zero',['../classEule_1_1Vector2.html#a44cd63661b38477ebd67c9eb20369e7c',1,'Eule::Vector2::zero()'],['../classEule_1_1Vector3.html#a1f0b4bb9f5533e3a134310d702bbfb33',1,'Eule::Vector3::zero()'],['../classEule_1_1Vector4.html#adf801d37181ff33a920f31536337ca07',1,'Eule::Vector4::zero()']]] +]; diff --git a/Doxygen/build/search/all_1a.html b/Doxygen/build/search/all_1a.html new file mode 100644 index 0000000..233281a --- /dev/null +++ b/Doxygen/build/search/all_1a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_1a.js b/Doxygen/build/search/all_1a.js new file mode 100644 index 0000000..4dfbca3 --- /dev/null +++ b/Doxygen/build/search/all_1a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7equaternion_144',['~Quaternion',['../classEule_1_1Quaternion.html#a5f834c2ca469cd71edc8a23fdc3f56e8',1,'Eule::Quaternion']]] +]; diff --git a/Doxygen/build/search/all_2.html b/Doxygen/build/search/all_2.html new file mode 100644 index 0000000..b26d916 --- /dev/null +++ b/Doxygen/build/search/all_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_2.js b/Doxygen/build/search/all_2.js new file mode 100644 index 0000000..9ef97b0 --- /dev/null +++ b/Doxygen/build/search/all_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['c_8',['c',['../classEule_1_1Matrix4x4.html#a68920de2728741859aa7cb3d245aa2c3',1,'Eule::Matrix4x4']]], + ['clamp_9',['Clamp',['../classEule_1_1Math.html#a73947ee95912f0a06359fc5004bfc840',1,'Eule::Math']]], + ['collider_10',['Collider',['../classEule_1_1Collider.html',1,'Eule']]], + ['collider_2ecpp_11',['Collider.cpp',['../Collider_8cpp.html',1,'']]], + ['collider_2eh_12',['Collider.h',['../Collider_8h.html',1,'']]], + ['conjugate_13',['Conjugate',['../classEule_1_1Quaternion.html#aa5333ab28dbe4d5ae15ab5dbc36b90ca',1,'Eule::Quaternion']]], + ['constants_2eh_14',['Constants.h',['../Constants_8h.html',1,'']]], + ['contains_15',['Contains',['../classEule_1_1Collider.html#a19a1220bf41df1d8c720296bfe91f5fb',1,'Eule::Collider::Contains()'],['../classEule_1_1TrapazoidalPrismCollider.html#abc4865f44bef057bbbb39385eae9e2dc',1,'Eule::TrapazoidalPrismCollider::Contains()']]], + ['crossproduct_16',['CrossProduct',['../classEule_1_1Vector2.html#a308df926fccbf4a5321a821d92924dfb',1,'Eule::Vector2::CrossProduct()'],['../classEule_1_1Vector3.html#abd62a5f6b0f380491cf80d70ed2e5317',1,'Eule::Vector3::CrossProduct()']]] +]; diff --git a/Doxygen/build/search/all_3.html b/Doxygen/build/search/all_3.html new file mode 100644 index 0000000..b61b96f --- /dev/null +++ b/Doxygen/build/search/all_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_3.js b/Doxygen/build/search/all_3.js new file mode 100644 index 0000000..595291b --- /dev/null +++ b/Doxygen/build/search/all_3.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['d_17',['d',['../classEule_1_1Matrix4x4.html#a7f21115e0597a25fbdb4d9784de0c988',1,'Eule::Matrix4x4']]], + ['deg2rad_18',['Deg2Rad',['../Constants_8h.html#a20e4bd0fb882dfa45051031d5e2ce922',1,'Constants.h']]], + ['determinant_19',['Determinant',['../classEule_1_1Matrix4x4.html#a8a7c7d927d012aaa3abbbc210444b4c0',1,'Eule::Matrix4x4']]], + ['dotproduct_20',['DotProduct',['../classEule_1_1Vector2.html#a5ed3a9b01d550a9b745b885fdb03d68c',1,'Eule::Vector2::DotProduct()'],['../classEule_1_1Vector3.html#a6cbc1516e045c0334f8bf8a1dcd6ca91',1,'Eule::Vector3::DotProduct()']]], + ['down_21',['down',['../classEule_1_1Vector2.html#a7e60489f914c01c98839333dd41d8a49',1,'Eule::Vector2::down()'],['../classEule_1_1Vector3.html#ac44e82051be457c78f6428859482f848',1,'Eule::Vector3::down()'],['../classEule_1_1Vector4.html#a0f00c430129cb8edfb9c96693c39ab73',1,'Eule::Vector4::down()']]], + ['droptranslationcomponents_22',['DropTranslationComponents',['../classEule_1_1Matrix4x4.html#a42eaf01fbe7f1f57d6fb5bf7111d3338',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/all_4.html b/Doxygen/build/search/all_4.html new file mode 100644 index 0000000..06de155 --- /dev/null +++ b/Doxygen/build/search/all_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_4.js b/Doxygen/build/search/all_4.js new file mode 100644 index 0000000..96883f9 --- /dev/null +++ b/Doxygen/build/search/all_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['e_23',['e',['../classEule_1_1Matrix4x4.html#a19fb1d47aea5672da2fe1fc20500615a',1,'Eule::Matrix4x4']]], + ['eule_24',['Eule',['../namespaceEule.html',1,'']]], + ['eule_2evcxproj_2efilelistabsolute_2etxt_25',['Eule.vcxproj.FileListAbsolute.txt',['../Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)'],['../x64_2Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)'],['../x64_2Release_2Eule_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)']]] +]; diff --git a/Doxygen/build/search/all_5.html b/Doxygen/build/search/all_5.html new file mode 100644 index 0000000..2544c4e --- /dev/null +++ b/Doxygen/build/search/all_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_5.js b/Doxygen/build/search/all_5.js new file mode 100644 index 0000000..353ae65 --- /dev/null +++ b/Doxygen/build/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['f_26',['f',['../classEule_1_1Matrix4x4.html#a47b0d5273289c602f1ab4d3b963fe267',1,'Eule::Matrix4x4']]], + ['forward_27',['forward',['../classEule_1_1Vector3.html#a791d893f68f2aee85287ab3ab7612ff0',1,'Eule::Vector3::forward()'],['../classEule_1_1Vector4.html#a9ec10cf10c0edb934169211ad7fef821',1,'Eule::Vector4::forward()']]], + ['front_28',['FRONT',['../classEule_1_1TrapazoidalPrismCollider.html#ad8648ff086e60e5cae763c14b72cd8fd',1,'Eule::TrapazoidalPrismCollider']]], + ['future_29',['future',['../classEule_1_1Vector4.html#afefa0db0ba202f63e338506fd21a61e9',1,'Eule::Vector4']]] +]; diff --git a/Doxygen/build/search/all_6.html b/Doxygen/build/search/all_6.html new file mode 100644 index 0000000..43f14ea --- /dev/null +++ b/Doxygen/build/search/all_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_6.js b/Doxygen/build/search/all_6.js new file mode 100644 index 0000000..77cd9f4 --- /dev/null +++ b/Doxygen/build/search/all_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['g_30',['g',['../classEule_1_1Matrix4x4.html#a1519f79fbfd4f33a0718ffc030fb6706',1,'Eule::Matrix4x4']]], + ['getcofactors_31',['GetCofactors',['../classEule_1_1Matrix4x4.html#aefc37ab31604f888e393a1de62927d55',1,'Eule::Matrix4x4']]], + ['getrawvalues_32',['GetRawValues',['../classEule_1_1Quaternion.html#aaa193aa23729338a64bbd16eacab56ec',1,'Eule::Quaternion']]], + ['gettranslationcomponent_33',['GetTranslationComponent',['../classEule_1_1Matrix4x4.html#a19cc83344e288c09f7200d8410277b28',1,'Eule::Matrix4x4']]], + ['getvertex_34',['GetVertex',['../classEule_1_1TrapazoidalPrismCollider.html#a4b49f6749d39571121621dd45b32bac3',1,'Eule::TrapazoidalPrismCollider']]] +]; diff --git a/Doxygen/build/search/all_7.html b/Doxygen/build/search/all_7.html new file mode 100644 index 0000000..af52f82 --- /dev/null +++ b/Doxygen/build/search/all_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_7.js b/Doxygen/build/search/all_7.js new file mode 100644 index 0000000..06c423d --- /dev/null +++ b/Doxygen/build/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['h_35',['h',['../classEule_1_1Matrix4x4.html#ac48433ef3faa767919938e56803bfc41',1,'Eule::Matrix4x4']]], + ['half_5fpi_36',['HALF_PI',['../Constants_8h.html#ae3ec3219e4eee3b0992bfd59c2e2bc42',1,'Constants.h']]] +]; diff --git a/Doxygen/build/search/all_8.html b/Doxygen/build/search/all_8.html new file mode 100644 index 0000000..cf2b5df --- /dev/null +++ b/Doxygen/build/search/all_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_8.js b/Doxygen/build/search/all_8.js new file mode 100644 index 0000000..3e59f07 --- /dev/null +++ b/Doxygen/build/search/all_8.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['i_37',['i',['../classEule_1_1Matrix4x4.html#afb1b52d2d395e1d4a099556fac3918dc',1,'Eule::Matrix4x4']]], + ['inverse_38',['Inverse',['../classEule_1_1Quaternion.html#a704d63f0f2cd2d50fd61562e3c2eb576',1,'Eule::Quaternion']]], + ['inverse3x3_39',['Inverse3x3',['../classEule_1_1Matrix4x4.html#acfd6d8677484cb6ed246efe5c39b9119',1,'Eule::Matrix4x4']]], + ['inverse4x4_40',['Inverse4x4',['../classEule_1_1Matrix4x4.html#ab635c2bbd0d91ad35369efd4dc5dac29',1,'Eule::Matrix4x4']]], + ['isinversible3x3_41',['IsInversible3x3',['../classEule_1_1Matrix4x4.html#ab52b7e10a4e7ecbdb347fd82eb9ecd22',1,'Eule::Matrix4x4']]], + ['isinversible4x4_42',['IsInversible4x4',['../classEule_1_1Matrix4x4.html#a24a2113d49c0a86c48755b8ad11e22c0',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/all_9.html b/Doxygen/build/search/all_9.html new file mode 100644 index 0000000..690785a --- /dev/null +++ b/Doxygen/build/search/all_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_9.js b/Doxygen/build/search/all_9.js new file mode 100644 index 0000000..227d400 --- /dev/null +++ b/Doxygen/build/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['j_43',['j',['../classEule_1_1Matrix4x4.html#a6ad97bdfe3f070fd4d1d0ebc2ee1309a',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/all_a.html b/Doxygen/build/search/all_a.html new file mode 100644 index 0000000..f2f3d3a --- /dev/null +++ b/Doxygen/build/search/all_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_a.js b/Doxygen/build/search/all_a.js new file mode 100644 index 0000000..e47277f --- /dev/null +++ b/Doxygen/build/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['k_44',['k',['../classEule_1_1Matrix4x4.html#af93a84acffc7d5282653b7b591633874',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/all_b.html b/Doxygen/build/search/all_b.html new file mode 100644 index 0000000..14f3403 --- /dev/null +++ b/Doxygen/build/search/all_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_b.js b/Doxygen/build/search/all_b.js new file mode 100644 index 0000000..fadfc60 --- /dev/null +++ b/Doxygen/build/search/all_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['l_45',['l',['../classEule_1_1Matrix4x4.html#a9a18b42500a1f9c551c7f27039cb6a67',1,'Eule::Matrix4x4']]], + ['left_46',['left',['../classEule_1_1Vector2.html#a4ad2191854a9fdbc8dae0967b3a48be5',1,'Eule::Vector2::left()'],['../classEule_1_1Vector3.html#a37949a2f74ceb05ea1797be34c42989a',1,'Eule::Vector3::left()'],['../classEule_1_1Vector4.html#a354e05fd3b3a38b530258b3247c544d1',1,'Eule::Vector4::left()'],['../classEule_1_1TrapazoidalPrismCollider.html#a2d1fb0b58a8562c1869a8dbef330c22b',1,'Eule::TrapazoidalPrismCollider::LEFT()']]], + ['lerp_47',['Lerp',['../classEule_1_1Math.html#a991f62401991014de20aca0fda9f9ef7',1,'Eule::Math::Lerp()'],['../classEule_1_1Quaternion.html#a2c386181050f7745341a00f79e496e08',1,'Eule::Quaternion::Lerp()'],['../classEule_1_1Vector2.html#a8bb45fd8415f24c58a59739d67f86038',1,'Eule::Vector2::Lerp()'],['../classEule_1_1Vector3.html#add2f96155edb1159b53725932d951f1f',1,'Eule::Vector3::Lerp()'],['../classEule_1_1Vector4.html#ae5b7ed7132d76ffbde20f24330fd4f69',1,'Eule::Vector4::Lerp()']]], + ['lerpself_48',['LerpSelf',['../classEule_1_1Vector2.html#a85ad9f5dca4f60c679be5edd86942774',1,'Eule::Vector2::LerpSelf()'],['../classEule_1_1Vector3.html#a8fb48e9a527d5e6fadb3b3102fa8f4c3',1,'Eule::Vector3::LerpSelf()'],['../classEule_1_1Vector4.html#ab4efb629829cfebcbb82b4318c3e3bb3',1,'Eule::Vector4::LerpSelf()']]] +]; diff --git a/Doxygen/build/search/all_c.html b/Doxygen/build/search/all_c.html new file mode 100644 index 0000000..da60ab8 --- /dev/null +++ b/Doxygen/build/search/all_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_c.js b/Doxygen/build/search/all_c.js new file mode 100644 index 0000000..fe888fa --- /dev/null +++ b/Doxygen/build/search/all_c.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['m_49',['m',['../classEule_1_1Matrix4x4.html#a337d6bb2a36f36cd4620cdd35555893d',1,'Eule::Matrix4x4']]], + ['magnitude_50',['Magnitude',['../classEule_1_1Vector2.html#a85551e0734a2f3143c4ecdbaf4a3ea46',1,'Eule::Vector2::Magnitude()'],['../classEule_1_1Vector3.html#a96e6e436600d1420250ef2868854988d',1,'Eule::Vector3::Magnitude()'],['../classEule_1_1Vector4.html#a35c6fccb7a02095b595575903b590dd2',1,'Eule::Vector4::Magnitude()']]], + ['make_5fsure_5frng_5fis_5finitialized_51',['MAKE_SURE_RNG_IS_INITIALIZED',['../Math_8cpp.html#ac0cae806d3e9a3772f7388dd53cfc370',1,'Math.cpp']]], + ['math_52',['Math',['../classEule_1_1Math.html',1,'Eule']]], + ['math_2ecpp_53',['Math.cpp',['../Math_8cpp.html',1,'']]], + ['math_2eh_54',['Math.h',['../Math_8h.html',1,'']]], + ['matrix4x4_55',['Matrix4x4',['../classEule_1_1Matrix4x4.html',1,'Eule::Matrix4x4'],['../classEule_1_1Matrix4x4.html#a714a467ba7f85f88ebe3897b5e3580be',1,'Eule::Matrix4x4::Matrix4x4()'],['../classEule_1_1Matrix4x4.html#a4a71d8fc881ddb7d51577e0a762ac186',1,'Eule::Matrix4x4::Matrix4x4(const Matrix4x4 &other)'],['../classEule_1_1Matrix4x4.html#a44f2af9bfad01c2d065985c1dfda8d08',1,'Eule::Matrix4x4::Matrix4x4(Matrix4x4 &&other) noexcept']]], + ['matrix4x4_2ecpp_56',['Matrix4x4.cpp',['../Matrix4x4_8cpp.html',1,'']]], + ['matrix4x4_2eh_57',['Matrix4x4.h',['../Matrix4x4_8h.html',1,'']]], + ['max_58',['Max',['../classEule_1_1Math.html#a991c620839f5fa9fcfe7e503b8ab0008',1,'Eule::Math']]], + ['min_59',['Min',['../classEule_1_1Math.html#aa4d3c52cb09984ec567a9961ff7e3f02',1,'Eule::Math']]], + ['multiply4x4_60',['Multiply4x4',['../classEule_1_1Matrix4x4.html#ae364e54822b558526dd3404953d48090',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/all_d.html b/Doxygen/build/search/all_d.html new file mode 100644 index 0000000..bc376fe --- /dev/null +++ b/Doxygen/build/search/all_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_d.js b/Doxygen/build/search/all_d.js new file mode 100644 index 0000000..106d882 --- /dev/null +++ b/Doxygen/build/search/all_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['n_61',['n',['../classEule_1_1Matrix4x4.html#a4d6df21744055ee87479591b619af33d',1,'Eule::Matrix4x4']]], + ['normalize_62',['Normalize',['../classEule_1_1Vector2.html#a0f8de10acb284e2d6fcda8ba6efb3a15',1,'Eule::Vector2::Normalize()'],['../classEule_1_1Vector3.html#a4650f19df9b05d941d0fbc29ba59d980',1,'Eule::Vector3::Normalize()'],['../classEule_1_1Vector4.html#a3d10b51b1fe97661650b2991b29b67a7',1,'Eule::Vector4::Normalize()']]], + ['normalizeself_63',['NormalizeSelf',['../classEule_1_1Vector2.html#a9b15bbe640e8b40a743de72652b74591',1,'Eule::Vector2::NormalizeSelf()'],['../classEule_1_1Vector3.html#a69f80925d46f3630a2242b44ddb43a56',1,'Eule::Vector3::NormalizeSelf()'],['../classEule_1_1Vector4.html#a98bea58a58b04357044f72afc905896d',1,'Eule::Vector4::NormalizeSelf()']]] +]; diff --git a/Doxygen/build/search/all_e.html b/Doxygen/build/search/all_e.html new file mode 100644 index 0000000..2e3c74d --- /dev/null +++ b/Doxygen/build/search/all_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_e.js b/Doxygen/build/search/all_e.js new file mode 100644 index 0000000..e6acf1a --- /dev/null +++ b/Doxygen/build/search/all_e.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['o_64',['o',['../classEule_1_1Matrix4x4.html#a9e813c2000f912ba2b16ea19d387565b',1,'Eule::Matrix4x4']]], + ['one_65',['one',['../classEule_1_1Vector2.html#a2651455a1339e1d61151538f986aa19b',1,'Eule::Vector2::one()'],['../classEule_1_1Vector3.html#a46a389aa258dc615650ffd7e98e3e482',1,'Eule::Vector3::one()'],['../classEule_1_1Vector4.html#a41087d79654271a580c8e5705825b2ed',1,'Eule::Vector4::one()']]], + ['operator_20vector2_3c_20t_20_3e_66',['operator Vector2< T >',['../classEule_1_1Vector3.html#a0bdcd7104775000964029ef94e8a3b6a',1,'Eule::Vector3::operator Vector2< T >()'],['../classEule_1_1Vector4.html#aa1384f5e84216dc264074b716efd37a0',1,'Eule::Vector4::operator Vector2< T >()']]], + ['operator_20vector3_3c_20t_20_3e_67',['operator Vector3< T >',['../classEule_1_1Vector2.html#a3623d54a21bd36d25916218d7ee6eef0',1,'Eule::Vector2::operator Vector3< T >()'],['../classEule_1_1Vector4.html#ab6911dc86dd0289c604167b95e18ebbc',1,'Eule::Vector4::operator Vector3< T >()']]], + ['operator_20vector4_3c_20t_20_3e_68',['operator Vector4< T >',['../classEule_1_1Vector2.html#a4adc4bcb6adab3c937c8154ddc4d9d51',1,'Eule::Vector2::operator Vector4< T >()'],['../classEule_1_1Vector3.html#a67d1daadee40fbaada3b5c3b4b4b7e79',1,'Eule::Vector3::operator Vector4< T >()']]], + ['operator_21_3d_69',['operator!=',['../classEule_1_1Matrix4x4.html#a4e78f3931e6467f50f979e35e4b39a22',1,'Eule::Matrix4x4::operator!=()'],['../classEule_1_1Quaternion.html#a1a97201d7deb56f543d65be9741cd2bd',1,'Eule::Quaternion::operator!=()'],['../classEule_1_1Vector2.html#aff40b705013d8356239b01c80b26e9a9',1,'Eule::Vector2::operator!=()'],['../classEule_1_1Vector3.html#ad71e5d9e7c46e63d226c180a2d8c0beb',1,'Eule::Vector3::operator!=()'],['../classEule_1_1Vector4.html#abc9e49133b73116830c953a4666e403c',1,'Eule::Vector4::operator!=()']]], + ['operator_2a_70',['operator*',['../classEule_1_1Matrix4x4.html#a1c687b90d224b7fac251d8539b8d1a57',1,'Eule::Matrix4x4::operator*(const Matrix4x4 &other) const'],['../classEule_1_1Matrix4x4.html#aea2039315271583e4832c8502e5d9144',1,'Eule::Matrix4x4::operator*(const double scalar) const'],['../classEule_1_1Quaternion.html#ab178e12364d87fb676d85695e491361f',1,'Eule::Quaternion::operator*(const Quaternion &q) const'],['../classEule_1_1Quaternion.html#a29aeab8de1a33ae8c043e3438829835f',1,'Eule::Quaternion::operator*(const Vector3d &p) const'],['../classEule_1_1Vector2.html#af70e271efeb2ea957532e917773e2724',1,'Eule::Vector2::operator*()'],['../classEule_1_1Vector3.html#afd6db19e66c398814f79bfd454682548',1,'Eule::Vector3::operator*(const T scale) const'],['../classEule_1_1Vector3.html#ab7148d41a5184ee4e2948cfdc5eb53f5',1,'Eule::Vector3::operator*(const Matrix4x4 &mat) const'],['../classEule_1_1Vector4.html#af397629f4fc12f8846df9bab8d6d8bbe',1,'Eule::Vector4::operator*(const T scale) const'],['../classEule_1_1Vector4.html#af19cb20ab4ccf6f39c9c8875495de565',1,'Eule::Vector4::operator*(const Matrix4x4 &mat) const']]], + ['operator_2a_3d_71',['operator*=',['../classEule_1_1Matrix4x4.html#a45fbc7927b3acf79c219da27470e0d27',1,'Eule::Matrix4x4::operator*=(const Matrix4x4 &other)'],['../classEule_1_1Matrix4x4.html#a0e8b677ef2f023df5bc46b47d4c15220',1,'Eule::Matrix4x4::operator*=(const double scalar)'],['../classEule_1_1Quaternion.html#a8941e3b43aabd15e2471e57ebd49c8a7',1,'Eule::Quaternion::operator*=()'],['../classEule_1_1Vector2.html#a14bd68884a3d6b83201f38df17ff1082',1,'Eule::Vector2::operator*=()'],['../classEule_1_1Vector3.html#a7a6e66693d2a1e5cf4dd7cca94ad49db',1,'Eule::Vector3::operator*=(const T scale)'],['../classEule_1_1Vector3.html#a2c3254704c4bf900277d2205f55f4157',1,'Eule::Vector3::operator*=(const Matrix4x4 &mat)'],['../classEule_1_1Vector4.html#a2359c0ecd8b9af425df240774d5ae950',1,'Eule::Vector4::operator*=(const T scale)'],['../classEule_1_1Vector4.html#a7b48a3504125d0017ea237825da3d126',1,'Eule::Vector4::operator*=(const Matrix4x4 &mat)']]], + ['operator_2b_72',['operator+',['../classEule_1_1Matrix4x4.html#a8e5abd340eef361f18bd8cc7166fef1b',1,'Eule::Matrix4x4::operator+()'],['../classEule_1_1Vector2.html#a2acbb7e46d9659a26afb746372ea4364',1,'Eule::Vector2::operator+()'],['../classEule_1_1Vector3.html#ae094943bacbd043b41f9b34bdb51542e',1,'Eule::Vector3::operator+()'],['../classEule_1_1Vector4.html#a0b8b7947175218917b2683d48790a40f',1,'Eule::Vector4::operator+()']]], + ['operator_2b_3d_73',['operator+=',['../classEule_1_1Matrix4x4.html#a89e9d610c16c97178a62b697d04fd873',1,'Eule::Matrix4x4::operator+=()'],['../classEule_1_1Vector2.html#a8b1eb48922a38c4237ea26b11ce43fd2',1,'Eule::Vector2::operator+=()'],['../classEule_1_1Vector3.html#ac6fe920a34552925aff185f335b13e14',1,'Eule::Vector3::operator+=()'],['../classEule_1_1Vector4.html#a54a9edbe72049b85f03827d488363d0a',1,'Eule::Vector4::operator+=()']]], + ['operator_2d_74',['operator-',['../classEule_1_1Matrix4x4.html#a4d4f16882462f4afc18debc6594019a1',1,'Eule::Matrix4x4::operator-()'],['../classEule_1_1Vector2.html#a52060a0688502456b4bb3e443c36c25d',1,'Eule::Vector2::operator-(const Vector2< T > &other) const'],['../classEule_1_1Vector2.html#a352b4e84721183ef182324d350df64df',1,'Eule::Vector2::operator-() const'],['../classEule_1_1Vector3.html#a88273031482c057795e05ea25218ea4b',1,'Eule::Vector3::operator-(const Vector3< T > &other) const'],['../classEule_1_1Vector3.html#a11f2449516a8787f4cce227f12ae2f03',1,'Eule::Vector3::operator-() const'],['../classEule_1_1Vector4.html#a6e68957131d6d87c69dce71ff88097f3',1,'Eule::Vector4::operator-(const Vector4< T > &other) const'],['../classEule_1_1Vector4.html#a36426b12cdcdbfaa6daa35c9d3d4e9c4',1,'Eule::Vector4::operator-() const']]], + ['operator_2d_3d_75',['operator-=',['../classEule_1_1Matrix4x4.html#aca08ad35ac143742eb2aa22892d30e46',1,'Eule::Matrix4x4::operator-=()'],['../classEule_1_1Vector2.html#a76103604080c7d718b634f9394143bfd',1,'Eule::Vector2::operator-=()'],['../classEule_1_1Vector3.html#af1207f3bf66aaf0fa781d43db40b8006',1,'Eule::Vector3::operator-=()'],['../classEule_1_1Vector4.html#aec85460804d89ed9206cc478b2f3c8ba',1,'Eule::Vector4::operator-=()']]], + ['operator_2f_76',['operator/',['../classEule_1_1Matrix4x4.html#acbc9bcf9b58d98372b8f754b2661dc04',1,'Eule::Matrix4x4::operator/(const Matrix4x4 &other) const'],['../classEule_1_1Matrix4x4.html#acca753b1befa72d893ccb73a2390a259',1,'Eule::Matrix4x4::operator/(const double denominator) const'],['../classEule_1_1Quaternion.html#a23488d14e31db8cec75a0e8c6f38c70a',1,'Eule::Quaternion::operator/()'],['../classEule_1_1Vector2.html#adcecda237ca7909bc8de0f8e4a1b586d',1,'Eule::Vector2::operator/()'],['../classEule_1_1Vector3.html#aa9bace50e1db42029d93fbd8a417fc70',1,'Eule::Vector3::operator/()'],['../classEule_1_1Vector4.html#ac952c5322209dffd5ea7bb4a9b06c52d',1,'Eule::Vector4::operator/()']]], + ['operator_2f_3d_77',['operator/=',['../classEule_1_1Matrix4x4.html#a25369a9c56f20e205e827dab8be78b21',1,'Eule::Matrix4x4::operator/=(const Matrix4x4 &other)'],['../classEule_1_1Matrix4x4.html#a7335fdcec31085ff17b4eda00bf0e3eb',1,'Eule::Matrix4x4::operator/=(const double denominator)'],['../classEule_1_1Quaternion.html#aa071c90a64d21cbb8109366bf2449838',1,'Eule::Quaternion::operator/=()'],['../classEule_1_1Vector2.html#a1a4503a880f870a1f225fe635e7482bb',1,'Eule::Vector2::operator/=()'],['../classEule_1_1Vector3.html#a69f00f05eda60630d48499067297e431',1,'Eule::Vector3::operator/=()'],['../classEule_1_1Vector4.html#a35680f0675813c93e1c2cd3607c1ea2e',1,'Eule::Vector4::operator/=()']]], + ['operator_3c_3c_78',['operator<<',['../classEule_1_1Matrix4x4.html#ab4da4b366d5d0a7bbe890aff1f2445df',1,'Eule::Matrix4x4::operator<<()'],['../classEule_1_1Matrix4x4.html#a4edddbe2b7f5913d67bb90a4d28f44e3',1,'Eule::Matrix4x4::operator<<()'],['../classEule_1_1Quaternion.html#a9dc71eaedf4486dc005fa9a67c6da866',1,'Eule::Quaternion::operator<<()'],['../classEule_1_1Quaternion.html#a7cf5f94ea6e861b3c01f674d7ef987c7',1,'Eule::Quaternion::operator<<()'],['../classEule_1_1Vector2.html#aa89ba3c2ae7a53a25530d3eef6a3c4e3',1,'Eule::Vector2::operator<<()'],['../classEule_1_1Vector2.html#a7ae9f5fa7ea5f9e9ae4ba0dca0a8494b',1,'Eule::Vector2::operator<<()'],['../classEule_1_1Vector3.html#a5705993a4489fc62d73b85f3654261cf',1,'Eule::Vector3::operator<<()'],['../classEule_1_1Vector3.html#a062adbc281326979ec3f5f71052d0deb',1,'Eule::Vector3::operator<<()'],['../classEule_1_1Vector4.html#a67f776474e56594e4973be32df68602a',1,'Eule::Vector4::operator<<()'],['../classEule_1_1Vector4.html#a111187ac1ffc14d4aa33d85a14645870',1,'Eule::Vector4::operator<<()'],['../namespaceEule.html#aa7ebcddcafa056556a6e17dcc968e7dd',1,'Eule::operator<<(std::ostream &os, const Matrix4x4 &m)'],['../namespaceEule.html#ae2fd3ed809d4c950926560fd9b3f2886',1,'Eule::operator<<(std::wostream &os, const Matrix4x4 &m)'],['../namespaceEule.html#a632355bad553c40d9fd297c260c1d44b',1,'Eule::operator<<(std::ostream &os, const Quaternion &q)'],['../namespaceEule.html#a5d5c597b5ae3b3143015316a4a60eacc',1,'Eule::operator<<(std::wostream &os, const Quaternion &q)']]], + ['operator_3d_79',['operator=',['../classEule_1_1Matrix4x4.html#a26938f026d8d438f72b1d5fd4a28f61c',1,'Eule::Matrix4x4::operator=(const Matrix4x4 &other)'],['../classEule_1_1Matrix4x4.html#a3e2dab83b760ff7da038f14b977d7642',1,'Eule::Matrix4x4::operator=(Matrix4x4 &&other) noexcept'],['../classEule_1_1Quaternion.html#a9cf7fd3318ffdd50e6567c84d24c20e9',1,'Eule::Quaternion::operator=()'],['../classEule_1_1TrapazoidalPrismCollider.html#a1dd50a1f4139a78d9c1c9d6f62a429bd',1,'Eule::TrapazoidalPrismCollider::operator=(const TrapazoidalPrismCollider &other)'],['../classEule_1_1TrapazoidalPrismCollider.html#a7ca93565db388a08ed955a42c8fb99d8',1,'Eule::TrapazoidalPrismCollider::operator=(TrapazoidalPrismCollider &&other) noexcept'],['../classEule_1_1Vector2.html#afc79cf4d93bd0e6feec0fe64fa10d3cf',1,'Eule::Vector2::operator=(const Vector2< T > &other)'],['../classEule_1_1Vector2.html#a6642aa42c0446aecd59f67244ddad873',1,'Eule::Vector2::operator=(Vector2< T > &&other) noexcept'],['../classEule_1_1Vector3.html#a9e725f7a3bf0fb822acf9418dc950ad5',1,'Eule::Vector3::operator=(const Vector3< T > &other)'],['../classEule_1_1Vector3.html#a68cd4f7804a47455d5a5af9cc6b66e38',1,'Eule::Vector3::operator=(Vector3< T > &&other) noexcept'],['../classEule_1_1Vector4.html#a7dc41444f6e3fd30a9cc256ed8414ee6',1,'Eule::Vector4::operator=(const Vector4< T > &other)'],['../classEule_1_1Vector4.html#a331a780b59a0e15e887f11a6fe396934',1,'Eule::Vector4::operator=(Vector4< T > &&other) noexcept']]], + ['operator_3d_3d_80',['operator==',['../classEule_1_1Matrix4x4.html#a37f9e809552b58472f4e20fbeabffdca',1,'Eule::Matrix4x4::operator==()'],['../classEule_1_1Quaternion.html#a516d4dcc7c6f13d8846070b72f588210',1,'Eule::Quaternion::operator==()'],['../classEule_1_1Vector2.html#a3f73897ee668229ea1513f1e2482b296',1,'Eule::Vector2::operator==()'],['../classEule_1_1Vector3.html#a8619be9756e498c50158c5dac275262e',1,'Eule::Vector3::operator==()'],['../classEule_1_1Vector4.html#ae2af40b477e41f8a42db7f80a832a1e7',1,'Eule::Vector4::operator==()']]], + ['operator_5b_5d_81',['operator[]',['../classEule_1_1Matrix4x4.html#a17702fbf3399b86eb883486208895272',1,'Eule::Matrix4x4::operator[](std::size_t y)'],['../classEule_1_1Matrix4x4.html#a1fc5eb915560132c9d908a9c9eacc510',1,'Eule::Matrix4x4::operator[](std::size_t y) const'],['../classEule_1_1Vector2.html#acbfb002c7f506358e1c9648ad0a79734',1,'Eule::Vector2::operator[](std::size_t idx)'],['../classEule_1_1Vector2.html#ac5e06e8ff35709b2a0dda3d932f0d025',1,'Eule::Vector2::operator[](std::size_t idx) const'],['../classEule_1_1Vector3.html#a71f307ae6427a4d6df51647c9d76504b',1,'Eule::Vector3::operator[](std::size_t idx)'],['../classEule_1_1Vector3.html#a4c028a7bab65693aff5d1a7c992326dc',1,'Eule::Vector3::operator[](std::size_t idx) const'],['../classEule_1_1Vector4.html#ae64012cf90d0ad436066232a741b27d5',1,'Eule::Vector4::operator[](std::size_t idx)'],['../classEule_1_1Vector4.html#a603808150eb90008831ba3050bb38a37',1,'Eule::Vector4::operator[](std::size_t idx) const']]], + ['oscillate_82',['Oscillate',['../classEule_1_1Math.html#a1b0fb72c51751470f7f819b20a5b3b3f',1,'Eule::Math']]] +]; diff --git a/Doxygen/build/search/all_f.html b/Doxygen/build/search/all_f.html new file mode 100644 index 0000000..246f8ab --- /dev/null +++ b/Doxygen/build/search/all_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/all_f.js b/Doxygen/build/search/all_f.js new file mode 100644 index 0000000..65133f6 --- /dev/null +++ b/Doxygen/build/search/all_f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['p_83',['p',['../classEule_1_1Matrix4x4.html#a3fdccd317c5ea363b91f6d8096b28bd7',1,'Eule::Matrix4x4']]], + ['past_84',['past',['../classEule_1_1Vector4.html#a5533bb69dbc4714fd53aaf1e0db9bf99',1,'Eule::Vector4']]], + ['pi_85',['PI',['../Constants_8h.html#a598a3330b3c21701223ee0ca14316eca',1,'Constants.h']]], + ['pos_86',['pos',['../structEule_1_1Rect.html#a8013088ed66af106df10acd7ded49bc7',1,'Eule::Rect']]] +]; diff --git a/Doxygen/build/search/classes_0.html b/Doxygen/build/search/classes_0.html new file mode 100644 index 0000000..f7e4c14 --- /dev/null +++ b/Doxygen/build/search/classes_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/classes_0.js b/Doxygen/build/search/classes_0.js new file mode 100644 index 0000000..f645d72 --- /dev/null +++ b/Doxygen/build/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['collider_145',['Collider',['../classEule_1_1Collider.html',1,'Eule']]] +]; diff --git a/Doxygen/build/search/classes_1.html b/Doxygen/build/search/classes_1.html new file mode 100644 index 0000000..c7ff4b3 --- /dev/null +++ b/Doxygen/build/search/classes_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/classes_1.js b/Doxygen/build/search/classes_1.js new file mode 100644 index 0000000..130b425 --- /dev/null +++ b/Doxygen/build/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['math_146',['Math',['../classEule_1_1Math.html',1,'Eule']]], + ['matrix4x4_147',['Matrix4x4',['../classEule_1_1Matrix4x4.html',1,'Eule']]] +]; diff --git a/Doxygen/build/search/classes_2.html b/Doxygen/build/search/classes_2.html new file mode 100644 index 0000000..0d1e8a0 --- /dev/null +++ b/Doxygen/build/search/classes_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/classes_2.js b/Doxygen/build/search/classes_2.js new file mode 100644 index 0000000..1a85dc0 --- /dev/null +++ b/Doxygen/build/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['quaternion_148',['Quaternion',['../classEule_1_1Quaternion.html',1,'Eule']]] +]; diff --git a/Doxygen/build/search/classes_3.html b/Doxygen/build/search/classes_3.html new file mode 100644 index 0000000..2102545 --- /dev/null +++ b/Doxygen/build/search/classes_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/classes_3.js b/Doxygen/build/search/classes_3.js new file mode 100644 index 0000000..6aea853 --- /dev/null +++ b/Doxygen/build/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rect_149',['Rect',['../structEule_1_1Rect.html',1,'Eule']]] +]; diff --git a/Doxygen/build/search/classes_4.html b/Doxygen/build/search/classes_4.html new file mode 100644 index 0000000..095ab59 --- /dev/null +++ b/Doxygen/build/search/classes_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/classes_4.js b/Doxygen/build/search/classes_4.js new file mode 100644 index 0000000..bcc5c5a --- /dev/null +++ b/Doxygen/build/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['trapazoidalprismcollider_150',['TrapazoidalPrismCollider',['../classEule_1_1TrapazoidalPrismCollider.html',1,'Eule']]] +]; diff --git a/Doxygen/build/search/classes_5.html b/Doxygen/build/search/classes_5.html new file mode 100644 index 0000000..fc9cdc9 --- /dev/null +++ b/Doxygen/build/search/classes_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/classes_5.js b/Doxygen/build/search/classes_5.js new file mode 100644 index 0000000..5e1b376 --- /dev/null +++ b/Doxygen/build/search/classes_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vector2_151',['Vector2',['../classEule_1_1Vector2.html',1,'Eule']]], + ['vector2_3c_20double_20_3e_152',['Vector2< double >',['../classEule_1_1Vector2.html',1,'Eule']]], + ['vector3_153',['Vector3',['../classEule_1_1Vector3.html',1,'Eule']]], + ['vector3_3c_20double_20_3e_154',['Vector3< double >',['../classEule_1_1Vector3.html',1,'Eule']]], + ['vector4_155',['Vector4',['../classEule_1_1Vector4.html',1,'Eule']]], + ['vector4_3c_20double_20_3e_156',['Vector4< double >',['../classEule_1_1Vector4.html',1,'Eule']]] +]; diff --git a/Doxygen/build/search/close.png b/Doxygen/build/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/Doxygen/build/search/defines_0.html b/Doxygen/build/search/defines_0.html new file mode 100644 index 0000000..2deb369 --- /dev/null +++ b/Doxygen/build/search/defines_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/defines_0.js b/Doxygen/build/search/defines_0.js new file mode 100644 index 0000000..bd8261c --- /dev/null +++ b/Doxygen/build/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deg2rad_292',['Deg2Rad',['../Constants_8h.html#a20e4bd0fb882dfa45051031d5e2ce922',1,'Constants.h']]] +]; diff --git a/Doxygen/build/search/defines_1.html b/Doxygen/build/search/defines_1.html new file mode 100644 index 0000000..e0d0b6d --- /dev/null +++ b/Doxygen/build/search/defines_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/defines_1.js b/Doxygen/build/search/defines_1.js new file mode 100644 index 0000000..20e866d --- /dev/null +++ b/Doxygen/build/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['half_5fpi_293',['HALF_PI',['../Constants_8h.html#ae3ec3219e4eee3b0992bfd59c2e2bc42',1,'Constants.h']]] +]; diff --git a/Doxygen/build/search/defines_2.html b/Doxygen/build/search/defines_2.html new file mode 100644 index 0000000..707f942 --- /dev/null +++ b/Doxygen/build/search/defines_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/defines_2.js b/Doxygen/build/search/defines_2.js new file mode 100644 index 0000000..09df58b --- /dev/null +++ b/Doxygen/build/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['make_5fsure_5frng_5fis_5finitialized_294',['MAKE_SURE_RNG_IS_INITIALIZED',['../Math_8cpp.html#ac0cae806d3e9a3772f7388dd53cfc370',1,'Math.cpp']]] +]; diff --git a/Doxygen/build/search/defines_3.html b/Doxygen/build/search/defines_3.html new file mode 100644 index 0000000..f30be10 --- /dev/null +++ b/Doxygen/build/search/defines_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/defines_3.js b/Doxygen/build/search/defines_3.js new file mode 100644 index 0000000..77b863e --- /dev/null +++ b/Doxygen/build/search/defines_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pi_295',['PI',['../Constants_8h.html#a598a3330b3c21701223ee0ca14316eca',1,'Constants.h']]] +]; diff --git a/Doxygen/build/search/defines_4.html b/Doxygen/build/search/defines_4.html new file mode 100644 index 0000000..046ad4a --- /dev/null +++ b/Doxygen/build/search/defines_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/defines_4.js b/Doxygen/build/search/defines_4.js new file mode 100644 index 0000000..aa71a8e --- /dev/null +++ b/Doxygen/build/search/defines_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rad2deg_296',['Rad2Deg',['../Constants_8h.html#a0272b2f5a4ca917a60dad22a3cbc6faf',1,'Constants.h']]] +]; diff --git a/Doxygen/build/search/files_0.html b/Doxygen/build/search/files_0.html new file mode 100644 index 0000000..737608e --- /dev/null +++ b/Doxygen/build/search/files_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/files_0.js b/Doxygen/build/search/files_0.js new file mode 100644 index 0000000..369635b --- /dev/null +++ b/Doxygen/build/search/files_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['collider_2ecpp_158',['Collider.cpp',['../Collider_8cpp.html',1,'']]], + ['collider_2eh_159',['Collider.h',['../Collider_8h.html',1,'']]], + ['constants_2eh_160',['Constants.h',['../Constants_8h.html',1,'']]] +]; diff --git a/Doxygen/build/search/files_1.html b/Doxygen/build/search/files_1.html new file mode 100644 index 0000000..f27a62d --- /dev/null +++ b/Doxygen/build/search/files_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/files_1.js b/Doxygen/build/search/files_1.js new file mode 100644 index 0000000..fc24fa7 --- /dev/null +++ b/Doxygen/build/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eule_2evcxproj_2efilelistabsolute_2etxt_161',['Eule.vcxproj.FileListAbsolute.txt',['../Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)'],['../x64_2Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)'],['../x64_2Release_2Eule_8vcxproj_8FileListAbsolute_8txt.html',1,'(Global Namespace)']]] +]; diff --git a/Doxygen/build/search/files_2.html b/Doxygen/build/search/files_2.html new file mode 100644 index 0000000..a45066e --- /dev/null +++ b/Doxygen/build/search/files_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/files_2.js b/Doxygen/build/search/files_2.js new file mode 100644 index 0000000..c7c9c91 --- /dev/null +++ b/Doxygen/build/search/files_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['math_2ecpp_162',['Math.cpp',['../Math_8cpp.html',1,'']]], + ['math_2eh_163',['Math.h',['../Math_8h.html',1,'']]], + ['matrix4x4_2ecpp_164',['Matrix4x4.cpp',['../Matrix4x4_8cpp.html',1,'']]], + ['matrix4x4_2eh_165',['Matrix4x4.h',['../Matrix4x4_8h.html',1,'']]] +]; diff --git a/Doxygen/build/search/files_3.html b/Doxygen/build/search/files_3.html new file mode 100644 index 0000000..1076bc5 --- /dev/null +++ b/Doxygen/build/search/files_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/files_3.js b/Doxygen/build/search/files_3.js new file mode 100644 index 0000000..1ef05d5 --- /dev/null +++ b/Doxygen/build/search/files_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['quaternion_2ecpp_166',['Quaternion.cpp',['../Quaternion_8cpp.html',1,'']]], + ['quaternion_2eh_167',['Quaternion.h',['../Quaternion_8h.html',1,'']]] +]; diff --git a/Doxygen/build/search/files_4.html b/Doxygen/build/search/files_4.html new file mode 100644 index 0000000..e5cd7f4 --- /dev/null +++ b/Doxygen/build/search/files_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/files_4.js b/Doxygen/build/search/files_4.js new file mode 100644 index 0000000..f38b0aa --- /dev/null +++ b/Doxygen/build/search/files_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rect_2eh_168',['Rect.h',['../Rect_8h.html',1,'']]] +]; diff --git a/Doxygen/build/search/files_5.html b/Doxygen/build/search/files_5.html new file mode 100644 index 0000000..2cc480f --- /dev/null +++ b/Doxygen/build/search/files_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/files_5.js b/Doxygen/build/search/files_5.js new file mode 100644 index 0000000..c71f4f2 --- /dev/null +++ b/Doxygen/build/search/files_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['trapazoidalprismcollider_2ecpp_169',['TrapazoidalPrismCollider.cpp',['../TrapazoidalPrismCollider_8cpp.html',1,'']]], + ['trapazoidalprismcollider_2eh_170',['TrapazoidalPrismCollider.h',['../TrapazoidalPrismCollider_8h.html',1,'']]] +]; diff --git a/Doxygen/build/search/files_6.html b/Doxygen/build/search/files_6.html new file mode 100644 index 0000000..6510245 --- /dev/null +++ b/Doxygen/build/search/files_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/files_6.js b/Doxygen/build/search/files_6.js new file mode 100644 index 0000000..ad92c82 --- /dev/null +++ b/Doxygen/build/search/files_6.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vector2_2ecpp_171',['Vector2.cpp',['../Vector2_8cpp.html',1,'']]], + ['vector2_2eh_172',['Vector2.h',['../Vector2_8h.html',1,'']]], + ['vector3_2ecpp_173',['Vector3.cpp',['../Vector3_8cpp.html',1,'']]], + ['vector3_2eh_174',['Vector3.h',['../Vector3_8h.html',1,'']]], + ['vector4_2ecpp_175',['Vector4.cpp',['../Vector4_8cpp.html',1,'']]], + ['vector4_2eh_176',['Vector4.h',['../Vector4_8h.html',1,'']]] +]; diff --git a/Doxygen/build/search/functions_0.html b/Doxygen/build/search/functions_0.html new file mode 100644 index 0000000..e17c711 --- /dev/null +++ b/Doxygen/build/search/functions_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_0.js b/Doxygen/build/search/functions_0.js new file mode 100644 index 0000000..2947536 --- /dev/null +++ b/Doxygen/build/search/functions_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['abs_177',['Abs',['../classEule_1_1Math.html#ab9ccf4aa730ef825faf224445c86ab25',1,'Eule::Math']]], + ['adjoint_178',['Adjoint',['../classEule_1_1Matrix4x4.html#a1c664d93fbd68ec9f8c762263fc45a97',1,'Eule::Matrix4x4']]], + ['anglebetween_179',['AngleBetween',['../classEule_1_1Quaternion.html#a2c7d0c3521f0e6127ca4b5d5bdbf8329',1,'Eule::Quaternion']]] +]; diff --git a/Doxygen/build/search/functions_1.html b/Doxygen/build/search/functions_1.html new file mode 100644 index 0000000..0ddac0a --- /dev/null +++ b/Doxygen/build/search/functions_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_1.js b/Doxygen/build/search/functions_1.js new file mode 100644 index 0000000..1f674a9 --- /dev/null +++ b/Doxygen/build/search/functions_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['clamp_180',['Clamp',['../classEule_1_1Math.html#a73947ee95912f0a06359fc5004bfc840',1,'Eule::Math']]], + ['conjugate_181',['Conjugate',['../classEule_1_1Quaternion.html#aa5333ab28dbe4d5ae15ab5dbc36b90ca',1,'Eule::Quaternion']]], + ['contains_182',['Contains',['../classEule_1_1Collider.html#a19a1220bf41df1d8c720296bfe91f5fb',1,'Eule::Collider::Contains()'],['../classEule_1_1TrapazoidalPrismCollider.html#abc4865f44bef057bbbb39385eae9e2dc',1,'Eule::TrapazoidalPrismCollider::Contains()']]], + ['crossproduct_183',['CrossProduct',['../classEule_1_1Vector2.html#a308df926fccbf4a5321a821d92924dfb',1,'Eule::Vector2::CrossProduct()'],['../classEule_1_1Vector3.html#abd62a5f6b0f380491cf80d70ed2e5317',1,'Eule::Vector3::CrossProduct()']]] +]; diff --git a/Doxygen/build/search/functions_2.html b/Doxygen/build/search/functions_2.html new file mode 100644 index 0000000..2737c5a --- /dev/null +++ b/Doxygen/build/search/functions_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_2.js b/Doxygen/build/search/functions_2.js new file mode 100644 index 0000000..4abfaf5 --- /dev/null +++ b/Doxygen/build/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['determinant_184',['Determinant',['../classEule_1_1Matrix4x4.html#a8a7c7d927d012aaa3abbbc210444b4c0',1,'Eule::Matrix4x4']]], + ['dotproduct_185',['DotProduct',['../classEule_1_1Vector2.html#a5ed3a9b01d550a9b745b885fdb03d68c',1,'Eule::Vector2::DotProduct()'],['../classEule_1_1Vector3.html#a6cbc1516e045c0334f8bf8a1dcd6ca91',1,'Eule::Vector3::DotProduct()']]], + ['droptranslationcomponents_186',['DropTranslationComponents',['../classEule_1_1Matrix4x4.html#a42eaf01fbe7f1f57d6fb5bf7111d3338',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/functions_3.html b/Doxygen/build/search/functions_3.html new file mode 100644 index 0000000..6da86e7 --- /dev/null +++ b/Doxygen/build/search/functions_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_3.js b/Doxygen/build/search/functions_3.js new file mode 100644 index 0000000..179f58c --- /dev/null +++ b/Doxygen/build/search/functions_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getcofactors_187',['GetCofactors',['../classEule_1_1Matrix4x4.html#aefc37ab31604f888e393a1de62927d55',1,'Eule::Matrix4x4']]], + ['getrawvalues_188',['GetRawValues',['../classEule_1_1Quaternion.html#aaa193aa23729338a64bbd16eacab56ec',1,'Eule::Quaternion']]], + ['gettranslationcomponent_189',['GetTranslationComponent',['../classEule_1_1Matrix4x4.html#a19cc83344e288c09f7200d8410277b28',1,'Eule::Matrix4x4']]], + ['getvertex_190',['GetVertex',['../classEule_1_1TrapazoidalPrismCollider.html#a4b49f6749d39571121621dd45b32bac3',1,'Eule::TrapazoidalPrismCollider']]] +]; diff --git a/Doxygen/build/search/functions_4.html b/Doxygen/build/search/functions_4.html new file mode 100644 index 0000000..911304e --- /dev/null +++ b/Doxygen/build/search/functions_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_4.js b/Doxygen/build/search/functions_4.js new file mode 100644 index 0000000..aa26f79 --- /dev/null +++ b/Doxygen/build/search/functions_4.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['inverse_191',['Inverse',['../classEule_1_1Quaternion.html#a704d63f0f2cd2d50fd61562e3c2eb576',1,'Eule::Quaternion']]], + ['inverse3x3_192',['Inverse3x3',['../classEule_1_1Matrix4x4.html#acfd6d8677484cb6ed246efe5c39b9119',1,'Eule::Matrix4x4']]], + ['inverse4x4_193',['Inverse4x4',['../classEule_1_1Matrix4x4.html#ab635c2bbd0d91ad35369efd4dc5dac29',1,'Eule::Matrix4x4']]], + ['isinversible3x3_194',['IsInversible3x3',['../classEule_1_1Matrix4x4.html#ab52b7e10a4e7ecbdb347fd82eb9ecd22',1,'Eule::Matrix4x4']]], + ['isinversible4x4_195',['IsInversible4x4',['../classEule_1_1Matrix4x4.html#a24a2113d49c0a86c48755b8ad11e22c0',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/functions_5.html b/Doxygen/build/search/functions_5.html new file mode 100644 index 0000000..61b920d --- /dev/null +++ b/Doxygen/build/search/functions_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_5.js b/Doxygen/build/search/functions_5.js new file mode 100644 index 0000000..46c4011 --- /dev/null +++ b/Doxygen/build/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['lerp_196',['Lerp',['../classEule_1_1Math.html#a991f62401991014de20aca0fda9f9ef7',1,'Eule::Math::Lerp()'],['../classEule_1_1Quaternion.html#a2c386181050f7745341a00f79e496e08',1,'Eule::Quaternion::Lerp()'],['../classEule_1_1Vector2.html#a8bb45fd8415f24c58a59739d67f86038',1,'Eule::Vector2::Lerp()'],['../classEule_1_1Vector3.html#add2f96155edb1159b53725932d951f1f',1,'Eule::Vector3::Lerp()'],['../classEule_1_1Vector4.html#ae5b7ed7132d76ffbde20f24330fd4f69',1,'Eule::Vector4::Lerp()']]], + ['lerpself_197',['LerpSelf',['../classEule_1_1Vector2.html#a85ad9f5dca4f60c679be5edd86942774',1,'Eule::Vector2::LerpSelf()'],['../classEule_1_1Vector3.html#a8fb48e9a527d5e6fadb3b3102fa8f4c3',1,'Eule::Vector3::LerpSelf()'],['../classEule_1_1Vector4.html#ab4efb629829cfebcbb82b4318c3e3bb3',1,'Eule::Vector4::LerpSelf()']]] +]; diff --git a/Doxygen/build/search/functions_6.html b/Doxygen/build/search/functions_6.html new file mode 100644 index 0000000..dc70a4a --- /dev/null +++ b/Doxygen/build/search/functions_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_6.js b/Doxygen/build/search/functions_6.js new file mode 100644 index 0000000..e996ea7 --- /dev/null +++ b/Doxygen/build/search/functions_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['magnitude_198',['Magnitude',['../classEule_1_1Vector2.html#a85551e0734a2f3143c4ecdbaf4a3ea46',1,'Eule::Vector2::Magnitude()'],['../classEule_1_1Vector3.html#a96e6e436600d1420250ef2868854988d',1,'Eule::Vector3::Magnitude()'],['../classEule_1_1Vector4.html#a35c6fccb7a02095b595575903b590dd2',1,'Eule::Vector4::Magnitude()']]], + ['matrix4x4_199',['Matrix4x4',['../classEule_1_1Matrix4x4.html#a714a467ba7f85f88ebe3897b5e3580be',1,'Eule::Matrix4x4::Matrix4x4()'],['../classEule_1_1Matrix4x4.html#a4a71d8fc881ddb7d51577e0a762ac186',1,'Eule::Matrix4x4::Matrix4x4(const Matrix4x4 &other)'],['../classEule_1_1Matrix4x4.html#a44f2af9bfad01c2d065985c1dfda8d08',1,'Eule::Matrix4x4::Matrix4x4(Matrix4x4 &&other) noexcept']]], + ['max_200',['Max',['../classEule_1_1Math.html#a991c620839f5fa9fcfe7e503b8ab0008',1,'Eule::Math']]], + ['min_201',['Min',['../classEule_1_1Math.html#aa4d3c52cb09984ec567a9961ff7e3f02',1,'Eule::Math']]], + ['multiply4x4_202',['Multiply4x4',['../classEule_1_1Matrix4x4.html#ae364e54822b558526dd3404953d48090',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/functions_7.html b/Doxygen/build/search/functions_7.html new file mode 100644 index 0000000..7de3106 --- /dev/null +++ b/Doxygen/build/search/functions_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_7.js b/Doxygen/build/search/functions_7.js new file mode 100644 index 0000000..d26dd32 --- /dev/null +++ b/Doxygen/build/search/functions_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['normalize_203',['Normalize',['../classEule_1_1Vector2.html#a0f8de10acb284e2d6fcda8ba6efb3a15',1,'Eule::Vector2::Normalize()'],['../classEule_1_1Vector3.html#a4650f19df9b05d941d0fbc29ba59d980',1,'Eule::Vector3::Normalize()'],['../classEule_1_1Vector4.html#a3d10b51b1fe97661650b2991b29b67a7',1,'Eule::Vector4::Normalize()']]], + ['normalizeself_204',['NormalizeSelf',['../classEule_1_1Vector2.html#a9b15bbe640e8b40a743de72652b74591',1,'Eule::Vector2::NormalizeSelf()'],['../classEule_1_1Vector3.html#a69f80925d46f3630a2242b44ddb43a56',1,'Eule::Vector3::NormalizeSelf()'],['../classEule_1_1Vector4.html#a98bea58a58b04357044f72afc905896d',1,'Eule::Vector4::NormalizeSelf()']]] +]; diff --git a/Doxygen/build/search/functions_8.html b/Doxygen/build/search/functions_8.html new file mode 100644 index 0000000..7422be2 --- /dev/null +++ b/Doxygen/build/search/functions_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_8.js b/Doxygen/build/search/functions_8.js new file mode 100644 index 0000000..d02099a --- /dev/null +++ b/Doxygen/build/search/functions_8.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['operator_20vector2_3c_20t_20_3e_205',['operator Vector2< T >',['../classEule_1_1Vector3.html#a0bdcd7104775000964029ef94e8a3b6a',1,'Eule::Vector3::operator Vector2< T >()'],['../classEule_1_1Vector4.html#aa1384f5e84216dc264074b716efd37a0',1,'Eule::Vector4::operator Vector2< T >()']]], + ['operator_20vector3_3c_20t_20_3e_206',['operator Vector3< T >',['../classEule_1_1Vector2.html#a3623d54a21bd36d25916218d7ee6eef0',1,'Eule::Vector2::operator Vector3< T >()'],['../classEule_1_1Vector4.html#ab6911dc86dd0289c604167b95e18ebbc',1,'Eule::Vector4::operator Vector3< T >()']]], + ['operator_20vector4_3c_20t_20_3e_207',['operator Vector4< T >',['../classEule_1_1Vector2.html#a4adc4bcb6adab3c937c8154ddc4d9d51',1,'Eule::Vector2::operator Vector4< T >()'],['../classEule_1_1Vector3.html#a67d1daadee40fbaada3b5c3b4b4b7e79',1,'Eule::Vector3::operator Vector4< T >()']]], + ['operator_21_3d_208',['operator!=',['../classEule_1_1Matrix4x4.html#a4e78f3931e6467f50f979e35e4b39a22',1,'Eule::Matrix4x4::operator!=()'],['../classEule_1_1Quaternion.html#a1a97201d7deb56f543d65be9741cd2bd',1,'Eule::Quaternion::operator!=()'],['../classEule_1_1Vector2.html#aff40b705013d8356239b01c80b26e9a9',1,'Eule::Vector2::operator!=()'],['../classEule_1_1Vector3.html#ad71e5d9e7c46e63d226c180a2d8c0beb',1,'Eule::Vector3::operator!=()'],['../classEule_1_1Vector4.html#abc9e49133b73116830c953a4666e403c',1,'Eule::Vector4::operator!=()']]], + ['operator_2a_209',['operator*',['../classEule_1_1Matrix4x4.html#a1c687b90d224b7fac251d8539b8d1a57',1,'Eule::Matrix4x4::operator*(const Matrix4x4 &other) const'],['../classEule_1_1Matrix4x4.html#aea2039315271583e4832c8502e5d9144',1,'Eule::Matrix4x4::operator*(const double scalar) const'],['../classEule_1_1Quaternion.html#ab178e12364d87fb676d85695e491361f',1,'Eule::Quaternion::operator*(const Quaternion &q) const'],['../classEule_1_1Quaternion.html#a29aeab8de1a33ae8c043e3438829835f',1,'Eule::Quaternion::operator*(const Vector3d &p) const'],['../classEule_1_1Vector2.html#af70e271efeb2ea957532e917773e2724',1,'Eule::Vector2::operator*()'],['../classEule_1_1Vector3.html#afd6db19e66c398814f79bfd454682548',1,'Eule::Vector3::operator*(const T scale) const'],['../classEule_1_1Vector3.html#ab7148d41a5184ee4e2948cfdc5eb53f5',1,'Eule::Vector3::operator*(const Matrix4x4 &mat) const'],['../classEule_1_1Vector4.html#af397629f4fc12f8846df9bab8d6d8bbe',1,'Eule::Vector4::operator*(const T scale) const'],['../classEule_1_1Vector4.html#af19cb20ab4ccf6f39c9c8875495de565',1,'Eule::Vector4::operator*(const Matrix4x4 &mat) const']]], + ['operator_2a_3d_210',['operator*=',['../classEule_1_1Matrix4x4.html#a45fbc7927b3acf79c219da27470e0d27',1,'Eule::Matrix4x4::operator*=(const Matrix4x4 &other)'],['../classEule_1_1Matrix4x4.html#a0e8b677ef2f023df5bc46b47d4c15220',1,'Eule::Matrix4x4::operator*=(const double scalar)'],['../classEule_1_1Quaternion.html#a8941e3b43aabd15e2471e57ebd49c8a7',1,'Eule::Quaternion::operator*=()'],['../classEule_1_1Vector2.html#a14bd68884a3d6b83201f38df17ff1082',1,'Eule::Vector2::operator*=()'],['../classEule_1_1Vector3.html#a7a6e66693d2a1e5cf4dd7cca94ad49db',1,'Eule::Vector3::operator*=(const T scale)'],['../classEule_1_1Vector3.html#a2c3254704c4bf900277d2205f55f4157',1,'Eule::Vector3::operator*=(const Matrix4x4 &mat)'],['../classEule_1_1Vector4.html#a2359c0ecd8b9af425df240774d5ae950',1,'Eule::Vector4::operator*=(const T scale)'],['../classEule_1_1Vector4.html#a7b48a3504125d0017ea237825da3d126',1,'Eule::Vector4::operator*=(const Matrix4x4 &mat)']]], + ['operator_2b_211',['operator+',['../classEule_1_1Matrix4x4.html#a8e5abd340eef361f18bd8cc7166fef1b',1,'Eule::Matrix4x4::operator+()'],['../classEule_1_1Vector2.html#a2acbb7e46d9659a26afb746372ea4364',1,'Eule::Vector2::operator+()'],['../classEule_1_1Vector3.html#ae094943bacbd043b41f9b34bdb51542e',1,'Eule::Vector3::operator+()'],['../classEule_1_1Vector4.html#a0b8b7947175218917b2683d48790a40f',1,'Eule::Vector4::operator+()']]], + ['operator_2b_3d_212',['operator+=',['../classEule_1_1Matrix4x4.html#a89e9d610c16c97178a62b697d04fd873',1,'Eule::Matrix4x4::operator+=()'],['../classEule_1_1Vector2.html#a8b1eb48922a38c4237ea26b11ce43fd2',1,'Eule::Vector2::operator+=()'],['../classEule_1_1Vector3.html#ac6fe920a34552925aff185f335b13e14',1,'Eule::Vector3::operator+=()'],['../classEule_1_1Vector4.html#a54a9edbe72049b85f03827d488363d0a',1,'Eule::Vector4::operator+=()']]], + ['operator_2d_213',['operator-',['../classEule_1_1Matrix4x4.html#a4d4f16882462f4afc18debc6594019a1',1,'Eule::Matrix4x4::operator-()'],['../classEule_1_1Vector2.html#a52060a0688502456b4bb3e443c36c25d',1,'Eule::Vector2::operator-(const Vector2< T > &other) const'],['../classEule_1_1Vector2.html#a352b4e84721183ef182324d350df64df',1,'Eule::Vector2::operator-() const'],['../classEule_1_1Vector3.html#a88273031482c057795e05ea25218ea4b',1,'Eule::Vector3::operator-(const Vector3< T > &other) const'],['../classEule_1_1Vector3.html#a11f2449516a8787f4cce227f12ae2f03',1,'Eule::Vector3::operator-() const'],['../classEule_1_1Vector4.html#a6e68957131d6d87c69dce71ff88097f3',1,'Eule::Vector4::operator-(const Vector4< T > &other) const'],['../classEule_1_1Vector4.html#a36426b12cdcdbfaa6daa35c9d3d4e9c4',1,'Eule::Vector4::operator-() const']]], + ['operator_2d_3d_214',['operator-=',['../classEule_1_1Matrix4x4.html#aca08ad35ac143742eb2aa22892d30e46',1,'Eule::Matrix4x4::operator-=()'],['../classEule_1_1Vector2.html#a76103604080c7d718b634f9394143bfd',1,'Eule::Vector2::operator-=()'],['../classEule_1_1Vector3.html#af1207f3bf66aaf0fa781d43db40b8006',1,'Eule::Vector3::operator-=()'],['../classEule_1_1Vector4.html#aec85460804d89ed9206cc478b2f3c8ba',1,'Eule::Vector4::operator-=()']]], + ['operator_2f_215',['operator/',['../classEule_1_1Matrix4x4.html#acbc9bcf9b58d98372b8f754b2661dc04',1,'Eule::Matrix4x4::operator/(const Matrix4x4 &other) const'],['../classEule_1_1Matrix4x4.html#acca753b1befa72d893ccb73a2390a259',1,'Eule::Matrix4x4::operator/(const double denominator) const'],['../classEule_1_1Quaternion.html#a23488d14e31db8cec75a0e8c6f38c70a',1,'Eule::Quaternion::operator/()'],['../classEule_1_1Vector2.html#adcecda237ca7909bc8de0f8e4a1b586d',1,'Eule::Vector2::operator/()'],['../classEule_1_1Vector3.html#aa9bace50e1db42029d93fbd8a417fc70',1,'Eule::Vector3::operator/()'],['../classEule_1_1Vector4.html#ac952c5322209dffd5ea7bb4a9b06c52d',1,'Eule::Vector4::operator/()']]], + ['operator_2f_3d_216',['operator/=',['../classEule_1_1Matrix4x4.html#a25369a9c56f20e205e827dab8be78b21',1,'Eule::Matrix4x4::operator/=(const Matrix4x4 &other)'],['../classEule_1_1Matrix4x4.html#a7335fdcec31085ff17b4eda00bf0e3eb',1,'Eule::Matrix4x4::operator/=(const double denominator)'],['../classEule_1_1Quaternion.html#aa071c90a64d21cbb8109366bf2449838',1,'Eule::Quaternion::operator/=()'],['../classEule_1_1Vector2.html#a1a4503a880f870a1f225fe635e7482bb',1,'Eule::Vector2::operator/=()'],['../classEule_1_1Vector3.html#a69f00f05eda60630d48499067297e431',1,'Eule::Vector3::operator/=()'],['../classEule_1_1Vector4.html#a35680f0675813c93e1c2cd3607c1ea2e',1,'Eule::Vector4::operator/=()']]], + ['operator_3c_3c_217',['operator<<',['../namespaceEule.html#aa7ebcddcafa056556a6e17dcc968e7dd',1,'Eule::operator<<(std::ostream &os, const Matrix4x4 &m)'],['../namespaceEule.html#ae2fd3ed809d4c950926560fd9b3f2886',1,'Eule::operator<<(std::wostream &os, const Matrix4x4 &m)'],['../namespaceEule.html#a632355bad553c40d9fd297c260c1d44b',1,'Eule::operator<<(std::ostream &os, const Quaternion &q)'],['../namespaceEule.html#a5d5c597b5ae3b3143015316a4a60eacc',1,'Eule::operator<<(std::wostream &os, const Quaternion &q)']]], + ['operator_3d_218',['operator=',['../classEule_1_1Matrix4x4.html#a26938f026d8d438f72b1d5fd4a28f61c',1,'Eule::Matrix4x4::operator=(const Matrix4x4 &other)'],['../classEule_1_1Matrix4x4.html#a3e2dab83b760ff7da038f14b977d7642',1,'Eule::Matrix4x4::operator=(Matrix4x4 &&other) noexcept'],['../classEule_1_1Quaternion.html#a9cf7fd3318ffdd50e6567c84d24c20e9',1,'Eule::Quaternion::operator=()'],['../classEule_1_1TrapazoidalPrismCollider.html#a1dd50a1f4139a78d9c1c9d6f62a429bd',1,'Eule::TrapazoidalPrismCollider::operator=(const TrapazoidalPrismCollider &other)'],['../classEule_1_1TrapazoidalPrismCollider.html#a7ca93565db388a08ed955a42c8fb99d8',1,'Eule::TrapazoidalPrismCollider::operator=(TrapazoidalPrismCollider &&other) noexcept'],['../classEule_1_1Vector2.html#afc79cf4d93bd0e6feec0fe64fa10d3cf',1,'Eule::Vector2::operator=(const Vector2< T > &other)'],['../classEule_1_1Vector2.html#a6642aa42c0446aecd59f67244ddad873',1,'Eule::Vector2::operator=(Vector2< T > &&other) noexcept'],['../classEule_1_1Vector3.html#a9e725f7a3bf0fb822acf9418dc950ad5',1,'Eule::Vector3::operator=(const Vector3< T > &other)'],['../classEule_1_1Vector3.html#a68cd4f7804a47455d5a5af9cc6b66e38',1,'Eule::Vector3::operator=(Vector3< T > &&other) noexcept'],['../classEule_1_1Vector4.html#a7dc41444f6e3fd30a9cc256ed8414ee6',1,'Eule::Vector4::operator=(const Vector4< T > &other)'],['../classEule_1_1Vector4.html#a331a780b59a0e15e887f11a6fe396934',1,'Eule::Vector4::operator=(Vector4< T > &&other) noexcept']]], + ['operator_3d_3d_219',['operator==',['../classEule_1_1Matrix4x4.html#a37f9e809552b58472f4e20fbeabffdca',1,'Eule::Matrix4x4::operator==()'],['../classEule_1_1Quaternion.html#a516d4dcc7c6f13d8846070b72f588210',1,'Eule::Quaternion::operator==()'],['../classEule_1_1Vector2.html#a3f73897ee668229ea1513f1e2482b296',1,'Eule::Vector2::operator==()'],['../classEule_1_1Vector3.html#a8619be9756e498c50158c5dac275262e',1,'Eule::Vector3::operator==()'],['../classEule_1_1Vector4.html#ae2af40b477e41f8a42db7f80a832a1e7',1,'Eule::Vector4::operator==()']]], + ['operator_5b_5d_220',['operator[]',['../classEule_1_1Matrix4x4.html#a17702fbf3399b86eb883486208895272',1,'Eule::Matrix4x4::operator[](std::size_t y)'],['../classEule_1_1Matrix4x4.html#a1fc5eb915560132c9d908a9c9eacc510',1,'Eule::Matrix4x4::operator[](std::size_t y) const'],['../classEule_1_1Vector2.html#acbfb002c7f506358e1c9648ad0a79734',1,'Eule::Vector2::operator[](std::size_t idx)'],['../classEule_1_1Vector2.html#ac5e06e8ff35709b2a0dda3d932f0d025',1,'Eule::Vector2::operator[](std::size_t idx) const'],['../classEule_1_1Vector3.html#a71f307ae6427a4d6df51647c9d76504b',1,'Eule::Vector3::operator[](std::size_t idx)'],['../classEule_1_1Vector3.html#a4c028a7bab65693aff5d1a7c992326dc',1,'Eule::Vector3::operator[](std::size_t idx) const'],['../classEule_1_1Vector4.html#ae64012cf90d0ad436066232a741b27d5',1,'Eule::Vector4::operator[](std::size_t idx)'],['../classEule_1_1Vector4.html#a603808150eb90008831ba3050bb38a37',1,'Eule::Vector4::operator[](std::size_t idx) const']]], + ['oscillate_221',['Oscillate',['../classEule_1_1Math.html#a1b0fb72c51751470f7f819b20a5b3b3f',1,'Eule::Math']]] +]; diff --git a/Doxygen/build/search/functions_9.html b/Doxygen/build/search/functions_9.html new file mode 100644 index 0000000..befd4fa --- /dev/null +++ b/Doxygen/build/search/functions_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_9.js b/Doxygen/build/search/functions_9.js new file mode 100644 index 0000000..136a0e9 --- /dev/null +++ b/Doxygen/build/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['quaternion_222',['Quaternion',['../classEule_1_1Quaternion.html#abcc01358aada56ea5f0db4da18aaf77d',1,'Eule::Quaternion::Quaternion()'],['../classEule_1_1Quaternion.html#a2dc0ed0c7773600cf443151573287e4a',1,'Eule::Quaternion::Quaternion(const Vector4d values)'],['../classEule_1_1Quaternion.html#ab3b8862f9fd86c7ebb426b4940d08b39',1,'Eule::Quaternion::Quaternion(const Quaternion &q)'],['../classEule_1_1Quaternion.html#a1e4c6f8984bb7a9ae1ffed45adffe02f',1,'Eule::Quaternion::Quaternion(const Vector3d eulerAngles)']]] +]; diff --git a/Doxygen/build/search/functions_a.html b/Doxygen/build/search/functions_a.html new file mode 100644 index 0000000..a81e963 --- /dev/null +++ b/Doxygen/build/search/functions_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_a.js b/Doxygen/build/search/functions_a.js new file mode 100644 index 0000000..649e094 --- /dev/null +++ b/Doxygen/build/search/functions_a.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['random_223',['Random',['../classEule_1_1Math.html#a6aa6d6c804f995a089779219e5136e4f',1,'Eule::Math']]], + ['randomchance_224',['RandomChance',['../classEule_1_1Math.html#a60bffec38a861b7701fc90bd6f1a11d6',1,'Eule::Math']]], + ['randomint_225',['RandomInt',['../classEule_1_1Math.html#ab8d66e39e794d89594c50690ccc92c60',1,'Eule::Math']]], + ['randomintrange_226',['RandomIntRange',['../classEule_1_1Math.html#adfc55be8cb68aba351374f045f29a2ad',1,'Eule::Math']]], + ['randomrange_227',['RandomRange',['../classEule_1_1Math.html#a48ca8451f9803ce35d2a35cfb83d8ae9',1,'Eule::Math']]], + ['randomuint_228',['RandomUint',['../classEule_1_1Math.html#ad38d9a50e08cd02bb35161cc3bd77b26',1,'Eule::Math']]], + ['rotatevector_229',['RotateVector',['../classEule_1_1Quaternion.html#aaeb89218e886e605c6e2a87c9cb773a4',1,'Eule::Quaternion']]] +]; diff --git a/Doxygen/build/search/functions_b.html b/Doxygen/build/search/functions_b.html new file mode 100644 index 0000000..345265d --- /dev/null +++ b/Doxygen/build/search/functions_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_b.js b/Doxygen/build/search/functions_b.js new file mode 100644 index 0000000..efaa49f --- /dev/null +++ b/Doxygen/build/search/functions_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['setrawvalues_230',['SetRawValues',['../classEule_1_1Quaternion.html#a7046064a89615e16760f17f41b60a31d',1,'Eule::Quaternion']]], + ['settranslationcomponent_231',['SetTranslationComponent',['../classEule_1_1Matrix4x4.html#a6e4fd75a1f47f42f922ef4355d448411',1,'Eule::Matrix4x4']]], + ['setvertex_232',['SetVertex',['../classEule_1_1TrapazoidalPrismCollider.html#a5acc127ec848dceead5ad017f36696aa',1,'Eule::TrapazoidalPrismCollider']]], + ['similar_233',['Similar',['../classEule_1_1Math.html#ac928b1e9cde5ac60f5fdc1ba466305ff',1,'Eule::Math::Similar()'],['../classEule_1_1Matrix4x4.html#ab8340e0e909a6cbb1a32439f2ca2c092',1,'Eule::Matrix4x4::Similar()'],['../classEule_1_1Vector2.html#a69fc37a6e885b64426d5846be33c7366',1,'Eule::Vector2::Similar()'],['../classEule_1_1Vector3.html#a9613bb7d4981c921b8310d5eedf59b07',1,'Eule::Vector3::Similar()'],['../classEule_1_1Vector4.html#af49ea98d369420a07158d705eab60479',1,'Eule::Vector4::Similar()']]], + ['sqrmagnitude_234',['SqrMagnitude',['../classEule_1_1Vector2.html#ad8c2b3e86fc91a641a0817047a63170f',1,'Eule::Vector2::SqrMagnitude()'],['../classEule_1_1Vector3.html#ad2f078dd733634a321157d23979a4162',1,'Eule::Vector3::SqrMagnitude()'],['../classEule_1_1Vector4.html#a2cd0433c99303b8934993b2fd2aa1c6e',1,'Eule::Vector4::SqrMagnitude()']]] +]; diff --git a/Doxygen/build/search/functions_c.html b/Doxygen/build/search/functions_c.html new file mode 100644 index 0000000..858bfd6 --- /dev/null +++ b/Doxygen/build/search/functions_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_c.js b/Doxygen/build/search/functions_c.js new file mode 100644 index 0000000..958b328 --- /dev/null +++ b/Doxygen/build/search/functions_c.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['todouble_235',['ToDouble',['../classEule_1_1Vector2.html#a2f7e2f5eb22ab04166cbaa0aca6dfb20',1,'Eule::Vector2::ToDouble()'],['../classEule_1_1Vector3.html#a04560b5fa992b7fa455fc4d406928df8',1,'Eule::Vector3::ToDouble()'],['../classEule_1_1Vector4.html#a267ad7bfad5ea8f6f8c001cee817c54e',1,'Eule::Vector4::ToDouble()']]], + ['toeulerangles_236',['ToEulerAngles',['../classEule_1_1Quaternion.html#a5a6349cb3e0a0c73df527e9ba907b0da',1,'Eule::Quaternion']]], + ['toint_237',['ToInt',['../classEule_1_1Vector2.html#a078a567a49b6d02fb8dce79885b4c2e9',1,'Eule::Vector2::ToInt()'],['../classEule_1_1Vector3.html#a0510707e23eb81c4a799dffc7b0ce127',1,'Eule::Vector3::ToInt()'],['../classEule_1_1Vector4.html#a53244995fd4f19de4e740b47aec029a3',1,'Eule::Vector4::ToInt()']]], + ['torotationmatrix_238',['ToRotationMatrix',['../classEule_1_1Quaternion.html#aedb36036ee6a39fb97c5d2ba12b5d986',1,'Eule::Quaternion']]], + ['transpose3x3_239',['Transpose3x3',['../classEule_1_1Matrix4x4.html#a410b88abff7991d9faa3f818efd6807d',1,'Eule::Matrix4x4']]], + ['transpose4x4_240',['Transpose4x4',['../classEule_1_1Matrix4x4.html#af454812ef8205562e14ee094ce7172b1',1,'Eule::Matrix4x4']]], + ['trapazoidalprismcollider_241',['TrapazoidalPrismCollider',['../classEule_1_1TrapazoidalPrismCollider.html#a787c22d1c84b74dd078a2d3d6d76ee34',1,'Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider()'],['../classEule_1_1TrapazoidalPrismCollider.html#acc761aadc1b6421db75eea36d5d722d1',1,'Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider(const TrapazoidalPrismCollider &other)=default'],['../classEule_1_1TrapazoidalPrismCollider.html#aad0faabb1b27478320da6d2fa44f034b',1,'Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider(TrapazoidalPrismCollider &&other) noexcept=default']]] +]; diff --git a/Doxygen/build/search/functions_d.html b/Doxygen/build/search/functions_d.html new file mode 100644 index 0000000..2f09f51 --- /dev/null +++ b/Doxygen/build/search/functions_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_d.js b/Doxygen/build/search/functions_d.js new file mode 100644 index 0000000..a231cfb --- /dev/null +++ b/Doxygen/build/search/functions_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unitquaternion_242',['UnitQuaternion',['../classEule_1_1Quaternion.html#affb1a8ac42e356ee5efb304ca8df38ca',1,'Eule::Quaternion']]] +]; diff --git a/Doxygen/build/search/functions_e.html b/Doxygen/build/search/functions_e.html new file mode 100644 index 0000000..ee5afa6 --- /dev/null +++ b/Doxygen/build/search/functions_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_e.js b/Doxygen/build/search/functions_e.js new file mode 100644 index 0000000..ab00ed8 --- /dev/null +++ b/Doxygen/build/search/functions_e.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['vector2_243',['Vector2',['../classEule_1_1Vector2.html#a99b4d19728ca8577413ccba9cecc5948',1,'Eule::Vector2::Vector2()'],['../classEule_1_1Vector2.html#ad106a7fa36501663af6959f17b317c9f',1,'Eule::Vector2::Vector2(T _x, T _y)'],['../classEule_1_1Vector2.html#af5b98f03dae0721f155eee4ef2babc8d',1,'Eule::Vector2::Vector2(const Vector2< T > &other)=default'],['../classEule_1_1Vector2.html#a3a37db279577d277c890abe282951cb4',1,'Eule::Vector2::Vector2(Vector2< T > &&other) noexcept=default']]], + ['vector3_244',['Vector3',['../classEule_1_1Vector3.html#abba435897a7050d8c111d703c5bb3eb8',1,'Eule::Vector3::Vector3()'],['../classEule_1_1Vector3.html#ab43c649b5f80f80660ce83a28697f1e9',1,'Eule::Vector3::Vector3(T _x, T _y, T _z)'],['../classEule_1_1Vector3.html#ac485bad4d2a077e0ab2a2bc68e223740',1,'Eule::Vector3::Vector3(const Vector3< T > &other)=default'],['../classEule_1_1Vector3.html#a9c6dc41aad5e44f30baad3c3864148b8',1,'Eule::Vector3::Vector3(Vector3< T > &&other) noexcept=default']]], + ['vector4_245',['Vector4',['../classEule_1_1Vector4.html#ad49c5d39b5478aefea2acfe65bd59393',1,'Eule::Vector4::Vector4()'],['../classEule_1_1Vector4.html#aaa8aa9abea8ad8dde3aaa2de27ac2391',1,'Eule::Vector4::Vector4(T _x, T _y, T _z, T _w)'],['../classEule_1_1Vector4.html#aa47cf18eb55ec51c7dd0a95794d7230d',1,'Eule::Vector4::Vector4(const Vector4< T > &other)=default'],['../classEule_1_1Vector4.html#a9c9e20e38663621063f2437965fac438',1,'Eule::Vector4::Vector4(Vector4< T > &&other) noexcept=default']]], + ['vectorscale_246',['VectorScale',['../classEule_1_1Vector2.html#a5c7eb6afd348c8409f856d398593713e',1,'Eule::Vector2::VectorScale()'],['../classEule_1_1Vector3.html#afbfdd011a51ae697bdf0d297f2f6aa95',1,'Eule::Vector3::VectorScale()'],['../classEule_1_1Vector4.html#ae24537cb41abb4365a22fe3b07869b85',1,'Eule::Vector4::VectorScale()']]] +]; diff --git a/Doxygen/build/search/functions_f.html b/Doxygen/build/search/functions_f.html new file mode 100644 index 0000000..f17c412 --- /dev/null +++ b/Doxygen/build/search/functions_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/functions_f.js b/Doxygen/build/search/functions_f.js new file mode 100644 index 0000000..9ba0195 --- /dev/null +++ b/Doxygen/build/search/functions_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7equaternion_247',['~Quaternion',['../classEule_1_1Quaternion.html#a5f834c2ca469cd71edc8a23fdc3f56e8',1,'Eule::Quaternion']]] +]; diff --git a/Doxygen/build/search/mag_sel.png b/Doxygen/build/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..39c0ed52a25dd9d080ee0d42ae6c6042bdfa04d7 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB$N=!mC_V~EE2vzPXI9ZnEo zd+1zHor@dYLod2Y{ z@R$7$Z!PXTbY$|@#T!bMzm?`b<(R`cbw(gxJHzu zB$lLFB^RXvDF!10LknF)BV7aY5JN*NBMU1-b8Q0yD+2>vd*|CI8glbfGSez?Ylunu RoetE%;OXk;vd$@?2>>CYplSdB literal 0 HcmV?d00001 diff --git a/Doxygen/build/search/namespaces_0.html b/Doxygen/build/search/namespaces_0.html new file mode 100644 index 0000000..76996d1 --- /dev/null +++ b/Doxygen/build/search/namespaces_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/namespaces_0.js b/Doxygen/build/search/namespaces_0.js new file mode 100644 index 0000000..7b3dcde --- /dev/null +++ b/Doxygen/build/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eule_157',['Eule',['../namespaceEule.html',1,'']]] +]; diff --git a/Doxygen/build/search/nomatches.html b/Doxygen/build/search/nomatches.html new file mode 100644 index 0000000..4377320 --- /dev/null +++ b/Doxygen/build/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/Doxygen/build/search/related_0.html b/Doxygen/build/search/related_0.html new file mode 100644 index 0000000..bbe15fa --- /dev/null +++ b/Doxygen/build/search/related_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/related_0.js b/Doxygen/build/search/related_0.js new file mode 100644 index 0000000..bb97438 --- /dev/null +++ b/Doxygen/build/search/related_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_3c_3c_291',['operator<<',['../classEule_1_1Matrix4x4.html#ab4da4b366d5d0a7bbe890aff1f2445df',1,'Eule::Matrix4x4::operator<<()'],['../classEule_1_1Matrix4x4.html#a4edddbe2b7f5913d67bb90a4d28f44e3',1,'Eule::Matrix4x4::operator<<()'],['../classEule_1_1Quaternion.html#a9dc71eaedf4486dc005fa9a67c6da866',1,'Eule::Quaternion::operator<<()'],['../classEule_1_1Quaternion.html#a7cf5f94ea6e861b3c01f674d7ef987c7',1,'Eule::Quaternion::operator<<()'],['../classEule_1_1Vector2.html#aa89ba3c2ae7a53a25530d3eef6a3c4e3',1,'Eule::Vector2::operator<<()'],['../classEule_1_1Vector2.html#a7ae9f5fa7ea5f9e9ae4ba0dca0a8494b',1,'Eule::Vector2::operator<<()'],['../classEule_1_1Vector3.html#a5705993a4489fc62d73b85f3654261cf',1,'Eule::Vector3::operator<<()'],['../classEule_1_1Vector3.html#a062adbc281326979ec3f5f71052d0deb',1,'Eule::Vector3::operator<<()'],['../classEule_1_1Vector4.html#a67f776474e56594e4973be32df68602a',1,'Eule::Vector4::operator<<()'],['../classEule_1_1Vector4.html#a111187ac1ffc14d4aa33d85a14645870',1,'Eule::Vector4::operator<<()']]] +]; diff --git a/Doxygen/build/search/search.css b/Doxygen/build/search/search.css new file mode 100644 index 0000000..3cf9df9 --- /dev/null +++ b/Doxygen/build/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/Doxygen/build/search/search.js b/Doxygen/build/search/search.js new file mode 100644 index 0000000..a554ab9 --- /dev/null +++ b/Doxygen/build/search/search.js @@ -0,0 +1,814 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/Doxygen/build/search/search_r.png b/Doxygen/build/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/Doxygen/build/search/searchdata.js b/Doxygen/build/search/searchdata.js new file mode 100644 index 0000000..359ee22 --- /dev/null +++ b/Doxygen/build/search/searchdata.js @@ -0,0 +1,39 @@ +var indexSectionsWithContent = +{ + 0: "abcdefghijklmnopqrstuvwxyz~", + 1: "cmqrtv", + 2: "e", + 3: "cemqrtv", + 4: "acdgilmnoqrstuv~", + 5: "abcdefghijklmnoprstuvwxyz", + 6: "v", + 7: "o", + 8: "dhmpr" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "related", + 8: "defines" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Namespaces", + 3: "Files", + 4: "Functions", + 5: "Variables", + 6: "Typedefs", + 7: "Friends", + 8: "Macros" +}; + diff --git a/Doxygen/build/search/typedefs_0.html b/Doxygen/build/search/typedefs_0.html new file mode 100644 index 0000000..376db47 --- /dev/null +++ b/Doxygen/build/search/typedefs_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/typedefs_0.js b/Doxygen/build/search/typedefs_0.js new file mode 100644 index 0000000..f6225b9 --- /dev/null +++ b/Doxygen/build/search/typedefs_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vector2d_285',['Vector2d',['../namespaceEule.html#ad2b14d99a3b97a954d09be46e86fa554',1,'Eule']]], + ['vector2i_286',['Vector2i',['../namespaceEule.html#a4b8529f841686a41ce0423f3610f0779',1,'Eule']]], + ['vector3d_287',['Vector3d',['../namespaceEule.html#afc45246550a85134cf500caa2b81061a',1,'Eule']]], + ['vector3i_288',['Vector3i',['../namespaceEule.html#a2ee0ef456d32068e4f9b8355ca47acd7',1,'Eule']]], + ['vector4d_289',['Vector4d',['../namespaceEule.html#ab1f7f26891b56b960ca6cca5cc1cc44e',1,'Eule']]], + ['vector4i_290',['Vector4i',['../namespaceEule.html#aea48fbceb33833fc808355c9eec721bb',1,'Eule']]] +]; diff --git a/Doxygen/build/search/variables_0.html b/Doxygen/build/search/variables_0.html new file mode 100644 index 0000000..bf3eba5 --- /dev/null +++ b/Doxygen/build/search/variables_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_0.js b/Doxygen/build/search/variables_0.js new file mode 100644 index 0000000..27fbbd8 --- /dev/null +++ b/Doxygen/build/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['a_248',['a',['../classEule_1_1Matrix4x4.html#ab3ff5bc09a2598faa76188d0cc31addb',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_1.html b/Doxygen/build/search/variables_1.html new file mode 100644 index 0000000..49fe59a --- /dev/null +++ b/Doxygen/build/search/variables_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_1.js b/Doxygen/build/search/variables_1.js new file mode 100644 index 0000000..0885967 --- /dev/null +++ b/Doxygen/build/search/variables_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['b_249',['b',['../classEule_1_1Matrix4x4.html#a2258f9cce9558711c59ffcf140a39756',1,'Eule::Matrix4x4']]], + ['back_250',['BACK',['../classEule_1_1TrapazoidalPrismCollider.html#a756f4bcb931dd6381901362e51410da9',1,'Eule::TrapazoidalPrismCollider']]], + ['backward_251',['backward',['../classEule_1_1Vector3.html#a34083239eb29eaf4614d09d4d7014b06',1,'Eule::Vector3::backward()'],['../classEule_1_1Vector4.html#a59d02244dbcd06b9d3f09da75128242e',1,'Eule::Vector4::backward()']]], + ['bottom_252',['BOTTOM',['../classEule_1_1TrapazoidalPrismCollider.html#a7f7594171358bbc10680e2dc42f1b53d',1,'Eule::TrapazoidalPrismCollider']]] +]; diff --git a/Doxygen/build/search/variables_10.html b/Doxygen/build/search/variables_10.html new file mode 100644 index 0000000..92982ac --- /dev/null +++ b/Doxygen/build/search/variables_10.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_10.js b/Doxygen/build/search/variables_10.js new file mode 100644 index 0000000..f285062 --- /dev/null +++ b/Doxygen/build/search/variables_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['right_275',['right',['../classEule_1_1Vector2.html#a594b062e78cb2e92dbb533a435258f49',1,'Eule::Vector2::right()'],['../classEule_1_1Vector3.html#a1febd6152b8964147229242630b8c8f0',1,'Eule::Vector3::right()'],['../classEule_1_1Vector4.html#a4701bae8f20522fe93575e8909478f36',1,'Eule::Vector4::right()'],['../classEule_1_1TrapazoidalPrismCollider.html#a67a468becb53ca0d50e8da3daab98b85',1,'Eule::TrapazoidalPrismCollider::RIGHT()']]] +]; diff --git a/Doxygen/build/search/variables_11.html b/Doxygen/build/search/variables_11.html new file mode 100644 index 0000000..94f1a8c --- /dev/null +++ b/Doxygen/build/search/variables_11.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_11.js b/Doxygen/build/search/variables_11.js new file mode 100644 index 0000000..6853475 --- /dev/null +++ b/Doxygen/build/search/variables_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['size_276',['size',['../structEule_1_1Rect.html#a330821ad2e2fbffe4575783619923f8d',1,'Eule::Rect']]] +]; diff --git a/Doxygen/build/search/variables_12.html b/Doxygen/build/search/variables_12.html new file mode 100644 index 0000000..61c013a --- /dev/null +++ b/Doxygen/build/search/variables_12.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_12.js b/Doxygen/build/search/variables_12.js new file mode 100644 index 0000000..1ae37be --- /dev/null +++ b/Doxygen/build/search/variables_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['top_277',['TOP',['../classEule_1_1TrapazoidalPrismCollider.html#a09b3433cb41848fd166fc9c7614aff7e',1,'Eule::TrapazoidalPrismCollider']]] +]; diff --git a/Doxygen/build/search/variables_13.html b/Doxygen/build/search/variables_13.html new file mode 100644 index 0000000..87b7ca6 --- /dev/null +++ b/Doxygen/build/search/variables_13.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_13.js b/Doxygen/build/search/variables_13.js new file mode 100644 index 0000000..9f4b253 --- /dev/null +++ b/Doxygen/build/search/variables_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['up_278',['up',['../classEule_1_1Vector2.html#a010bbbc9de53adcc00ffe1565c3a8208',1,'Eule::Vector2::up()'],['../classEule_1_1Vector3.html#a7508f8b060773b00cd40df94d628d7b6',1,'Eule::Vector3::up()'],['../classEule_1_1Vector4.html#a9a8c5882154587b3e34ae308466f98a5',1,'Eule::Vector4::up()']]] +]; diff --git a/Doxygen/build/search/variables_14.html b/Doxygen/build/search/variables_14.html new file mode 100644 index 0000000..874fe59 --- /dev/null +++ b/Doxygen/build/search/variables_14.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_14.js b/Doxygen/build/search/variables_14.js new file mode 100644 index 0000000..6f33c8a --- /dev/null +++ b/Doxygen/build/search/variables_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['v_279',['v',['../classEule_1_1Matrix4x4.html#a6cf89fe3ccd64d362a1d4c6ea77ff660',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_15.html b/Doxygen/build/search/variables_15.html new file mode 100644 index 0000000..3ca8799 --- /dev/null +++ b/Doxygen/build/search/variables_15.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_15.js b/Doxygen/build/search/variables_15.js new file mode 100644 index 0000000..5ac10d0 --- /dev/null +++ b/Doxygen/build/search/variables_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['w_280',['w',['../classEule_1_1Vector4.html#a4b2184f91a991264ddc3dae3beadf23e',1,'Eule::Vector4']]] +]; diff --git a/Doxygen/build/search/variables_16.html b/Doxygen/build/search/variables_16.html new file mode 100644 index 0000000..2b5a433 --- /dev/null +++ b/Doxygen/build/search/variables_16.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_16.js b/Doxygen/build/search/variables_16.js new file mode 100644 index 0000000..a953611 --- /dev/null +++ b/Doxygen/build/search/variables_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x_281',['x',['../classEule_1_1Vector2.html#acca020e7957a9b7b2682f2df496bcdb7',1,'Eule::Vector2::x()'],['../classEule_1_1Vector3.html#a3d7770a583354b1dfc2f6af1092adc1b',1,'Eule::Vector3::x()'],['../classEule_1_1Vector4.html#a6abdc466a694e39b1bf5e71dd26e9fbf',1,'Eule::Vector4::x()']]] +]; diff --git a/Doxygen/build/search/variables_17.html b/Doxygen/build/search/variables_17.html new file mode 100644 index 0000000..16914b7 --- /dev/null +++ b/Doxygen/build/search/variables_17.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_17.js b/Doxygen/build/search/variables_17.js new file mode 100644 index 0000000..3b86102 --- /dev/null +++ b/Doxygen/build/search/variables_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y_282',['y',['../classEule_1_1Vector2.html#a077434c60e04b051347a43ce26fbdbc9',1,'Eule::Vector2::y()'],['../classEule_1_1Vector3.html#a716e038c7b599bc5c741dfc0a3c42146',1,'Eule::Vector3::y()'],['../classEule_1_1Vector4.html#a994773dc2da079a335f4b57153cf82c9',1,'Eule::Vector4::y()']]] +]; diff --git a/Doxygen/build/search/variables_18.html b/Doxygen/build/search/variables_18.html new file mode 100644 index 0000000..782b3bf --- /dev/null +++ b/Doxygen/build/search/variables_18.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_18.js b/Doxygen/build/search/variables_18.js new file mode 100644 index 0000000..3317522 --- /dev/null +++ b/Doxygen/build/search/variables_18.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['z_283',['z',['../classEule_1_1Vector3.html#a754b1a46c44a0fde99e670e174dba674',1,'Eule::Vector3::z()'],['../classEule_1_1Vector4.html#acf70d20ed586c3e168f2664f643902f0',1,'Eule::Vector4::z()']]], + ['zero_284',['zero',['../classEule_1_1Vector2.html#a44cd63661b38477ebd67c9eb20369e7c',1,'Eule::Vector2::zero()'],['../classEule_1_1Vector3.html#a1f0b4bb9f5533e3a134310d702bbfb33',1,'Eule::Vector3::zero()'],['../classEule_1_1Vector4.html#adf801d37181ff33a920f31536337ca07',1,'Eule::Vector4::zero()']]] +]; diff --git a/Doxygen/build/search/variables_2.html b/Doxygen/build/search/variables_2.html new file mode 100644 index 0000000..0c8a18c --- /dev/null +++ b/Doxygen/build/search/variables_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_2.js b/Doxygen/build/search/variables_2.js new file mode 100644 index 0000000..68fe9c2 --- /dev/null +++ b/Doxygen/build/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['c_253',['c',['../classEule_1_1Matrix4x4.html#a68920de2728741859aa7cb3d245aa2c3',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_3.html b/Doxygen/build/search/variables_3.html new file mode 100644 index 0000000..19a31fc --- /dev/null +++ b/Doxygen/build/search/variables_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_3.js b/Doxygen/build/search/variables_3.js new file mode 100644 index 0000000..e388af1 --- /dev/null +++ b/Doxygen/build/search/variables_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['d_254',['d',['../classEule_1_1Matrix4x4.html#a7f21115e0597a25fbdb4d9784de0c988',1,'Eule::Matrix4x4']]], + ['down_255',['down',['../classEule_1_1Vector2.html#a7e60489f914c01c98839333dd41d8a49',1,'Eule::Vector2::down()'],['../classEule_1_1Vector3.html#ac44e82051be457c78f6428859482f848',1,'Eule::Vector3::down()'],['../classEule_1_1Vector4.html#a0f00c430129cb8edfb9c96693c39ab73',1,'Eule::Vector4::down()']]] +]; diff --git a/Doxygen/build/search/variables_4.html b/Doxygen/build/search/variables_4.html new file mode 100644 index 0000000..bdc37be --- /dev/null +++ b/Doxygen/build/search/variables_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_4.js b/Doxygen/build/search/variables_4.js new file mode 100644 index 0000000..7ccb7d9 --- /dev/null +++ b/Doxygen/build/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['e_256',['e',['../classEule_1_1Matrix4x4.html#a19fb1d47aea5672da2fe1fc20500615a',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_5.html b/Doxygen/build/search/variables_5.html new file mode 100644 index 0000000..6aa2249 --- /dev/null +++ b/Doxygen/build/search/variables_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_5.js b/Doxygen/build/search/variables_5.js new file mode 100644 index 0000000..8426690 --- /dev/null +++ b/Doxygen/build/search/variables_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['f_257',['f',['../classEule_1_1Matrix4x4.html#a47b0d5273289c602f1ab4d3b963fe267',1,'Eule::Matrix4x4']]], + ['forward_258',['forward',['../classEule_1_1Vector3.html#a791d893f68f2aee85287ab3ab7612ff0',1,'Eule::Vector3::forward()'],['../classEule_1_1Vector4.html#a9ec10cf10c0edb934169211ad7fef821',1,'Eule::Vector4::forward()']]], + ['front_259',['FRONT',['../classEule_1_1TrapazoidalPrismCollider.html#ad8648ff086e60e5cae763c14b72cd8fd',1,'Eule::TrapazoidalPrismCollider']]], + ['future_260',['future',['../classEule_1_1Vector4.html#afefa0db0ba202f63e338506fd21a61e9',1,'Eule::Vector4']]] +]; diff --git a/Doxygen/build/search/variables_6.html b/Doxygen/build/search/variables_6.html new file mode 100644 index 0000000..ce4a906 --- /dev/null +++ b/Doxygen/build/search/variables_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_6.js b/Doxygen/build/search/variables_6.js new file mode 100644 index 0000000..df6c314 --- /dev/null +++ b/Doxygen/build/search/variables_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['g_261',['g',['../classEule_1_1Matrix4x4.html#a1519f79fbfd4f33a0718ffc030fb6706',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_7.html b/Doxygen/build/search/variables_7.html new file mode 100644 index 0000000..39ffd47 --- /dev/null +++ b/Doxygen/build/search/variables_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_7.js b/Doxygen/build/search/variables_7.js new file mode 100644 index 0000000..d038d77 --- /dev/null +++ b/Doxygen/build/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['h_262',['h',['../classEule_1_1Matrix4x4.html#ac48433ef3faa767919938e56803bfc41',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_8.html b/Doxygen/build/search/variables_8.html new file mode 100644 index 0000000..37a2edd --- /dev/null +++ b/Doxygen/build/search/variables_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_8.js b/Doxygen/build/search/variables_8.js new file mode 100644 index 0000000..fb96599 --- /dev/null +++ b/Doxygen/build/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['i_263',['i',['../classEule_1_1Matrix4x4.html#afb1b52d2d395e1d4a099556fac3918dc',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_9.html b/Doxygen/build/search/variables_9.html new file mode 100644 index 0000000..21e5a4f --- /dev/null +++ b/Doxygen/build/search/variables_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_9.js b/Doxygen/build/search/variables_9.js new file mode 100644 index 0000000..515ebc1 --- /dev/null +++ b/Doxygen/build/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['j_264',['j',['../classEule_1_1Matrix4x4.html#a6ad97bdfe3f070fd4d1d0ebc2ee1309a',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_a.html b/Doxygen/build/search/variables_a.html new file mode 100644 index 0000000..1f65055 --- /dev/null +++ b/Doxygen/build/search/variables_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_a.js b/Doxygen/build/search/variables_a.js new file mode 100644 index 0000000..3cc36e1 --- /dev/null +++ b/Doxygen/build/search/variables_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['k_265',['k',['../classEule_1_1Matrix4x4.html#af93a84acffc7d5282653b7b591633874',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_b.html b/Doxygen/build/search/variables_b.html new file mode 100644 index 0000000..c02d066 --- /dev/null +++ b/Doxygen/build/search/variables_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_b.js b/Doxygen/build/search/variables_b.js new file mode 100644 index 0000000..33cb9ca --- /dev/null +++ b/Doxygen/build/search/variables_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['l_266',['l',['../classEule_1_1Matrix4x4.html#a9a18b42500a1f9c551c7f27039cb6a67',1,'Eule::Matrix4x4']]], + ['left_267',['left',['../classEule_1_1Vector2.html#a4ad2191854a9fdbc8dae0967b3a48be5',1,'Eule::Vector2::left()'],['../classEule_1_1Vector3.html#a37949a2f74ceb05ea1797be34c42989a',1,'Eule::Vector3::left()'],['../classEule_1_1Vector4.html#a354e05fd3b3a38b530258b3247c544d1',1,'Eule::Vector4::left()'],['../classEule_1_1TrapazoidalPrismCollider.html#a2d1fb0b58a8562c1869a8dbef330c22b',1,'Eule::TrapazoidalPrismCollider::LEFT()']]] +]; diff --git a/Doxygen/build/search/variables_c.html b/Doxygen/build/search/variables_c.html new file mode 100644 index 0000000..4b866c6 --- /dev/null +++ b/Doxygen/build/search/variables_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_c.js b/Doxygen/build/search/variables_c.js new file mode 100644 index 0000000..6f18a5e --- /dev/null +++ b/Doxygen/build/search/variables_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['m_268',['m',['../classEule_1_1Matrix4x4.html#a337d6bb2a36f36cd4620cdd35555893d',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_d.html b/Doxygen/build/search/variables_d.html new file mode 100644 index 0000000..84d878b --- /dev/null +++ b/Doxygen/build/search/variables_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_d.js b/Doxygen/build/search/variables_d.js new file mode 100644 index 0000000..4276342 --- /dev/null +++ b/Doxygen/build/search/variables_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['n_269',['n',['../classEule_1_1Matrix4x4.html#a4d6df21744055ee87479591b619af33d',1,'Eule::Matrix4x4']]] +]; diff --git a/Doxygen/build/search/variables_e.html b/Doxygen/build/search/variables_e.html new file mode 100644 index 0000000..b0d9b7b --- /dev/null +++ b/Doxygen/build/search/variables_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_e.js b/Doxygen/build/search/variables_e.js new file mode 100644 index 0000000..58c2ab9 --- /dev/null +++ b/Doxygen/build/search/variables_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['o_270',['o',['../classEule_1_1Matrix4x4.html#a9e813c2000f912ba2b16ea19d387565b',1,'Eule::Matrix4x4']]], + ['one_271',['one',['../classEule_1_1Vector2.html#a2651455a1339e1d61151538f986aa19b',1,'Eule::Vector2::one()'],['../classEule_1_1Vector3.html#a46a389aa258dc615650ffd7e98e3e482',1,'Eule::Vector3::one()'],['../classEule_1_1Vector4.html#a41087d79654271a580c8e5705825b2ed',1,'Eule::Vector4::one()']]] +]; diff --git a/Doxygen/build/search/variables_f.html b/Doxygen/build/search/variables_f.html new file mode 100644 index 0000000..a708dbf --- /dev/null +++ b/Doxygen/build/search/variables_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Doxygen/build/search/variables_f.js b/Doxygen/build/search/variables_f.js new file mode 100644 index 0000000..4d0b859 --- /dev/null +++ b/Doxygen/build/search/variables_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['p_272',['p',['../classEule_1_1Matrix4x4.html#a3fdccd317c5ea363b91f6d8096b28bd7',1,'Eule::Matrix4x4']]], + ['past_273',['past',['../classEule_1_1Vector4.html#a5533bb69dbc4714fd53aaf1e0db9bf99',1,'Eule::Vector4']]], + ['pos_274',['pos',['../structEule_1_1Rect.html#a8013088ed66af106df10acd7ded49bc7',1,'Eule::Rect']]] +]; diff --git a/Doxygen/build/splitbar.png b/Doxygen/build/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/Doxygen/build/structEule_1_1Rect-members.html b/Doxygen/build/structEule_1_1Rect-members.html new file mode 100644 index 0000000..53f018b --- /dev/null +++ b/Doxygen/build/structEule_1_1Rect-members.html @@ -0,0 +1,93 @@ + + + + + + + +Leonetienne/Eule: Member List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    Eule::Rect Member List
    +
    +
    + +

    This is the complete list of members for Eule::Rect, including all inherited members.

    + + + +
    posEule::Rect
    sizeEule::Rect
    + + + + diff --git a/Doxygen/build/structEule_1_1Rect.html b/Doxygen/build/structEule_1_1Rect.html new file mode 100644 index 0000000..7657f14 --- /dev/null +++ b/Doxygen/build/structEule_1_1Rect.html @@ -0,0 +1,153 @@ + + + + + + + +Leonetienne/Eule: Eule::Rect Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    Eule::Rect Struct Reference
    +
    +
    + +

    Trivial data structure representing a rectangle. + More...

    + +

    #include <Rect.h>

    +
    +Collaboration diagram for Eule::Rect:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + +

    +Public Attributes

    Vector2d pos
     
    Vector2d size
     
    +

    Detailed Description

    +

    Trivial data structure representing a rectangle.

    + +

    Definition at line 8 of file Rect.h.

    +

    Member Data Documentation

    + +

    ◆ pos

    + +
    +
    + + + + +
    Vector2d Eule::Rect::pos
    +
    + +

    Definition at line 10 of file Rect.h.

    + +
    +
    + +

    ◆ size

    + +
    +
    + + + + +
    Vector2d Eule::Rect::size
    +
    + +

    Definition at line 11 of file Rect.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/Doxygen/build/structEule_1_1Rect__coll__graph.map b/Doxygen/build/structEule_1_1Rect__coll__graph.map new file mode 100644 index 0000000..3926881 --- /dev/null +++ b/Doxygen/build/structEule_1_1Rect__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/Doxygen/build/structEule_1_1Rect__coll__graph.md5 b/Doxygen/build/structEule_1_1Rect__coll__graph.md5 new file mode 100644 index 0000000..885022f --- /dev/null +++ b/Doxygen/build/structEule_1_1Rect__coll__graph.md5 @@ -0,0 +1 @@ +58b51022f8ff2d02cc635fbfc909c27e \ No newline at end of file diff --git a/Doxygen/build/structEule_1_1Rect__coll__graph.png b/Doxygen/build/structEule_1_1Rect__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4131c5b3260cc97b840a8be0eb3ca8a6f29bc7e3 GIT binary patch literal 8014 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 IZSvuN0D1S!`~Uy| literal 0 HcmV?d00001 diff --git a/Doxygen/build/sync_off.png b/Doxygen/build/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/Doxygen/build/sync_on.png b/Doxygen/build/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/Doxygen/build/tab_a.png b/Doxygen/build/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/Doxygen/build/tab_b.png b/Doxygen/build/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/Doxygen/build/tabs.css b/Doxygen/build/tabs.css new file mode 100644 index 0000000..7d45d36 --- /dev/null +++ b/Doxygen/build/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/Doxygen/build/x64_2Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html b/Doxygen/build/x64_2Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html new file mode 100644 index 0000000..a18c57c --- /dev/null +++ b/Doxygen/build/x64_2Debug_2Eule_8vcxproj_8FileListAbsolute_8txt.html @@ -0,0 +1,84 @@ + + + + + + + +Leonetienne/Eule: Eule/x64/Debug/Eule.vcxproj.FileListAbsolute.txt File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Eule/x64/Debug/Eule.vcxproj.FileListAbsolute.txt File Reference
    +
    +
    +
    + + + + diff --git a/Doxygen/build/x64_2Release_2Eule_8vcxproj_8FileListAbsolute_8txt.html b/Doxygen/build/x64_2Release_2Eule_8vcxproj_8FileListAbsolute_8txt.html new file mode 100644 index 0000000..4658574 --- /dev/null +++ b/Doxygen/build/x64_2Release_2Eule_8vcxproj_8FileListAbsolute_8txt.html @@ -0,0 +1,84 @@ + + + + + + + +Leonetienne/Eule: Eule/x64/Release/Eule.vcxproj.FileListAbsolute.txt File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Leonetienne/Eule +
    +
    Homemade math library, mainly targetted towards computer graphics
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Eule/x64/Release/Eule.vcxproj.FileListAbsolute.txt File Reference
    +
    +
    +
    + + + + diff --git a/Doxygen/doxyroles/.gitkeep b/Doxygen/doxyroles/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Doxygen/doxyrun.sh b/Doxygen/doxyrun.sh new file mode 100644 index 0000000..b39bbd1 --- /dev/null +++ b/Doxygen/doxyrun.sh @@ -0,0 +1,2 @@ +# Run doxygen +sudo doxygen eule_doxyfig diff --git a/Doxygen/eule_doxyfig b/Doxygen/eule_doxyfig new file mode 100644 index 0000000..b33b970 --- /dev/null +++ b/Doxygen/eule_doxyfig @@ -0,0 +1,2579 @@ +# Doxyfile 1.8.17 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "Leonetienne/Eule" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Homemade math library, mainly targetted towards computer graphics" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./build/ + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = ../ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is +# Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = YES + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the +# documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# (including Cygwin) ands Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = "../Eule/" + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.doc \ + *.txt \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.ice + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = ../_Test_StaticTestFixture_Plato/ + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files +# were built. This is equivalent to specifying the "-p" option to a clang tool, +# such as clang-check. These options will then be passed to the parser. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. + +CLANG_DATABASE_PATH = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = . + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = YES + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /