🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Math.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/MathDegree.hpp"
25#include "AstUtil/Constants.h"
26#include <cmath>
27#include <algorithm>
28
29AST_NAMESPACE_BEGIN
30
37#ifdef A_GCC // GCC 内建 sincos 函数
38// #pragma message("Using GCC built-in sincos function")
39using ::sincos;
40
41#else
42
47A_ALWAYS_INLINE void sincos (double x, double *psin, double *pcos)
48{
49 *psin = sin(x);
50 *pcos = cos(x);
51}
52
53#endif
54
55
57class SinCos {
58public:
59 A_ALWAYS_INLINE
60 double sin() const { return sin_; }
61 A_ALWAYS_INLINE
62 double& sin() { return sin_; }
63 A_ALWAYS_INLINE
64 double cos() const { return cos_; }
65 A_ALWAYS_INLINE
66 double& cos() { return cos_; }
67public:
68 double sin_;
69 double cos_;
70};
71
72
76A_ALWAYS_INLINE SinCos sincos(double x)
77{
78 SinCos sc;
79 sincos(x, &sc.sin_, &sc.cos_);
80 return sc;
81}
82
83
84
86template<typename Scalar>
87Scalar aMax(Scalar a, Scalar b)
88{
89 return a > b ? a : b;
90}
91
93template<typename Scalar>
94Scalar aMin(Scalar a, Scalar b)
95{
96 return a < b ? a : b;
97}
98
99using std::max;
100using std::min;
101
102
107A_ALWAYS_INLINE double aNormalizeAngleStart(double angle, double start)
108{
109 return angle - floor((angle + start) / kTwoPI) * kTwoPI;
110}
111
112
117A_ALWAYS_INLINE double aNormalizeAngle(double angle, double center)
118{
119 return aNormalizeAngleStart(angle, center - kPI);
120}
121
122
126A_ALWAYS_INLINE double aNormalizeAngle0To2Pi(double angle)
127{
128 return aNormalizeAngleStart(angle, 0);
129}
130
134A_ALWAYS_INLINE double aNormalizeAngleNegPiToPi(double angle)
135{
136 return aNormalizeAngleStart(angle, -kPI);
137}
138
142A_ALWAYS_INLINE double aNormalizeAngleNeg2PiTo0(double angle)
143{
144 return aNormalizeAngleStart(angle, -kTwoPI);
145}
146
149AST_NAMESPACE_END
包含 sin(x) 和 cos(x) 值的结构体
定义 Math.hpp:57
constexpr double kTwoPI
2*PI
定义 Constants.h:54
A_ALWAYS_INLINE double aNormalizeAngle0To2Pi(double angle)
将角度量规范化到 0 到 2π 范围
定义 Math.hpp:126
A_ALWAYS_INLINE double aNormalizeAngleNegPiToPi(double angle)
将角度量规范化到 -π 到 π 范围
定义 Math.hpp:134
Scalar aMax(Scalar a, Scalar b)
计算两个数中的较大值
定义 Math.hpp:87
constexpr double kPI
PI
定义 Constants.h:53
A_ALWAYS_INLINE double aNormalizeAngleNeg2PiTo0(double angle)
将角度量规范化到 -2π 到 0 范围
定义 Math.hpp:142
Scalar aMin(Scalar a, Scalar b)
计算两个数中的较小值
定义 Math.hpp:94
A_ALWAYS_INLINE double aNormalizeAngleStart(double angle, double start)
将角度量规范化到指定起始范围
定义 Math.hpp:107
A_ALWAYS_INLINE double aNormalizeAngle(double angle, double center)
将角度量规范化到指定中心范围
定义 Math.hpp:117
A_ALWAYS_INLINE void sincos(double x, double *psin, double *pcos)
计算 sin(x) 和 cos(x) 值
定义 Math.hpp:47