Sunset Predictor

🌇 Scoring System / 打分系统

本工具的“日落/火烧云指数”是一个启发式(heuristic)的加权评分(0–100)。我们先在「日落前后 ±窗口」内汇总气象要素(平均/最小/最大), 再把各要素标准化到 0–1 之间(得到 s),与权重 w 相乘求和,最后×100 得出总分。
The "Sunset Score" is a heuristic weighted score (0–100). We aggregate weather variables in a ±window around sunset, normalize each factor to [0–1] as s, weight them by w, sum them, then ×100.

🧭 Pipeline / 处理流程

  1. 取数 / Data:从 Open-Meteo 获取逐小时的 cloudcover[_low/_mid/_high]precipitation_probabilityvisibilitywind_speed_10m
  2. 时间窗 / Window:以天文计算的日落时间为中心,取 ±window 分钟的小时索引集合(默认 ±90 分)。
  3. 聚合 / Aggregate:对窗口内各要素求 平均(并保留 min / max 供展示)。
  4. 标准化 / Normalize:把每个聚合后的要素转换到 [0,1] 得分 s(见下文“标准化函数”)。
  5. 加权求和 / Weighted sumScore = 100 × Σ ( wi × si )
  6. 分级标签 / Label:基于总分给出 “🔥 Fire / Great / Good / Fair / Poor”。

注:如果有的要素缺失,我们使用中性值(如 0.5 或 0.6)并在详情中标注“无数据”(No data)。

📐 Normalization / 标准化函数

1) 三角函数 tri
tri(x, m, w) = clamp( 1 - |x - m| / w , 0 , 1 )
/*
  m: 理想值(optimal value),w: 可容忍宽度(tolerance)
  当 x=m 得 1;偏离 m 在 w 内线性下降到 0;超出 w 为 0
*/
用途:高云(m=50, w=40)、中云(m=40, w=35)、风速(m=4 m/s, w=4)。
2) 低云(越少越好)
s_low = 1 - tri( lowCloudPct , 20 , 25 )
/* 约 0–20% 更利于地平线通透,因此低云越多扣分越高 */
3) 降水概率(越小越好)
s_precip = 1 - clamp( precipProb / 100 , 0 , 1 )
4) 能见度(越大越好)
s_vis = clamp( ( visKm - 5 ) / 10 , 0 , 1 )
/* 5 km 及以下趋近 0;15 km 及以上趋近 1;中间线性过渡 */
5) 气溶胶(占位)
s_aod = 0.6  // 尚未接入 AOD/PM2.5 数据时的中性值
百分比数据兼容 0–1/0–100 两种来源:若检测到最大值 ≤ 1.01,则×100 归一到百分比。

⚖️ Weights / 权重

Factor / 因子 Weight w Rationale / 理由
High cloud / 高云0.35高层卷云是色彩“画布”,适中覆盖最佳。
Mid cloud / 中云0.25增强层次与纹理,过多会遮光。
Low cloud / 低云0.15过厚会挡住地平线,少量可反射。
Precipitation / 降水概率0.10降水越少越利于观测与拍摄。
Visibility / 能见度0.07高能见度有助于颜色纯净与远景层次。
Wind / 风速0.08适中风速利于云形态;过强会吹散。
Aerosol / 气溶胶0.00暂未接入数据,默认不计。

权重可在首页的“权重调整/Weight”区域(若开启)进行微调;不同地区/季节可尝试略作差异化。

🧮 Final Score / 最终公式

Score = 100 × Σ ( w_i × s_i )
where s_i ∈ [0, 1],  w_i ≥ 0

等级阈值(可调整):≥85 Fire、≥70 Great、≥55 Good、≥40 Fair、否则 Poor。

🔎 Worked Example / 计算示例

假设窗口平均:高云 58%,中云 35%,低云 12%,降水概率 20%,能见度 12 km,风速 5 m/s。

Factor Formula s w Contribution (=w×s×100)
Hightri(58, 50, 40)0.800.3528.0
Midtri(35, 40, 35)0.860.2521.5
Low1 - tri(12, 20, 25)0.520.157.8
Precip1 - 0.200.800.108.0
Visclamp((12-5)/10)0.700.074.9
Windtri(5, 4, 4)0.750.086.0
Total76.2 ≈ 76

以上仅为示例,实际数值以你的地点和时段的窗口平均为准。缺失数据将使用中性值(如 s=0.5/0.6)并在详情里注明。