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 0000000..9d9cbfd Binary files /dev/null and b/Doxygen/build/Collider_8cpp__incl.png differ 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
+
+
+Go to the documentation of this file.
1 #include "Collider.h"
+
+
Collider.h
+ + + + 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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces
+
+
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 0000000..b321190 Binary files /dev/null and b/Doxygen/build/Collider_8h__dep__incl.png differ 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 0000000..27e8cfd Binary files /dev/null and b/Doxygen/build/Collider_8h__incl.png differ diff --git a/Doxygen/build/Collider_8h_source.html b/Doxygen/build/Collider_8h_source.html new file mode 100644 index 0000000..dbe27c0 --- /dev/null +++ b/Doxygen/build/Collider_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +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 }
+
+
Eule::Collider
Abstract class of a collider domain.
Definition: Collider.h:10
+
Eule::Vector3< double >
+
Eule::Collider::Contains
virtual bool Contains(const Vector3d &point) const =0
Tests, if this Collider contains a point.
+
Vector3.h
+
Eule
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Macros
+
+
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 0000000..beb6f19 Binary files /dev/null and b/Doxygen/build/Constants_8h__dep__incl.png differ 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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Macros
+
+
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 0000000..2202df0 Binary files /dev/null and b/Doxygen/build/Math_8cpp__incl.png differ diff --git a/Doxygen/build/Math_8cpp_source.html b/Doxygen/build/Math_8cpp_source.html new file mode 100644 index 0000000..14903e0 --- /dev/null +++ b/Doxygen/build/Math_8cpp_source.html @@ -0,0 +1,180 @@ + + + + + + + +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;
+
+
MAKE_SURE_RNG_IS_INITIALIZED
#define MAKE_SURE_RNG_IS_INITIALIZED
Definition: Math.cpp:8
+
Eule::Math::RandomChance
static bool RandomChance(const double chance)
Will 'roll' a dice, returning true percent of the time.
Definition: Math.cpp:73
+
Eule::Math::RandomRange
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
+
PI
#define PI
Pi up to 50 decimal places.
Definition: Constants.h:6
+
Constants.h
+
HALF_PI
#define HALF_PI
Pi divided by two.
Definition: Constants.h:9
+
Eule::Math::RandomInt
static unsigned int RandomInt()
Will return a random integer.
Definition: Math.cpp:45
+
Math.h
+
Eule::Math::RandomIntRange
static int RandomIntRange(const int max, const int min)
Will return a random integer within a range.
Definition: Math.cpp:63
+
Eule::Math::Random
static double Random()
Will return a random double between 0 and 1
Definition: Math.cpp:29
+
Eule::Math::RandomUint
static unsigned int RandomUint()
Will return a random unsigned integer.
Definition: Math.cpp:37
+
Eule
Definition: Collider.h:4
+
Eule::Math::Oscillate
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces
+
+
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 0000000..aa88a7f Binary files /dev/null and b/Doxygen/build/Math_8h__dep__incl.png differ diff --git a/Doxygen/build/Math_8h__incl.map b/Doxygen/build/Math_8h__incl.map new file mode 100644 index 0000000..db0e59e --- /dev/null +++ b/Doxygen/build/Math_8h__incl.map @@ -0,0 +1,4 @@ + + + + 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 0000000..8e72433 Binary files /dev/null and b/Doxygen/build/Math_8h__incl.png differ 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 }
+
+
Eule::Math::RandomChance
static bool RandomChance(const double chance)
Will 'roll' a dice, returning true percent of the time.
Definition: Math.cpp:73
+
Eule::Math::Abs
static constexpr double Abs(const double a)
Will return the absolute value of a
Definition: Math.h:92
+
Eule::Math::RandomRange
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
+
Eule::Math::Lerp
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
+
Eule::Math::RandomInt
static unsigned int RandomInt()
Will return a random integer.
Definition: Math.cpp:45
+
Eule::Math::Max
static constexpr double Max(const double a, const double b)
Will return the bigger of two values.
Definition: Math.h:71
+
Eule::Math
Math utility class.
Definition: Math.h:8
+
Eule::Math::Clamp
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
+
Eule::Math::Min
static constexpr double Min(const double a, const double b)
Will return the smaller of two values.
Definition: Math.h:76
+
Eule::Math::RandomIntRange
static int RandomIntRange(const int max, const int min)
Will return a random integer within a range.
Definition: Math.cpp:63
+
Eule::Math::Random
static double Random()
Will return a random double between 0 and 1
Definition: Math.cpp:29
+
Eule::Math::Similar
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
Eule::Math::RandomUint
static unsigned int RandomUint()
Will return a random unsigned integer.
Definition: Math.cpp:37
+
Eule
Definition: Collider.h:4
+
Eule::Math::Oscillate
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Namespaces | +Functions
+
+
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 0000000..e2c7808 Binary files /dev/null and b/Doxygen/build/Matrix4x4_8cpp__incl.png differ diff --git a/Doxygen/build/Matrix4x4_8cpp_source.html b/Doxygen/build/Matrix4x4_8cpp_source.html new file mode 100644 index 0000000..3b22846 --- /dev/null +++ b/Doxygen/build/Matrix4x4_8cpp_source.html @@ -0,0 +1,786 @@ + + + + + + + +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 }
+
+
Eule::Matrix4x4::j
double & j
Definition: Matrix4x4.h:137
+
Eule::Matrix4x4::Inverse4x4
Matrix4x4 Inverse4x4() const
Will return the full 4x4-inverse of this matrix.
Definition: Matrix4x4.cpp:577
+
Eule::Matrix4x4::Adjoint
Matrix4x4 Adjoint(std::size_t n) const
Will return the adjoint of this matrix, by dimension n.
Definition: Matrix4x4.cpp:533
+
Eule::Matrix4x4::operator==
bool operator==(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:397
+
Eule::Matrix4x4::operator+
Matrix4x4 operator+(const Matrix4x4 &other) const
Cellwise addition.
Definition: Matrix4x4.cpp:221
+
Eule::Matrix4x4::i
double & i
Definition: Matrix4x4.h:136
+
Eule::Matrix4x4::operator-=
void operator-=(const Matrix4x4 &other)
Cellwise subtraction.
Definition: Matrix4x4.cpp:338
+
Eule::Matrix4x4::Transpose4x4
Matrix4x4 Transpose4x4() const
Will return the 4x4 transpose of this matrix.
Definition: Matrix4x4.cpp:440
+
Eule::Matrix4x4::operator!=
bool operator!=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:402
+
Eule::Vector3< double >
+
Eule::Matrix4x4::operator[]
std::array< double, 4 > & operator[](std::size_t y)
Definition: Matrix4x4.cpp:375
+
Eule::Matrix4x4::DropTranslationComponents
Matrix4x4 DropTranslationComponents() const
Will return this Matrix4x4 with d,h,l being set to 0.
Definition: Matrix4x4.cpp:420
+
Eule::Matrix4x4::operator*=
void operator*=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:147
+
Eule::Matrix4x4::Inverse3x3
Matrix4x4 Inverse3x3() const
Will return the 3x3-inverse of this matrix.
Definition: Matrix4x4.cpp:558
+
Eule::Matrix4x4::operator/
Matrix4x4 operator/(const Matrix4x4 &other) const
Definition: Matrix4x4.cpp:153
+
Eule::Matrix4x4::v
std::array< std::array< double, 4 >, 4 > v
Array holding the matrices values.
Definition: Matrix4x4.h:44
+
Eule::Matrix4x4::operator*
Matrix4x4 operator*(const Matrix4x4 &other) const
Definition: Matrix4x4.cpp:34
+
Math.h
+
Eule::Vector3d
Vector3< double > Vector3d
Definition: Matrix4x4.h:9
+
Matrix4x4.h
+
Eule::Matrix4x4::operator=
void operator=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:385
+
Eule::Vector3::z
T z
Definition: Vector3.h:96
+
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Eule::Matrix4x4::IsInversible4x4
bool IsInversible4x4() const
Will check if the entire matrix is inversible.
Definition: Matrix4x4.cpp:603
+
Eule::Matrix4x4::Similar
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
+
Eule::Matrix4x4::operator/=
void operator/=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:158
+
Eule::Vector3::x
T x
Definition: Vector3.h:94
+
Eule::Matrix4x4::p
double & p
Definition: Matrix4x4.h:143
+
Eule::Matrix4x4::IsInversible3x3
bool IsInversible3x3() const
Will check if the 3x3-component is inversible.
Definition: Matrix4x4.cpp:598
+
Eule::Matrix4x4::Transpose3x3
Matrix4x4 Transpose3x3() const
Will return the 3x3 transpose of this matrix.
Definition: Matrix4x4.cpp:429
+
Eule::operator<<
std::ostream & operator<<(std::ostream &os, const Matrix4x4 &m)
Definition: Matrix4x4.cpp:620
+
Eule::Matrix4x4::l
double & l
Definition: Matrix4x4.h:139
+
Eule::Matrix4x4::operator-
Matrix4x4 operator-(const Matrix4x4 &other) const
Cellwise subtraction.
Definition: Matrix4x4.cpp:298
+
Eule::Matrix4x4::Determinant
double Determinant(std::size_t n) const
Will return the determinant, by dimension n.
Definition: Matrix4x4.cpp:511
+
Vector3.h
+
Eule::Math::Similar
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
Eule::Matrix4x4::operator+=
void operator+=(const Matrix4x4 &other)
Cellwise addition.
Definition: Matrix4x4.cpp:261
+
Eule::Matrix4x4::Matrix4x4
Matrix4x4()
Definition: Matrix4x4.cpp:12
+
Eule::Matrix4x4::SetTranslationComponent
void SetTranslationComponent(const Vector3d &trans)
Will set d,h,l from a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:412
+
Eule::Matrix4x4::Multiply4x4
Matrix4x4 Multiply4x4(const Matrix4x4 &o) const
Will return the Matrix4x4 of an actual 4x4 multiplication. operator* only does a 3x3.
Definition: Matrix4x4.cpp:451
+
Eule::Matrix4x4::o
double & o
Definition: Matrix4x4.h:142
+
Eule::Matrix4x4::m
double & m
Definition: Matrix4x4.h:140
+
Eule::Matrix4x4::GetCofactors
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
+
Eule::Matrix4x4::GetTranslationComponent
const Vector3d GetTranslationComponent() const
Will return d,h,l as a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:407
+
Eule::Matrix4x4::n
double & n
Definition: Matrix4x4.h:141
+
Eule::Matrix4x4::h
double & h
Definition: Matrix4x4.h:135
+
Eule
Definition: Collider.h:4
+
Eule::Matrix4x4::d
double & d
Definition: Matrix4x4.h:131
+
Eule::Vector3::y
T y
Definition: Vector3.h:95
+ + + + 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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces | +Typedefs
+
+
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 0000000..c4d2384 Binary files /dev/null and b/Doxygen/build/Matrix4x4_8h__dep__incl.png differ 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 0000000..3627873 Binary files /dev/null and b/Doxygen/build/Matrix4x4_8h__incl.png differ diff --git a/Doxygen/build/Matrix4x4_8h_source.html b/Doxygen/build/Matrix4x4_8h_source.html new file mode 100644 index 0000000..78dc576 --- /dev/null +++ b/Doxygen/build/Matrix4x4_8h_source.html @@ -0,0 +1,234 @@ + + + + + + + +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 }
+
+
Eule::Matrix4x4::j
double & j
Definition: Matrix4x4.h:137
+
Eule::Matrix4x4::Inverse4x4
Matrix4x4 Inverse4x4() const
Will return the full 4x4-inverse of this matrix.
Definition: Matrix4x4.cpp:577
+
Eule::Matrix4x4::Adjoint
Matrix4x4 Adjoint(std::size_t n) const
Will return the adjoint of this matrix, by dimension n.
Definition: Matrix4x4.cpp:533
+
Eule::Matrix4x4::operator==
bool operator==(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:397
+
Eule::Matrix4x4::operator+
Matrix4x4 operator+(const Matrix4x4 &other) const
Cellwise addition.
Definition: Matrix4x4.cpp:221
+
Eule::Matrix4x4::i
double & i
Definition: Matrix4x4.h:136
+
Eule::Matrix4x4::operator-=
void operator-=(const Matrix4x4 &other)
Cellwise subtraction.
Definition: Matrix4x4.cpp:338
+
Eule::Matrix4x4::Transpose4x4
Matrix4x4 Transpose4x4() const
Will return the 4x4 transpose of this matrix.
Definition: Matrix4x4.cpp:440
+
Eule::Matrix4x4::operator!=
bool operator!=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:402
+
Eule::Vector3
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
Eule::Matrix4x4::operator[]
std::array< double, 4 > & operator[](std::size_t y)
Definition: Matrix4x4.cpp:375
+
Eule::Matrix4x4::DropTranslationComponents
Matrix4x4 DropTranslationComponents() const
Will return this Matrix4x4 with d,h,l being set to 0.
Definition: Matrix4x4.cpp:420
+
Eule::Matrix4x4::e
double & e
Definition: Matrix4x4.h:132
+
Eule::Matrix4x4::f
double & f
Definition: Matrix4x4.h:133
+
Eule::Matrix4x4::operator*=
void operator*=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:147
+
Eule::Matrix4x4::Inverse3x3
Matrix4x4 Inverse3x3() const
Will return the 3x3-inverse of this matrix.
Definition: Matrix4x4.cpp:558
+
Eule::Matrix4x4::k
double & k
Definition: Matrix4x4.h:138
+
Eule::Matrix4x4::operator/
Matrix4x4 operator/(const Matrix4x4 &other) const
Definition: Matrix4x4.cpp:153
+
Eule::Matrix4x4::v
std::array< std::array< double, 4 >, 4 > v
Array holding the matrices values.
Definition: Matrix4x4.h:44
+
Eule::Matrix4x4::operator*
Matrix4x4 operator*(const Matrix4x4 &other) const
Definition: Matrix4x4.cpp:34
+
Eule::Vector3d
Vector3< double > Vector3d
Definition: Matrix4x4.h:9
+
Eule::Matrix4x4::operator=
void operator=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:385
+
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Eule::Matrix4x4::IsInversible4x4
bool IsInversible4x4() const
Will check if the entire matrix is inversible.
Definition: Matrix4x4.cpp:603
+
Eule::Matrix4x4::b
double & b
Definition: Matrix4x4.h:129
+
Eule::Matrix4x4::Similar
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
+
Eule::Matrix4x4::g
double & g
Definition: Matrix4x4.h:134
+
Eule::Matrix4x4::operator/=
void operator/=(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:158
+
Eule::Matrix4x4::operator<<
friend std::ostream & operator<<(std::ostream &os, const Matrix4x4 &m)
Definition: Matrix4x4.cpp:620
+
Eule::Matrix4x4::p
double & p
Definition: Matrix4x4.h:143
+
Eule::Matrix4x4::IsInversible3x3
bool IsInversible3x3() const
Will check if the 3x3-component is inversible.
Definition: Matrix4x4.cpp:598
+
Eule::Matrix4x4::Transpose3x3
Matrix4x4 Transpose3x3() const
Will return the 3x3 transpose of this matrix.
Definition: Matrix4x4.cpp:429
+
Eule::Matrix4x4::l
double & l
Definition: Matrix4x4.h:139
+
Eule::Matrix4x4::operator-
Matrix4x4 operator-(const Matrix4x4 &other) const
Cellwise subtraction.
Definition: Matrix4x4.cpp:298
+
Eule::Matrix4x4::Determinant
double Determinant(std::size_t n) const
Will return the determinant, by dimension n.
Definition: Matrix4x4.cpp:511
+
Eule::Matrix4x4::operator+=
void operator+=(const Matrix4x4 &other)
Cellwise addition.
Definition: Matrix4x4.cpp:261
+
Eule::Matrix4x4::Matrix4x4
Matrix4x4()
Definition: Matrix4x4.cpp:12
+
Eule::Matrix4x4::SetTranslationComponent
void SetTranslationComponent(const Vector3d &trans)
Will set d,h,l from a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:412
+
Eule::Matrix4x4::c
double & c
Definition: Matrix4x4.h:130
+
Eule::Matrix4x4::Multiply4x4
Matrix4x4 Multiply4x4(const Matrix4x4 &o) const
Will return the Matrix4x4 of an actual 4x4 multiplication. operator* only does a 3x3.
Definition: Matrix4x4.cpp:451
+
Eule::Matrix4x4::o
double & o
Definition: Matrix4x4.h:142
+
Eule::Matrix4x4::a
double & a
Definition: Matrix4x4.h:128
+
Eule::Matrix4x4::m
double & m
Definition: Matrix4x4.h:140
+
Eule::Matrix4x4::GetCofactors
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
+
Eule::Matrix4x4::GetTranslationComponent
const Vector3d GetTranslationComponent() const
Will return d,h,l as a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:407
+
Eule::Matrix4x4::n
double & n
Definition: Matrix4x4.h:141
+
Eule::Matrix4x4::h
double & h
Definition: Matrix4x4.h:135
+
Eule
Definition: Collider.h:4
+
Eule::Matrix4x4::d
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Namespaces | +Functions
+
+
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 0000000..2d003b8 Binary files /dev/null and b/Doxygen/build/Quaternion_8cpp__incl.png differ diff --git a/Doxygen/build/Quaternion_8cpp_source.html b/Doxygen/build/Quaternion_8cpp_source.html new file mode 100644 index 0000000..89356fa --- /dev/null +++ b/Doxygen/build/Quaternion_8cpp_source.html @@ -0,0 +1,476 @@ + + + + + + + +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 }
+
+
Eule::Quaternion::operator/
Quaternion operator/(Quaternion &q) const
Divides (applies)
Definition: Quaternion.cpp:126
+
Eule::Matrix4x4::j
double & j
Definition: Matrix4x4.h:137
+
Eule::Quaternion::ToRotationMatrix
Matrix4x4 ToRotationMatrix() const
Will return a rotation matrix representing this Quaternions rotation.
Definition: Quaternion.cpp:246
+
Eule::Quaternion::GetRawValues
Vector4d GetRawValues() const
Will return the raw four-dimensional values.
Definition: Quaternion.cpp:290
+
Eule::Matrix4x4::i
double & i
Definition: Matrix4x4.h:136
+
Eule::Quaternion::AngleBetween
Quaternion AngleBetween(const Quaternion &other) const
Will return the value between two Quaternion's as another Quaternion.
Definition: Quaternion.cpp:295
+
Eule::Vector3< double >
+
Eule::Quaternion::Lerp
Quaternion Lerp(const Quaternion &other, double t) const
Will return the lerp result between two quaternions.
Definition: Quaternion.cpp:309
+
Eule::Vector4::x
T x
Definition: Vector4.h:88
+
Eule::Quaternion::UnitQuaternion
Quaternion UnitQuaternion() const
Definition: Quaternion.cpp:192
+
Eule::Matrix4x4::e
double & e
Definition: Matrix4x4.h:132
+
Eule::Vector4::z
T z
Definition: Vector4.h:90
+
Eule::Vector4d
Vector4< double > Vector4d
Definition: Vector4.h:107
+
PI
#define PI
Pi up to 50 decimal places.
Definition: Constants.h:6
+
Constants.h
+
Deg2Rad
#define Deg2Rad
Factor to convert degrees to radians.
Definition: Constants.h:12
+
Eule::Matrix4x4::f
double & f
Definition: Matrix4x4.h:133
+
Eule::Quaternion::ToEulerAngles
Vector3d ToEulerAngles() const
Will return euler angles representing this Quaternion's rotation.
Definition: Quaternion.cpp:215
+
Eule::Matrix4x4::k
double & k
Definition: Matrix4x4.h:138
+
Eule::Vector4::Lerp
Vector4< double > Lerp(const Vector4< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector4.cpp:287
+
Eule::Quaternion::operator=
Quaternion operator=(const Quaternion &q)
Copies.
Definition: Quaternion.cpp:102
+
Eule::Vector4::w
T w
Definition: Vector4.h:91
+
Eule::Vector3::z
T z
Definition: Vector3.h:96
+
Eule::Quaternion::~Quaternion
~Quaternion()
Definition: Quaternion.cpp:97
+
Eule::Quaternion::operator*
Quaternion operator*(const Quaternion &q) const
Multiplies (applies)
Definition: Quaternion.cpp:111
+
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Quaternion.h
+
Eule::Quaternion::operator*=
Quaternion & operator*=(const Quaternion &q)
Also multiplies.
Definition: Quaternion.cpp:131
+
Eule::Vector4::Similar
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
+
Eule::Matrix4x4::b
double & b
Definition: Matrix4x4.h:129
+
Eule::Quaternion::SetRawValues
void SetRawValues(const Vector4d values)
Will set the raw four-dimensional values.
Definition: Quaternion.cpp:300
+
Eule::Vector4::Magnitude
double Magnitude() const
Will compute the magnitude.
Definition: Vector4.cpp:38
+
Eule::Matrix4x4::g
double & g
Definition: Matrix4x4.h:134
+
Eule::Vector3::x
T x
Definition: Vector3.h:94
+
Eule::Matrix4x4::p
double & p
Definition: Matrix4x4.h:143
+
Eule::Quaternion::RotateVector
Vector3d RotateVector(const Vector3d &vec) const
Will rotate a vector by this quaternion.
Definition: Quaternion.cpp:197
+
Eule::Vector4::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+
Eule::Quaternion::Quaternion
Quaternion()
Definition: Quaternion.cpp:11
+
Eule::operator<<
std::ostream & operator<<(std::ostream &os, const Matrix4x4 &m)
Definition: Matrix4x4.cpp:620
+
Eule::Quaternion::Conjugate
Quaternion Conjugate() const
Definition: Quaternion.cpp:187
+
Eule::Quaternion::Inverse
Quaternion Inverse() const
Definition: Quaternion.cpp:175
+
Eule::Quaternion::operator==
bool operator==(const Quaternion &q) const
Definition: Quaternion.cpp:165
+
Eule::Matrix4x4::c
double & c
Definition: Matrix4x4.h:130
+
Eule::Quaternion
3D rotation representation
Definition: Quaternion.h:10
+
Eule::Matrix4x4::a
double & a
Definition: Matrix4x4.h:128
+
Rad2Deg
#define Rad2Deg
Factor to convert radians to degrees.
Definition: Constants.h:15
+
Eule::Vector4::y
T y
Definition: Vector4.h:89
+
Eule::Quaternion::operator!=
bool operator!=(const Quaternion &q) const
Definition: Quaternion.cpp:170
+
Eule::Quaternion::operator/=
Quaternion & operator/=(const Quaternion &q)
Also divides.
Definition: Quaternion.cpp:152
+
Eule
Definition: Collider.h:4
+
Eule::Vector3::y
T y
Definition: Vector3.h:95
+
Eule::Vector4< double >
+ + + + 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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces
+
+
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 0000000..542be95 Binary files /dev/null and b/Doxygen/build/Quaternion_8h__dep__incl.png differ 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 0000000..7dc20f0 Binary files /dev/null and b/Doxygen/build/Quaternion_8h__incl.png differ diff --git a/Doxygen/build/Quaternion_8h_source.html b/Doxygen/build/Quaternion_8h_source.html new file mode 100644 index 0000000..4e9d032 --- /dev/null +++ b/Doxygen/build/Quaternion_8h_source.html @@ -0,0 +1,194 @@ + + + + + + + +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 }
+
+
Eule::Quaternion::operator/
Quaternion operator/(Quaternion &q) const
Divides (applies)
Definition: Quaternion.cpp:126
+
Eule::Quaternion::ToRotationMatrix
Matrix4x4 ToRotationMatrix() const
Will return a rotation matrix representing this Quaternions rotation.
Definition: Quaternion.cpp:246
+
Eule::Quaternion::GetRawValues
Vector4d GetRawValues() const
Will return the raw four-dimensional values.
Definition: Quaternion.cpp:290
+
Eule::Quaternion::AngleBetween
Quaternion AngleBetween(const Quaternion &other) const
Will return the value between two Quaternion's as another Quaternion.
Definition: Quaternion.cpp:295
+
Eule::Vector3< double >
+
Eule::Quaternion::Lerp
Quaternion Lerp(const Quaternion &other, double t) const
Will return the lerp result between two quaternions.
Definition: Quaternion.cpp:309
+
Eule::Quaternion::UnitQuaternion
Quaternion UnitQuaternion() const
Definition: Quaternion.cpp:192
+
Eule::Quaternion::ToEulerAngles
Vector3d ToEulerAngles() const
Will return euler angles representing this Quaternion's rotation.
Definition: Quaternion.cpp:215
+
Eule::Quaternion::operator=
Quaternion operator=(const Quaternion &q)
Copies.
Definition: Quaternion.cpp:102
+
Matrix4x4.h
+
Eule::Quaternion::~Quaternion
~Quaternion()
Definition: Quaternion.cpp:97
+
Eule::Quaternion::operator*
Quaternion operator*(const Quaternion &q) const
Multiplies (applies)
Definition: Quaternion.cpp:111
+
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Eule::Quaternion::operator*=
Quaternion & operator*=(const Quaternion &q)
Also multiplies.
Definition: Quaternion.cpp:131
+
Eule::Quaternion::SetRawValues
void SetRawValues(const Vector4d values)
Will set the raw four-dimensional values.
Definition: Quaternion.cpp:300
+
Vector4.h
+
Eule::Quaternion::RotateVector
Vector3d RotateVector(const Vector3d &vec) const
Will rotate a vector by this quaternion.
Definition: Quaternion.cpp:197
+
Eule::Quaternion::Quaternion
Quaternion()
Definition: Quaternion.cpp:11
+
Vector3.h
+
Eule::Quaternion::Conjugate
Quaternion Conjugate() const
Definition: Quaternion.cpp:187
+
Eule::Quaternion::Inverse
Quaternion Inverse() const
Definition: Quaternion.cpp:175
+
Eule::Quaternion::operator==
bool operator==(const Quaternion &q) const
Definition: Quaternion.cpp:165
+
Eule::Quaternion::operator<<
friend std::ostream & operator<<(std::ostream &os, const Quaternion &q)
Definition: Quaternion.cpp:325
+
Eule::Quaternion
3D rotation representation
Definition: Quaternion.h:10
+
Eule::Quaternion::operator!=
bool operator!=(const Quaternion &q) const
Definition: Quaternion.cpp:170
+
Eule::Quaternion::operator/=
Quaternion & operator/=(const Quaternion &q)
Also divides.
Definition: Quaternion.cpp:152
+
Eule
Definition: Collider.h:4
+
Eule::Vector4< double >
+ + + + 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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces
+
+
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 0000000..7dc6251 Binary files /dev/null and b/Doxygen/build/Rect_8h__incl.png differ 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 }
+
+
Eule::Rect
Trivial data structure representing a rectangle.
Definition: Rect.h:8
+
Eule::Rect::size
Vector2d size
Definition: Rect.h:11
+
Eule::Vector2< double >
+
Eule::Rect::pos
Vector2d pos
Definition: Rect.h:10
+
Eule
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 "TrapazoidalPrismCollider.h"
+
+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 0000000..19f4f0c Binary files /dev/null and b/Doxygen/build/TrapazoidalPrismCollider_8cpp__incl.png differ diff --git a/Doxygen/build/TrapazoidalPrismCollider_8cpp_source.html b/Doxygen/build/TrapazoidalPrismCollider_8cpp_source.html new file mode 100644 index 0000000..dc7bab0 --- /dev/null +++ b/Doxygen/build/TrapazoidalPrismCollider_8cpp_source.html @@ -0,0 +1,213 @@ + + + + + + + +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 }
+
+
Eule::TrapazoidalPrismCollider::RIGHT
static constexpr std::size_t RIGHT
Definition: TrapazoidalPrismCollider.h:35
+
TrapazoidalPrismCollider.h
+
Eule::TrapazoidalPrismCollider::BACK
static constexpr std::size_t BACK
Definition: TrapazoidalPrismCollider.h:32
+
Eule::Vector3< double >
+
Eule::TrapazoidalPrismCollider::FRONT
static constexpr std::size_t FRONT
Definition: TrapazoidalPrismCollider.h:33
+
Eule::TrapazoidalPrismCollider::BOTTOM
static constexpr std::size_t BOTTOM
Definition: TrapazoidalPrismCollider.h:36
+
Eule::TrapazoidalPrismCollider::operator=
void operator=(const TrapazoidalPrismCollider &other)
Definition: TrapazoidalPrismCollider.cpp:10
+
Eule::TrapazoidalPrismCollider::LEFT
static constexpr std::size_t LEFT
Definition: TrapazoidalPrismCollider.h:34
+
Eule::TrapazoidalPrismCollider::SetVertex
void SetVertex(std::size_t index, const Vector3d value)
Will set the value of a specific vertex.
Definition: TrapazoidalPrismCollider.cpp:31
+
Eule::TrapazoidalPrismCollider::Contains
bool Contains(const Vector3d &point) const override
Tests, if this Collider contains a point.
Definition: TrapazoidalPrismCollider.cpp:103
+
Eule::TrapazoidalPrismCollider
A collider describing a trapazoidal prism.
Definition: TrapazoidalPrismCollider.h:13
+
Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider
TrapazoidalPrismCollider()
Definition: TrapazoidalPrismCollider.cpp:5
+
Eule::TrapazoidalPrismCollider::GetVertex
const Vector3d & GetVertex(std::size_t index) const
Will return a specific vertex.
Definition: TrapazoidalPrismCollider.cpp:26
+
Eule::TrapazoidalPrismCollider::TOP
static constexpr std::size_t TOP
Definition: TrapazoidalPrismCollider.h:37
+
Eule
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces
+
+
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 0000000..b277e77 Binary files /dev/null and b/Doxygen/build/TrapazoidalPrismCollider_8h__dep__incl.png differ 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 0000000..ccb508b Binary files /dev/null and b/Doxygen/build/TrapazoidalPrismCollider_8h__incl.png differ 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 }
+
+
Eule::TrapazoidalPrismCollider::RIGHT
static constexpr std::size_t RIGHT
Definition: TrapazoidalPrismCollider.h:35
+
Eule::Collider
Abstract class of a collider domain.
Definition: Collider.h:10
+
Eule::TrapazoidalPrismCollider::BACK
static constexpr std::size_t BACK
Definition: TrapazoidalPrismCollider.h:32
+
Eule::Vector3< double >
+
Eule::TrapazoidalPrismCollider::FRONT
static constexpr std::size_t FRONT
Definition: TrapazoidalPrismCollider.h:33
+
Eule::TrapazoidalPrismCollider::BOTTOM
static constexpr std::size_t BOTTOM
Definition: TrapazoidalPrismCollider.h:36
+
Eule::TrapazoidalPrismCollider::operator=
void operator=(const TrapazoidalPrismCollider &other)
Definition: TrapazoidalPrismCollider.cpp:10
+
Eule::TrapazoidalPrismCollider::LEFT
static constexpr std::size_t LEFT
Definition: TrapazoidalPrismCollider.h:34
+
Eule::TrapazoidalPrismCollider::SetVertex
void SetVertex(std::size_t index, const Vector3d value)
Will set the value of a specific vertex.
Definition: TrapazoidalPrismCollider.cpp:31
+
Eule::TrapazoidalPrismCollider::Contains
bool Contains(const Vector3d &point) const override
Tests, if this Collider contains a point.
Definition: TrapazoidalPrismCollider.cpp:103
+
Vector3.h
+
Eule::TrapazoidalPrismCollider
A collider describing a trapazoidal prism.
Definition: TrapazoidalPrismCollider.h:13
+
Eule::TrapazoidalPrismCollider::TrapazoidalPrismCollider
TrapazoidalPrismCollider()
Definition: TrapazoidalPrismCollider.cpp:5
+
Eule::TrapazoidalPrismCollider::GetVertex
const Vector3d & GetVertex(std::size_t index) const
Will return a specific vertex.
Definition: TrapazoidalPrismCollider.cpp:26
+
Collider.h
+
Eule::TrapazoidalPrismCollider::TOP
static constexpr std::size_t TOP
Definition: TrapazoidalPrismCollider.h:37
+
Eule
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 0000000..a8c0654 Binary files /dev/null and b/Doxygen/build/Vector2_8cpp__incl.png differ diff --git a/Doxygen/build/Vector2_8cpp_source.html b/Doxygen/build/Vector2_8cpp_source.html new file mode 100644 index 0000000..0c2eb2a --- /dev/null +++ b/Doxygen/build/Vector2_8cpp_source.html @@ -0,0 +1,802 @@ + + + + + + + +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>
+ +
+
Eule::Vector2::DotProduct
double DotProduct(const Vector2< T > &other) const
Will compute the dot product to another Vector2.
Definition: Vector2.cpp:47
+
Eule::Vector3
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
Math.h
+
Eule::Vector2::ToDouble
Vector2< double > ToDouble() const
Will convert this vector to a Vector2d.
Definition: Vector2.cpp:310
+
Vector2.h
+
Eule::Vector2::NormalizeSelf
void NormalizeSelf()
Will normalize this vector.
Definition: Vector2.cpp:187
+
Vector4.h
+
Eule::Vector2< double >
+
Eule::Vector2::x
T x
Definition: Vector2.h:89
+
Eule::Vector2::y
T y
Definition: Vector2.h:90
+
Vector3.h
+
Eule
Definition: Collider.h:4
+
Eule::Vector2::LerpSelf
void LerpSelf(const Vector2< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector2.cpp:238
+
Eule::Vector4
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces | +Typedefs
+
+
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 0000000..e20c662 Binary files /dev/null and b/Doxygen/build/Vector2_8h__dep__incl.png differ 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 0000000..a9c69d4 Binary files /dev/null and b/Doxygen/build/Vector2_8h__incl.png differ diff --git a/Doxygen/build/Vector2_8h_source.html b/Doxygen/build/Vector2_8h_source.html new file mode 100644 index 0000000..f07acc8 --- /dev/null +++ b/Doxygen/build/Vector2_8h_source.html @@ -0,0 +1,216 @@ + + + + + + + +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 }
+
+
Eule::Vector2::Normalize
Vector2< double > Normalize() const
Will return the normalization of this vector.
Definition: Vector2.cpp:137
+
Eule::Vector2::operator!=
bool operator!=(const Vector2< T > &other) const
Definition: Vector2.cpp:656
+
Eule::Vector2::Vector2
Vector2()
Definition: Vector2.h:17
+
Eule::Vector2::operator+
Vector2< T > operator+(const Vector2< T > &other) const
Definition: Vector2.cpp:346
+
Eule::Vector2::operator+=
void operator+=(const Vector2< T > &other)
Definition: Vector2.cpp:385
+
Eule::Vector2::DotProduct
double DotProduct(const Vector2< T > &other) const
Will compute the dot product to another Vector2.
Definition: Vector2.cpp:47
+
Eule::Vector2::left
static const Vector2< double > left
Definition: Vector2.h:96
+
Eule::Vector2::up
static const Vector2< double > up
Definition: Vector2.h:93
+
Eule::Vector2::Magnitude
double Magnitude() const
Will compute the magnitude.
Definition: Vector2.cpp:90
+
Eule::Vector2::operator*=
void operator*=(const T scale)
Definition: Vector2.cpp:542
+
Eule::Vector2::operator/
Vector2< T > operator/(const T scale) const
Definition: Vector2.cpp:582
+
Eule::Vector2::zero
static const Vector2< double > zero
Definition: Vector2.h:98
+
Eule::Vector2::VectorScale
Vector2< T > VectorScale(const Vector2< T > &scalar) const
Will scale self.n by scalar.n.
Definition: Vector2.cpp:127
+
Eule::Vector2::ToInt
Vector2< int > ToInt() const
Will convert this vector to a Vector2i.
Definition: Vector2.cpp:304
+
Eule::Vector2::Vector2
Vector2(T _x, T _y)
Definition: Vector2.h:18
+
Eule::Vector2::operator[]
T & operator[](std::size_t idx)
Definition: Vector2.cpp:267
+
Eule::Vector2::one
static const Vector2< double > one
Definition: Vector2.h:97
+
Eule::Vector2::operator*
Vector2< T > operator*(const T scale) const
Definition: Vector2.cpp:503
+
Eule::Vector2::operator/=
void operator/=(const T scale)
Definition: Vector2.cpp:620
+
Eule::Vector2::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector2.cpp:83
+
Eule::Vector2::Lerp
Vector2< double > Lerp(const Vector2< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector2.cpp:256
+
Eule::Vector2::CrossProduct
double CrossProduct(const Vector2< T > &other) const
Will compute the cross product to another Vector2.
Definition: Vector2.cpp:65
+
Eule::Vector2::ToDouble
Vector2< double > ToDouble() const
Will convert this vector to a Vector2d.
Definition: Vector2.cpp:310
+
Eule::Vector2::NormalizeSelf
void NormalizeSelf()
Will normalize this vector.
Definition: Vector2.cpp:187
+
Eule::Vector2::operator-
Vector2< T > operator-() const
Definition: Vector2.cpp:662
+
Eule::Vector2::operator<<
friend std::ostream & operator<<(std::ostream &os, const Vector2< T > &v)
Definition: Vector2.h:80
+
Eule::Vector2
Representation of a 2d vector.
Definition: Vector2.h:14
+
Eule::Vector2d
Vector2< double > Vector2d
Definition: Vector2.h:102
+
Eule::Vector2::operator=
void operator=(const Vector2< T > &other)
Conversion method.
Definition: Vector2.cpp:630
+
Eule::Vector2::x
T x
Definition: Vector2.h:89
+
Eule::Vector2::y
T y
Definition: Vector2.h:90
+
Eule::Vector2::Similar
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
+
Eule::Vector2::right
static const Vector2< double > right
Definition: Vector2.h:95
+
Eule::Vector2::operator-=
void operator-=(const Vector2< T > &other)
Definition: Vector2.cpp:463
+
Eule::Vector2::down
static const Vector2< double > down
Definition: Vector2.h:94
+
Eule::Vector2::operator==
bool operator==(const Vector2< T > &other) const
Definition: Vector2.cpp:648
+
Eule
Definition: Collider.h:4
+
Eule::Vector2::LerpSelf
void LerpSelf(const Vector2< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector2.cpp:238
+
Eule::Vector4
Representation of a 4d vector.
Definition: Vector2.h:8
+
Eule::Vector2i
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 0000000..b1b1b90 Binary files /dev/null and b/Doxygen/build/Vector3_8cpp__incl.png differ 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);
+
+
Eule::Vector3::LerpSelf
void LerpSelf(const Vector3< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector3.cpp:311
+
Eule::Vector3< double >
+
Eule::Vector3::ToDouble
Vector3< double > ToDouble() const
Will convert this vector to a Vector3d.
Definition: Vector3.cpp:229
+
Math.h
+
Vector2.h
+
Eule::Vector3::z
T z
Definition: Vector3.h:96
+
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Eule::Vector3::x
T x
Definition: Vector3.h:94
+
Vector4.h
+
Eule::Vector2
Representation of a 2d vector.
Definition: Vector2.h:14
+
Eule::Vector3::DotProduct
double DotProduct(const Vector3< T > &other) const
Will compute the dot product to another Vector3.
Definition: Vector3.cpp:48
+
Vector3.h
+
Eule::Vector3::NormalizeSelf
void NormalizeSelf()
Will normalize this vector.
Definition: Vector3.cpp:200
+
Eule
Definition: Collider.h:4
+
Eule::Vector3::y
T y
Definition: Vector3.h:95
+
Eule::Vector4
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces | +Typedefs
+
+
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 0000000..4424eec Binary files /dev/null and b/Doxygen/build/Vector3_8h__dep__incl.png differ 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 0000000..a5d5466 Binary files /dev/null and b/Doxygen/build/Vector3_8h__incl.png differ diff --git a/Doxygen/build/Vector3_8h_source.html b/Doxygen/build/Vector3_8h_source.html new file mode 100644 index 0000000..1d6b48d --- /dev/null +++ b/Doxygen/build/Vector3_8h_source.html @@ -0,0 +1,227 @@ + + + + + + + +Leonetienne/Eule: Eule/Vector3.h Source File + + + + + + + + + + + +
+
+ + + + + + +
+
Leonetienne/Eule +
+
Homemade math library, mainly targetted towards computer graphics
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
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 }
+
+
Eule::Vector3::operator+
Vector3< T > operator+(const Vector3< T > &other) const
Definition: Vector3.cpp:372
+
Eule::Vector3::right
static const Vector3< double > right
Definition: Vector3.h:101
+
Eule::Vector3::operator<<
friend std::ostream & operator<<(std::ostream &os, const Vector3< T > &v)
Definition: Vector3.h:85
+
Eule::Vector3::LerpSelf
void LerpSelf(const Vector3< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector3.cpp:311
+
Eule::Vector3::CrossProduct
Vector3< double > CrossProduct(const Vector3< T > &other) const
Will compute the cross product to another Vector3.
Definition: Vector3.cpp:68
+
Eule::Vector3::left
static const Vector3< double > left
Definition: Vector3.h:102
+
Eule::Vector3::Similar
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
+
Eule::Vector3
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
Eule::Vector3::Vector3
Vector3(T _x, T _y, T _z)
Definition: Vector3.h:21
+
Eule::Vector3::operator-
Vector3< T > operator-() const
Definition: Vector3.cpp:806
+
Eule::Vector3::down
static const Vector3< double > down
Definition: Vector3.h:100
+
Eule::Vector3::Lerp
Vector3< double > Lerp(const Vector3< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector3.cpp:330
+
Eule::Vector3::forward
static const Vector3< double > forward
Definition: Vector3.h:103
+
Eule::Vector3::one
static const Vector3< double > one
Definition: Vector3.h:105
+
Eule::Vector3::operator=
void operator=(const Vector3< T > &other)
Conversion method.
Definition: Vector3.cpp:816
+
Eule::Vector3::ToDouble
Vector3< double > ToDouble() const
Will convert this vector to a Vector3d.
Definition: Vector3.cpp:229
+
Eule::Vector3::ToInt
Vector3< int > ToInt() const
Will convert this vector to a Vector3i.
Definition: Vector3.cpp:223
+
Eule::Vector3::operator==
bool operator==(const Vector3< T > &other) const
Definition: Vector3.cpp:855
+
Eule::Vector3::operator*=
void operator*=(const T scale)
Definition: Vector3.cpp:583
+
Eule::Vector3::Vector3
Vector3()
Definition: Vector3.h:20
+
Eule::Vector3d
Vector3< double > Vector3d
Definition: Matrix4x4.h:9
+
Matrix4x4.h
+
Eule::Vector3i
Vector3< int > Vector3i
Definition: Vector3.h:109
+
Eule::Vector3::backward
static const Vector3< double > backward
Definition: Vector3.h:104
+
Eule::Vector3::Normalize
Vector3< double > Normalize() const
Will return the normalization of this vector.
Definition: Vector3.cpp:147
+
Eule::Vector3::z
T z
Definition: Vector3.h:96
+
Eule::Vector3::up
static const Vector3< double > up
Definition: Vector3.h:99
+
Eule::Vector3::operator[]
T & operator[](std::size_t idx)
Definition: Vector3.cpp:235
+
Eule::Vector3::x
T x
Definition: Vector3.h:94
+
Eule::Vector3::DotProduct
double DotProduct(const Vector3< T > &other) const
Will compute the dot product to another Vector3.
Definition: Vector3.cpp:48
+
Eule::Vector3::operator/
Vector3< T > operator/(const T scale) const
Definition: Vector3.cpp:626
+
Eule::Vector3::operator-=
void operator-=(const Vector3< T > &other)
Definition: Vector3.cpp:498
+
Eule::Vector3::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector3.cpp:88
+
Eule::Vector3::operator/=
void operator/=(const T scale)
Definition: Vector3.cpp:667
+
Eule::Vector3::operator!=
bool operator!=(const Vector3< T > &other) const
Definition: Vector3.cpp:864
+
Eule::Vector3::operator+=
void operator+=(const Vector3< T > &other)
Definition: Vector3.cpp:414
+
Eule::Vector3::Magnitude
double Magnitude() const
Will compute the magnitude.
Definition: Vector3.cpp:95
+
Eule::Vector3::NormalizeSelf
void NormalizeSelf()
Will normalize this vector.
Definition: Vector3.cpp:200
+
Eule::Vector3::operator*
Vector3< T > operator*(const T scale) const
Definition: Vector3.cpp:541
+
Eule::Vector3::zero
static const Vector3< double > zero
Definition: Vector3.h:106
+
Eule
Definition: Collider.h:4
+
Eule::Vector3::y
T y
Definition: Vector3.h:95
+
Eule::Vector3::VectorScale
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 0000000..25b7995 Binary files /dev/null and b/Doxygen/build/Vector4_8cpp__incl.png differ 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);
+
+
Eule::Vector4::NormalizeSelf
void NormalizeSelf()
Will normalize this vector.
Definition: Vector4.cpp:148
+
Eule::Vector3
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
Eule::Vector4::x
T x
Definition: Vector4.h:88
+
Eule::Vector4::z
T z
Definition: Vector4.h:90
+
Math.h
+
Eule::Vector4::LerpSelf
void LerpSelf(const Vector4< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector4.cpp:267
+
Eule::Vector4::w
T w
Definition: Vector4.h:91
+
Vector2.h
+
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Eule::Vector4::ToDouble
Vector4< double > ToDouble() const
Will convert this vector to a Vector4d.
Definition: Vector4.cpp:179
+
Vector4.h
+
Eule::Vector2
Representation of a 2d vector.
Definition: Vector2.h:14
+
Eule::Vector4::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+
Vector3.h
+
Eule::Vector4::y
T y
Definition: Vector4.h:89
+
Eule
Definition: Collider.h:4
+
Eule::Vector4
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Namespaces | +Typedefs
+
+
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 0000000..a5df998 Binary files /dev/null and b/Doxygen/build/Vector4_8h__dep__incl.png differ diff --git a/Doxygen/build/Vector4_8h__incl.map b/Doxygen/build/Vector4_8h__incl.map new file mode 100644 index 0000000..5701859 --- /dev/null +++ b/Doxygen/build/Vector4_8h__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + 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 0000000..8d771f7 Binary files /dev/null and b/Doxygen/build/Vector4_8h__incl.png differ 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 }
+
+
Eule::Vector4::ToInt
Vector4< int > ToInt() const
Will convert this vector to a Vector4i.
Definition: Vector4.cpp:173
+
Eule::Vector4::Vector4
Vector4(T _x, T _y, T _z, T _w)
Definition: Vector4.h:21
+
Eule::Vector4::operator+=
void operator+=(const Vector4< T > &other)
Definition: Vector4.cpp:376
+
Eule::Vector4::operator/
Vector4< T > operator/(const T scale) const
Definition: Vector4.cpp:603
+
Eule::Vector4::operator*
Vector4< T > operator*(const T scale) const
Definition: Vector4.cpp:512
+
Eule::Vector4::NormalizeSelf
void NormalizeSelf()
Will normalize this vector.
Definition: Vector4.cpp:148
+
Eule::Vector4::Vector4
Vector4()
Definition: Vector4.h:20
+
Eule::Vector4::backward
static const Vector4< double > backward
Definition: Vector4.h:99
+
Eule::Vector4::x
T x
Definition: Vector4.h:88
+
Eule::Vector4::operator=
void operator=(const Vector4< T > &other)
Conversion method.
Definition: Vector4.cpp:730
+
Eule::Vector4::operator-=
void operator-=(const Vector4< T > &other)
Definition: Vector4.cpp:466
+
Eule::Vector4::Normalize
Vector4< double > Normalize() const
Will return the normalization of this vector.
Definition: Vector4.cpp:92
+
Eule::Vector4::z
T z
Definition: Vector4.h:90
+
Eule::Vector4::operator*=
void operator*=(const T scale)
Definition: Vector4.cpp:557
+
Eule::Vector4d
Vector4< double > Vector4d
Definition: Vector4.h:107
+
Eule::Vector4::VectorScale
Vector4< T > VectorScale(const Vector4< T > &scalar) const
Will scale self.n by scalar.n.
Definition: Vector4.cpp:79
+
Eule::Vector4::operator-
Vector4< T > operator-() const
Definition: Vector4.cpp:719
+
Eule::Vector4::Lerp
Vector4< double > Lerp(const Vector4< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector4.cpp:287
+
Eule::Vector4::one
static const Vector4< double > one
Definition: Vector4.h:102
+
Eule::Vector4::LerpSelf
void LerpSelf(const Vector4< T > &other, double t)
Will lerp itself towards other by t.
Definition: Vector4.cpp:267
+
Matrix4x4.h
+
Eule::Vector4::forward
static const Vector4< double > forward
Definition: Vector4.h:98
+
Eule::Vector4::operator/=
void operator/=(const T scale)
Definition: Vector4.cpp:647
+
Eule::Vector4::w
T w
Definition: Vector4.h:91
+
Eule::Vector4::down
static const Vector4< double > down
Definition: Vector4.h:95
+
Eule::Vector4::operator+
Vector4< T > operator+(const Vector4< T > &other) const
Definition: Vector4.cpp:331
+
Eule::Vector4::operator[]
T & operator[](std::size_t idx)
Definition: Vector4.cpp:185
+
Eule::Vector4::ToDouble
Vector4< double > ToDouble() const
Will convert this vector to a Vector4d.
Definition: Vector4.cpp:179
+
Eule::Vector4i
Vector4< int > Vector4i
Definition: Vector4.h:106
+
Eule::Vector4::operator!=
bool operator!=(const Vector4< T > &other) const
Definition: Vector4.cpp:767
+
Eule::Vector4::Similar
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
+
Eule::Vector4::Magnitude
double Magnitude() const
Will compute the magnitude.
Definition: Vector4.cpp:38
+
Eule::Vector4::future
static const Vector4< double > future
Definition: Vector4.h:100
+
Eule::Vector4::operator==
bool operator==(const Vector4< T > &other) const
Definition: Vector4.cpp:659
+
Eule::Vector4::zero
static const Vector4< double > zero
Definition: Vector4.h:103
+
Eule::Vector4::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+
Eule::Vector4::up
static const Vector4< double > up
Definition: Vector4.h:94
+
Eule::Vector4::past
static const Vector4< double > past
Definition: Vector4.h:101
+
Eule::Vector4::operator<<
friend std::ostream & operator<<(std::ostream &os, const Vector4< T > &v)
Definition: Vector4.h:79
+
Eule::Vector4::y
T y
Definition: Vector4.h:89
+
Eule::Vector4::left
static const Vector4< double > left
Definition: Vector4.h:97
+
Eule
Definition: Collider.h:4
+
Eule::Vector4::right
static const Vector4< double > right
Definition: Vector4.h:96
+
Eule::Vector4
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 0000000..224b29a Binary files /dev/null and b/Doxygen/build/bc_s.png differ diff --git a/Doxygen/build/bdwn.png b/Doxygen/build/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/Doxygen/build/bdwn.png differ diff --git a/Doxygen/build/classEule_1_1Collider-members.html b/Doxygen/build/classEule_1_1Collider-members.html new file mode 100644 index 0000000..dc5d151 --- /dev/null +++ b/Doxygen/build/classEule_1_1Collider-members.html @@ -0,0 +1,92 @@ + + + + + + + +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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
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 0000000..0e2e735 Binary files /dev/null and b/Doxygen/build/classEule_1_1Collider__inherit__graph.png differ 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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Static Public Member Functions | +List of all members
+
+
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: +
+
MAKE_SURE_RNG_IS_INITIALIZED
#define MAKE_SURE_RNG_IS_INITIALIZED
Definition: Math.cpp:8
+
PI
#define PI
Pi up to 50 decimal places.
Definition: Constants.h:6
+
HALF_PI
#define HALF_PI
Pi divided by two.
Definition: Constants.h:9
+
Eule::Math::Max
static constexpr double Max(const double a, const double b)
Will return the bigger of two values.
Definition: Math.h:71
+
Eule::Math::Min
static constexpr double Min(const double a, const double b)
Will return the smaller of two values.
Definition: Math.h:76
+
Eule::Math::Random
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Public Attributes | +Friends | +List of all members
+
+
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: +
+
Eule::Matrix4x4::j
double & j
Definition: Matrix4x4.h:137
+
Eule::Matrix4x4::Adjoint
Matrix4x4 Adjoint(std::size_t n) const
Will return the adjoint of this matrix, by dimension n.
Definition: Matrix4x4.cpp:533
+
Eule::Matrix4x4::operator==
bool operator==(const Matrix4x4 &other)
Definition: Matrix4x4.cpp:397
+
Eule::Matrix4x4::i
double & i
Definition: Matrix4x4.h:136
+
Eule::Matrix4x4::e
double & e
Definition: Matrix4x4.h:132
+
Eule::Matrix4x4::f
double & f
Definition: Matrix4x4.h:133
+
Eule::Matrix4x4::Inverse3x3
Matrix4x4 Inverse3x3() const
Will return the 3x3-inverse of this matrix.
Definition: Matrix4x4.cpp:558
+
Eule::Matrix4x4::k
double & k
Definition: Matrix4x4.h:138
+
Eule::Matrix4x4::v
std::array< std::array< double, 4 >, 4 > v
Array holding the matrices values.
Definition: Matrix4x4.h:44
+
Eule::Vector3d
Vector3< double > Vector3d
Definition: Matrix4x4.h:9
+
Eule::Vector3::z
T z
Definition: Vector3.h:96
+
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Eule::Matrix4x4::b
double & b
Definition: Matrix4x4.h:129
+
Eule::Matrix4x4::g
double & g
Definition: Matrix4x4.h:134
+
Eule::Vector3::x
T x
Definition: Vector3.h:94
+
Eule::Matrix4x4::p
double & p
Definition: Matrix4x4.h:143
+
Eule::Matrix4x4::l
double & l
Definition: Matrix4x4.h:139
+
Eule::Matrix4x4::Determinant
double Determinant(std::size_t n) const
Will return the determinant, by dimension n.
Definition: Matrix4x4.cpp:511
+
Eule::Math::Similar
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
Eule::Matrix4x4::SetTranslationComponent
void SetTranslationComponent(const Vector3d &trans)
Will set d,h,l from a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:412
+
Eule::Matrix4x4::c
double & c
Definition: Matrix4x4.h:130
+
Eule::Matrix4x4::o
double & o
Definition: Matrix4x4.h:142
+
Eule::Matrix4x4::a
double & a
Definition: Matrix4x4.h:128
+
Eule::Matrix4x4::m
double & m
Definition: Matrix4x4.h:140
+
Eule::Matrix4x4::GetCofactors
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
+
Eule::Matrix4x4::GetTranslationComponent
const Vector3d GetTranslationComponent() const
Will return d,h,l as a Vector3d(x,y,z)
Definition: Matrix4x4.cpp:407
+
Eule::Matrix4x4::n
double & n
Definition: Matrix4x4.h:141
+
Eule::Matrix4x4::h
double & h
Definition: Matrix4x4.h:135
+
Eule::Matrix4x4::d
double & d
Definition: Matrix4x4.h:131
+
Eule::Vector3::y
T y
Definition: Vector3.h:95
+ + + + 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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Friends | +List of all members
+
+
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: +
+
Eule::Matrix4x4::j
double & j
Definition: Matrix4x4.h:137
+
Eule::Matrix4x4::i
double & i
Definition: Matrix4x4.h:136
+
Eule::Vector3< double >
+
Eule::Vector4::x
T x
Definition: Vector4.h:88
+
Eule::Matrix4x4::e
double & e
Definition: Matrix4x4.h:132
+
Eule::Vector4::z
T z
Definition: Vector4.h:90
+
Eule::Vector4d
Vector4< double > Vector4d
Definition: Vector4.h:107
+
PI
#define PI
Pi up to 50 decimal places.
Definition: Constants.h:6
+
Deg2Rad
#define Deg2Rad
Factor to convert degrees to radians.
Definition: Constants.h:12
+
Eule::Matrix4x4::f
double & f
Definition: Matrix4x4.h:133
+
Eule::Matrix4x4::k
double & k
Definition: Matrix4x4.h:138
+
Eule::Vector4::Lerp
Vector4< double > Lerp(const Vector4< T > &other, double t) const
Will return a lerp result between this and another vector.
Definition: Vector4.cpp:287
+
Eule::Vector4::w
T w
Definition: Vector4.h:91
+
Eule::Vector3::z
T z
Definition: Vector3.h:96
+
Eule::Matrix4x4
A matrix 4x4 class representing a 3d transformation.
Definition: Matrix4x4.h:36
+
Eule::Vector4::Similar
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
+
Eule::Matrix4x4::b
double & b
Definition: Matrix4x4.h:129
+
Eule::Vector4::Magnitude
double Magnitude() const
Will compute the magnitude.
Definition: Vector4.cpp:38
+
Eule::Matrix4x4::g
double & g
Definition: Matrix4x4.h:134
+
Eule::Vector3::x
T x
Definition: Vector3.h:94
+
Eule::Matrix4x4::p
double & p
Definition: Matrix4x4.h:143
+
Eule::Quaternion::RotateVector
Vector3d RotateVector(const Vector3d &vec) const
Will rotate a vector by this quaternion.
Definition: Quaternion.cpp:197
+
Eule::Vector4::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+
Eule::Quaternion::Quaternion
Quaternion()
Definition: Quaternion.cpp:11
+
Eule::Quaternion::Conjugate
Quaternion Conjugate() const
Definition: Quaternion.cpp:187
+
Eule::Quaternion::Inverse
Quaternion Inverse() const
Definition: Quaternion.cpp:175
+
Eule::Matrix4x4::c
double & c
Definition: Matrix4x4.h:130
+
Eule::Quaternion
3D rotation representation
Definition: Quaternion.h:10
+
Eule::Matrix4x4::a
double & a
Definition: Matrix4x4.h:128
+
Rad2Deg
#define Rad2Deg
Factor to convert radians to degrees.
Definition: Constants.h:15
+
Eule::Vector4::y
T y
Definition: Vector4.h:89
+
Eule::Vector3::y
T y
Definition: Vector3.h:95
+
Eule::Vector4
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Static Public Attributes | +List of all members
+
+
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 0000000..3620945 Binary files /dev/null and b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__coll__graph.png differ diff --git a/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.map b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.map new file mode 100644 index 0000000..399a8f0 --- /dev/null +++ b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.map @@ -0,0 +1,4 @@ + + + + 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 0000000..3620945 Binary files /dev/null and b/Doxygen/build/classEule_1_1TrapazoidalPrismCollider__inherit__graph.png differ diff --git a/Doxygen/build/classEule_1_1Vector2-members.html b/Doxygen/build/classEule_1_1Vector2-members.html new file mode 100644 index 0000000..ce6b090 --- /dev/null +++ b/Doxygen/build/classEule_1_1Vector2-members.html @@ -0,0 +1,134 @@ + + + + + + + +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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Public Attributes | +Static Public Attributes | +Friends | +List of all members
+
+
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: +
+
Eule::Vector3
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
Eule::Vector2::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector2.cpp:83
+
Eule::Vector2::ToDouble
Vector2< double > ToDouble() const
Will convert this vector to a Vector2d.
Definition: Vector2.cpp:310
+
Eule::Vector2< double >
+
Eule::Vector2::x
T x
Definition: Vector2.h:89
+
Eule::Vector2::y
T y
Definition: Vector2.h:90
+
Eule::Math::Similar
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
Eule::Vector2::operator==
bool operator==(const Vector2< T > &other) const
Definition: Vector2.cpp:648
+
Eule::Vector4
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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Public Attributes | +Static Public Attributes | +Friends | +List of all members
+
+
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: +
+
Eule::Vector3< double >
+
Eule::Vector3::ToDouble
Vector3< double > ToDouble() const
Will convert this vector to a Vector3d.
Definition: Vector3.cpp:229
+
Eule::Vector3::operator==
bool operator==(const Vector3< T > &other) const
Definition: Vector3.cpp:855
+
Eule::Vector3::z
T z
Definition: Vector3.h:96
+
Eule::Vector3::x
T x
Definition: Vector3.h:94
+
Eule::Vector2
Representation of a 2d vector.
Definition: Vector2.h:14
+
Eule::Vector3::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector3.cpp:88
+
Eule::Math::Similar
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
Eule::Vector3::y
T y
Definition: Vector3.h:95
+
Eule::Vector4
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 0000000..2a8937b Binary files /dev/null and b/Doxygen/build/classEule_1_1Vector3__coll__graph.png differ 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
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +Public Attributes | +Static Public Attributes | +Friends | +List of all members
+
+
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: +
+
Eule::Vector3
Representation of a 3d vector.
Definition: Matrix4x4.h:9
+
Eule::Vector4::x
T x
Definition: Vector4.h:88
+
Eule::Vector4::z
T z
Definition: Vector4.h:90
+
Eule::Vector4::w
T w
Definition: Vector4.h:91
+
Eule::Vector4::ToDouble
Vector4< double > ToDouble() const
Will convert this vector to a Vector4d.
Definition: Vector4.cpp:179
+
Eule::Vector2
Representation of a 2d vector.
Definition: Vector2.h:14
+
Eule::Vector4::operator==
bool operator==(const Vector4< T > &other) const
Definition: Vector4.cpp:659
+
Eule::Vector4::SqrMagnitude
double SqrMagnitude() const
Will compute the square magnitude.
Definition: Vector4.cpp:31
+
Eule::Math::Similar
static constexpr bool Similar(const double a, const double b, const double epsilon=0.00001)
Compares two double values with a given accuracy.
+
Eule::Vector4::y
T y
Definition: Vector4.h:89
+
Eule::Vector4< double >
+ + + + 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 0000000..fe84cea Binary files /dev/null and b/Doxygen/build/classEule_1_1Vector4__coll__graph.png differ diff --git a/Doxygen/build/classes.html b/Doxygen/build/classes.html new file mode 100644 index 0000000..3884a99 --- /dev/null +++ b/Doxygen/build/classes.html @@ -0,0 +1,117 @@ + + + + + + + +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 0000000..98cc2c9 Binary files /dev/null and b/Doxygen/build/closed.png differ 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 0000000..17edabf Binary files /dev/null and b/Doxygen/build/doc.png differ 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 0000000..3ff17d8 Binary files /dev/null and b/Doxygen/build/doxygen.png differ 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 0000000..bb8ab35 Binary files /dev/null and b/Doxygen/build/folderclosed.png differ diff --git a/Doxygen/build/folderopen.png b/Doxygen/build/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/Doxygen/build/folderopen.png differ 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:

+ +

The arrows have the following meaning:

+ +
+ + + + 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 0000000..7e2cbcf Binary files /dev/null and b/Doxygen/build/graph_legend.png differ 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 0000000..3d3407f Binary files /dev/null and b/Doxygen/build/inherit_graph_0.png differ diff --git a/Doxygen/build/inherit_graph_1.map b/Doxygen/build/inherit_graph_1.map new file mode 100644 index 0000000..3819e40 --- /dev/null +++ b/Doxygen/build/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + 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 0000000..0c7dd1a Binary files /dev/null and b/Doxygen/build/inherit_graph_1.png differ 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 0000000..dac0139 Binary files /dev/null and b/Doxygen/build/inherit_graph_10.png differ 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 0000000..b5f1e4c Binary files /dev/null and b/Doxygen/build/inherit_graph_2.png differ diff --git a/Doxygen/build/inherit_graph_3.map b/Doxygen/build/inherit_graph_3.map new file mode 100644 index 0000000..00d562a --- /dev/null +++ b/Doxygen/build/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + 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 0000000..98925f5 Binary files /dev/null and b/Doxygen/build/inherit_graph_3.png differ diff --git a/Doxygen/build/inherit_graph_4.map b/Doxygen/build/inherit_graph_4.map new file mode 100644 index 0000000..bc2ad07 --- /dev/null +++ b/Doxygen/build/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + 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 0000000..b4259b1 Binary files /dev/null and b/Doxygen/build/inherit_graph_4.png differ 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 0000000..d5c92c8 Binary files /dev/null and b/Doxygen/build/inherit_graph_5.png differ diff --git a/Doxygen/build/inherit_graph_6.map b/Doxygen/build/inherit_graph_6.map new file mode 100644 index 0000000..68566a6 --- /dev/null +++ b/Doxygen/build/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + 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 0000000..432d70c Binary files /dev/null and b/Doxygen/build/inherit_graph_6.png differ 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 0000000..f6283ce Binary files /dev/null and b/Doxygen/build/inherit_graph_7.png differ 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 0000000..1b5d9a6 Binary files /dev/null and b/Doxygen/build/inherit_graph_8.png differ 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 0000000..a0707c5 Binary files /dev/null and b/Doxygen/build/inherit_graph_9.png differ diff --git a/Doxygen/build/inherits.html b/Doxygen/build/inherits.html new file mode 100644 index 0000000..b86a1eb --- /dev/null +++ b/Doxygen/build/inherits.html @@ -0,0 +1,144 @@ + + + + + + + +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 0000000..72a58a5 Binary files /dev/null and b/Doxygen/build/nav_f.png differ diff --git a/Doxygen/build/nav_g.png b/Doxygen/build/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/Doxygen/build/nav_g.png differ diff --git a/Doxygen/build/nav_h.png b/Doxygen/build/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/Doxygen/build/nav_h.png differ diff --git a/Doxygen/build/open.png b/Doxygen/build/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/Doxygen/build/open.png differ diff --git a/Doxygen/build/search/all_0.html b/Doxygen/build/search/all_0.html new file mode 100644 index 0000000..26dd244 --- /dev/null +++ b/Doxygen/build/search/all_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    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 0000000..9342d3d Binary files /dev/null and b/Doxygen/build/search/close.png differ 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 0000000..39c0ed5 Binary files /dev/null and b/Doxygen/build/search/mag_sel.png differ 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 + + + + + + + + +
    +
    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 0000000..fe895f2 Binary files /dev/null and b/Doxygen/build/splitbar.png differ 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 0000000..4131c5b Binary files /dev/null and b/Doxygen/build/structEule_1_1Rect__coll__graph.png differ diff --git a/Doxygen/build/sync_off.png b/Doxygen/build/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/Doxygen/build/sync_off.png differ diff --git a/Doxygen/build/sync_on.png b/Doxygen/build/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/Doxygen/build/sync_on.png differ diff --git a/Doxygen/build/tab_a.png b/Doxygen/build/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/Doxygen/build/tab_a.png differ diff --git a/Doxygen/build/tab_b.png b/Doxygen/build/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/Doxygen/build/tab_b.png differ diff --git a/Doxygen/build/tab_h.png b/Doxygen/build/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/Doxygen/build/tab_h.png differ diff --git a/Doxygen/build/tab_s.png b/Doxygen/build/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/Doxygen/build/tab_s.png differ 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 +# , /