工具函数,输入总时间和分段,返回一个符合余弦函数的时间段,且时间段之和是总时间 这段代码定义了一个函数cmd_generate_cos_times(total_time, steps)它的作用是输入total_time总时间长度一个数值steps分段数一个整数输出返回长度为steps的数组times表示每个时间段的时长。特点每个时间段的时长按余弦曲线分布波动形状类似余弦函数在[0, π]区间内从 1 递减到 -1 的变化所有时间段之和保证加起来等于total_timefunction cmd_generate_cos_times(total_time, steps) local times {}; -- 定义空表用来存放每个时间段长度 local step_size math.pi / steps; -- 将 [0, π] 区间均分成 steps 等份每份长度 local sum 0; -- 记录各时间段长度累加和 for i 1, steps do -- 计算余弦值映射到 [0, 1] 区间cos(0) 1 映射为 1cos(π) -1 映射为 0 -- 余弦计算点固定在 (i - 1) * step_size即从0开始间隔 step_size local time (math.cos((i - 1) * step_size) 1) / 2 * total_time / steps; -- 先归一化余弦值 (0~1)再乘以 total_time 除以 steps平均分时间的权重系数 table.insert(times, time); sum sum time; end; -- 累加完成后sum 可能不等于 total_time因为浮点计算误差和分段处理 -- diff 是总时间与累加实际时间的误差 local diff total_time - sum; -- 将误差平均分配到每个时间段确保最后总和严格等于 total_time local diff_per_step diff / steps; for i 1, steps do times[i] times[i] diff_per_step; end; return times; end;比如你有10秒时间要分成5个阶段且希望阶段时间符合一种平滑的递减关系时就可以用这个函数生成 lua 复制 local times cmd_generate_cos_times(10, 5) for i, t in ipairs(times) do print(string.format(Step %d time: %.3f, i, t)) end先回顾代码中时间段计算公式local time (math.cos((i - 1) * step_size) 1) / 2 * total_time / steps;计算点是(i - 1)*step_size也就是i1 → angle0i2 → angleπ/5i3 → angle2π/5...i5 → angle4π/5取余弦值cos(0) 1cos(π/5) ≈ 0.809cos(2π/5) ≈ 0.309cos(3π/5) ≈ -0.309cos(4π/5) ≈ -0.809加1后除2映射到 [0,1]i1: (1 1)/2 1i2: (0.809 1)/2 ≈ 0.9045i3: (0.309 1)/2 ≈ 0.6545i4: (-0.309 1)/2 ≈ 0.3455i5: (-0.809 1)/2 ≈ 0.0955乘以total_time / steps 10/52对应时间是Step 1: 1 * 2 2.0Step 2: 0.9045 * 2 ≈ 1.809Step 3: 0.6545 * 2 ≈ 1.309Step 4: 0.3455 * 2 ≈ 0.691Step 5: 0.0955 * 2 ≈ 0.191这些值的和大概是 21.8091.3090.6910.191 5.999约为6注意不是10因此代码后面有一段调整local diff total_time - sum; -- diff 10 - ~6 4 local diff_per_step diff / steps; -- 4 / 5 0.8 for i 1, steps do times[i] times[i] diff_per_step; end最终每段时间是原始值 0.8:Step 1: 2.0 0.8 2.8Step 2: 1.809 0.8 2.609Step 3: 1.309 0.8 2.109Step 4: 0.691 0.8 1.491Step 5: 0.191 0.8 0.991总和为2.82.6092.1091.4910.991 10满足总时间
💡
读完这篇文章,你可以带走什么

本文来自编程新知一线开发与建站实战沉淀:讲清原理、给出可复现步骤、标注避坑要点。看完后可以直接在你的项目或网站中落地验证。

编
编程新知内容团队
一线开发 · 建站实施 · 持续更新
由资深前端工程师、后端架构师与建站实施人员共同维护,坚持"真实案例 + 完整步骤 + 避坑指南"的内容准则。如果你在落地中遇到问题,欢迎联系我们交流。

想把这套方案用到自己的项目上?

编程新知提供技术答疑与网站建设一站式服务,欢迎联系我们获取针对性建议。

联系工程师
📚

系统学习该技术

进入对应栏目,从基础到进阶完整学习,配套案例与避坑指南。

前往栏目 →
🏗️

需要落地实施

企业建站、SEO 优化、服务器部署等需求,交给工程师一步到位。

了解服务 →
💬

还有疑问

技术难题或方案咨询,联系编程新知获取一对一的专业建议。

联系我们 →