90 lines
2.3 KiB
C++
90 lines
2.3 KiB
C++
#ifndef HSM_ALTITUDE_CALCULATOR_HPP
|
||
#define HSM_ALTITUDE_CALCULATOR_HPP
|
||
|
||
#include <cstdint>
|
||
|
||
/**
|
||
* @brief 高度计算器类
|
||
*
|
||
* 负责根据气压值计算海拔高度,支持:
|
||
* 1. 气压到高度的转换
|
||
* 2. 海平面气压校准
|
||
* 3. 相对高度计算
|
||
* 4. 单位转换
|
||
*/
|
||
class AltitudeCalculator {
|
||
public:
|
||
/**
|
||
* @brief 构造函数
|
||
* @param sea_level_pressure 海平面气压值(hPa)
|
||
*/
|
||
explicit AltitudeCalculator(float sea_level_pressure = 1013.25f);
|
||
|
||
/**
|
||
* @brief 根据气压计算海拔高度
|
||
* @param pressure 当前气压值(hPa)
|
||
* @return 计算出的海拔高度(米)
|
||
*/
|
||
float calculateAltitude(float pressure) const;
|
||
|
||
/**
|
||
* @brief 计算相对高度
|
||
* @param current_altitude 当前海拔高度
|
||
* @param base_altitude 基准高度
|
||
* @return 相对高度(米)
|
||
*/
|
||
static float calculateRelativeHeight(float current_altitude, float base_altitude);
|
||
|
||
/**
|
||
* @brief 设置新的海平面气压值
|
||
* @param pressure 海平面气压值(hPa)
|
||
*/
|
||
void setSeaLevelPressure(float pressure);
|
||
|
||
/**
|
||
* @brief 获取当前海平面气压值
|
||
* @return 海平面气压值(hPa)
|
||
*/
|
||
float getSeaLevelPressure() const { return sea_level_pressure_; }
|
||
|
||
/**
|
||
* @brief 米转英尺
|
||
* @param meters 米值
|
||
* @return 英尺值
|
||
*/
|
||
static float metersToFeet(float meters);
|
||
|
||
/**
|
||
* @brief 英尺转米
|
||
* @param feet 英尺值
|
||
* @return 米值
|
||
*/
|
||
static float feetToMeters(float feet);
|
||
|
||
/**
|
||
* @brief 检查气压值是否在有效范围内
|
||
* @param pressure 气压值
|
||
* @return 是否有效
|
||
*/
|
||
static bool isValidPressure(float pressure);
|
||
|
||
/**
|
||
* @brief 检查高度值是否在合理范围内
|
||
* @param altitude 高度值(米)
|
||
* @return 是否合理
|
||
*/
|
||
static bool isValidAltitude(float altitude);
|
||
|
||
private:
|
||
float sea_level_pressure_; // 海平面气压值(hPa)
|
||
|
||
/**
|
||
* @brief 气压高度公式计算
|
||
* @param pressure 气压值
|
||
* @param sea_level_pressure 海平面气压值
|
||
* @return 海拔高度
|
||
*/
|
||
static float barometricFormula(float pressure, float sea_level_pressure);
|
||
};
|
||
|
||
#endif // HSM_ALTITUDE_CALCULATOR_HPP
|