You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现两点间半正弦曲线的每分钟自适应数值计算

半正弦曲线数值计算实现

首先明确核心变量与曲线逻辑:

  • 起始值(maxCt):6500,结束值(minCt):2700,差值范围 CtRange = maxCt - minCt = 3800
  • 时间进度比例 t:当前已过日照分钟数 / 总日照分钟数(范围0~1)
  • 半正弦曲线采用余弦函数的半周期实现,确保数值变化先缓、中快、后缓,符合需求的曲线形态

修改后的代码实现

// 定义固定参数
const maxCt = 6500;
const minCt = 2700;
const CtRange = maxCt - minCt;

// 保留原有的总日照时长计算
const sunMinutesDay = (sunset - sunrise) / 1000 / 60;

if (await compareTime(adapter, sunrise, sunset, "between", ActualTime)) {
    // 计算当前已过的日照分钟数
    const elapsedMinutes = (ActualTime - sunrise) / 1000 / 60;
    // 转换为0-1的时间进度比例
    const timeRatio = elapsedMinutes / sunMinutesDay;
    // 生成半正弦变化因子:从1平滑降到0
    const sineFactor = (1 + Math.cos(timeRatio * Math.PI)) / 2;
    // 计算最终数值并取整
    adaptiveCtTimed = Math.round(minCt + CtRange * sineFactor);
}

代码说明

  1. 时间比例计算:将当前时间在日照周期内的位置转换为0到1的比例,确保曲线能适配任意时长的日照周期
  2. 半正弦因子:(1 + Math.cos(timeRatio * Math.PI)) / 2 会生成符合要求的半正弦曲线:
    • 日出时刻(timeRatio=0):因子为1,对应起始值6500
    • 日照中点(timeRatio=0.5):因子为0.5,对应中间值4600
    • 日落时刻(timeRatio=1):因子为0,对应结束值2700
  3. 数值映射:通过因子与差值范围相乘,再加上结束值,得到最终的半正弦曲线数值,最后取整满足每分钟计算的精度需求

内容的提问来源于stack exchange,提问作者Markus Hartmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:25:26