044f2f4381
- 新增半解析、旧模型、自定义与多源堆叠星历实例,提供 Context、Instance、SPK 读取及状态与视位置计算 - 统一太阳、月球和行星实例接口,扩展黄经穿越、留、相位、最近角距、偕日可见、任意高度升落、轨道节点及凌日等天象查询 - 完善日月食、月掩与凌日的月缘剖面、有限盘面接触、站心修正、局地可见性、全球路径和地图输出 - 新增 SVG、GeoJSON、KML 天象输出及凌日、月掩和月缘地形相关缓存与几何求解 - 新增恒星星表导入与查询,支持 CSV、Hipparcos、BSC5、Stellarium 等格式及名称、交叉标识、锥面检索和星等过滤 - 补充 IAU 2006、地球定向、折射消光、大气观测、轨道传播及半解析行星/月球数据支持 - 将默认未来民用时标切换为 TimeScaleLeapHour,更新 2027–2400 农历速查表、中文日期解析和时区边界处理 - 增加事件基线、跨模型回归、几何边界、月缘地形和输出契约测试,完善中英文手册、示例资源、NOTICE 与忽略规则
39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
package formula
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
)
|
|
|
|
func TestExtinctionSchaefer(t *testing.T) {
|
|
// 海平面、20 °C、湿度 50%、北纬 30°、春分点:逐项手算。
|
|
got := ExtinctionSchaefer(0, 20, 50, 30, 0)
|
|
aerosol := 0.1 * math.Pow(1-0.32/math.Log(0.5), 1.33)
|
|
lat := math.Pi / 6
|
|
ozone := 0.031 * (3 + 0.4*(lat-math.Cos(3*lat))) / 3
|
|
water := 0.031 * 0.94 * 0.5 * math.Exp(20.0/15)
|
|
assertFormulaClose(t, "Rayleigh", got.Rayleigh, 0.1066, 1e-15)
|
|
assertFormulaClose(t, "Aerosol", got.Aerosol, aerosol, 1e-15)
|
|
assertFormulaClose(t, "Ozone", got.Ozone, ozone, 1e-15)
|
|
assertFormulaClose(t, "Water", got.Water, water, 1e-15)
|
|
assertFormulaClose(t, "Total", got.Total, 0.1066+aerosol+ozone+water, 1e-15)
|
|
if got.Total < 0.2 || got.Total > 0.5 {
|
|
t.Fatalf("sea-level humid extinction out of typical range: %.3f", got.Total)
|
|
}
|
|
|
|
// 高山干燥站点消光明显更小。
|
|
high := ExtinctionSchaefer(2500, 0, 20, 30, 0)
|
|
if high.Total >= got.Total*0.6 {
|
|
t.Fatalf("high dry site %.3f should be well below sea level %.3f", high.Total, got.Total)
|
|
}
|
|
|
|
for _, rh := range []float64{0, 100, -1, math.NaN()} {
|
|
if !math.IsNaN(ExtinctionSchaefer(0, 20, rh, 30, 0).Total) {
|
|
t.Fatalf("humidity %v should be rejected", rh)
|
|
}
|
|
}
|
|
if !math.IsNaN(ExtinctionSchaefer(0, 20, 50, 91, 0).Total) {
|
|
t.Fatal("latitude out of range should be rejected")
|
|
}
|
|
}
|