/// 单位系统模块
/// 简化版单位系统,提供基本的单位转换功能
/// 注意:MoonBit 没有类似 pint 的完整单位系统,这里提供基础的转换函数
///|
/// 单位转换函数 - 压力
pub fn pa_to_hpa(pa : Double) -> Double {
pa / 100.0
}
///|
pub fn hpa_to_pa(hpa : Double) -> Double {
hpa * 100.0
}
///|
pub fn pa_to_mbar(pa : Double) -> Double {
pa / 100.0
}
///|
pub fn mbar_to_pa(mbar : Double) -> Double {
mbar * 100.0
}
///|
/// 单位转换函数 - 温度
pub fn kelvin_to_celsius(k : Double) -> Double {
k - 273.15
}
///|
pub fn celsius_to_kelvin(c : Double) -> Double {
c + 273.15
}
///|
pub fn kelvin_to_fahrenheit(k : Double) -> Double {
(k - 273.15) * 9.0 / 5.0 + 32.0
}
///|
pub fn fahrenheit_to_kelvin(f : Double) -> Double {
(f - 32.0) * 5.0 / 9.0 + 273.15
}
///|
/// 单位转换函数 - 长度
pub fn meter_to_kilometer(m : Double) -> Double {
m / 1000.0
}
///|
pub fn kilometer_to_meter(km : Double) -> Double {
km * 1000.0
}
///|
pub fn meter_to_feet(m : Double) -> Double {
m * 3.28084
}
///|
pub fn feet_to_meter(ft : Double) -> Double {
ft / 3.28084
}
///|
/// 单位转换函数 - 速度
pub fn mps_to_knots(mps : Double) -> Double {
mps * 1.94384
}
///|
pub fn knots_to_mps(knots : Double) -> Double {
knots / 1.94384
}
///|
pub fn mps_to_kmph(mps : Double) -> Double {
mps * 3.6
}
///|
pub fn kmph_to_mps(kmph : Double) -> Double {
kmph / 3.6
}
///|
/// 单位转换函数 - 角度
pub fn degrees_to_radians(deg : Double) -> Double {
deg * 3.141592653589793 / 180.0
}
///|
pub fn radians_to_degrees(rad : Double) -> Double {
rad * 180.0 / 3.141592653589793
}
///|
/// 检查数值是否在合理范围内(用于单位验证的辅助函数)
pub fn is_valid_temperature(k : Double) -> Bool {
k > 0.0 && k < 1000.0
}
///|
pub fn is_valid_pressure(pa : Double) -> Bool {
pa > 0.0 && pa < 100000000
}
///|
pub fn is_valid_angle_degrees(deg : Double) -> Bool {
deg >= -360.0 && deg <= 360.0
}
///|
/// 规范化角度到 [0, 360) 范围
pub fn normalize_angle_degrees(deg : Double) -> Double {
let deg_mod = deg % 360.0
if deg_mod < 0.0 {
deg_mod + 360.0
} else {
deg_mod
}
}
///|
/// 规范化角度到 [-180, 180) 范围
pub fn normalize_angle_degrees_signed(deg : Double) -> Double {
let deg_mod = deg % 360.0
if deg_mod > 180.0 {
deg_mod - 360.0
} else if deg_mod <= -180.0 {
deg_mod + 360.0
} else {
deg_mod
}
}