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