]> git.mxchange.org Git - flightgear.git/blob - src/FDM/YASim/Math.hpp
David Megginson writes:
[flightgear.git] / src / FDM / YASim / Math.hpp
1 #ifndef _MATH_HPP
2 #define _MATH_HPP
3
4 namespace yasim {
5
6 class Math
7 {
8 public:
9     // Dumb utilities
10     static float clamp(float val, float min, float max);
11
12     // Simple wrappers around library routines
13     static float abs(float f);
14     static float sqrt(float f);
15     static float pow(float base, float exp);
16     static float ceil(float f);
17     static float sin(float f);
18     static float cos(float f);
19     static float tan(float f);
20     static float atan2(float y, float x);
21
22     // double variants of the above
23     static double abs(double f);
24     static double sqrt(double f);
25     static double pow(double base, double exp);
26     static double ceil(double f);
27     static double sin(double f);
28     static double cos(double f);
29     static double tan(double f);
30     static double atan2(double y, double x);
31
32     // Some 3D vector stuff.  In all cases, it is permissible for the
33     // "out" vector to be the same as one of the inputs.
34     static void  set3(float* v, float* out);
35     static float dot3(float* a, float* b);
36     static void  cross3(float* a, float* b, float* out);
37     static void  mul3(float scalar, float* v, float* out);
38     static void  add3(float* a, float* b, float* out);
39     static void  sub3(float* a, float* b, float* out);
40     static float mag3(float* v);
41     static void  unit3(float* v, float* out);
42
43     // Matrix array convention: 0 1 2
44     //                          3 4 5
45     //                          6 7 8
46
47     // Multiply two matrices
48     static void mmul33(float* a, float* b, float* out);
49
50     // Multiply by vector
51     static void vmul33(float* m, float* v, float* out);
52
53     // Multiply the vector by the matrix transpose.  Or pre-multiply the
54     // matrix by v as a row vector.  Same thing.
55     static void tmul33(float* m, float* v, float* out);
56
57     // Invert matrix
58     static void invert33(float* m, float* out);
59
60     // Transpose matrix (for an orthonormal orientation matrix, this
61     // is the same as the inverse).
62     static void trans33(float* m, float* out);
63
64     // Generates an orthonormal basis:
65     //   xOut becomes the unit vector in the direction of x
66     //   yOut is perpendicular to xOut in the x/y plane
67     //   zOut becomes the unit vector: (xOut cross yOut)
68     static void ortho33(float* x, float* y,
69                         float* xOut, float* yOut, float* zOut);
70 };
71
72 }; // namespace yasim
73 #endif // _MATH_HPP