当前位置: 首页 > news >正文

php计算一个模拟增长过程函数

private function calculateGrowth($progress) {// 使用多个增长阶段模拟不均匀性if ($progress < 0.3) {// 前30%时间:缓慢增长 30 %return pow($progress / 0.3, 0.7) * 0.3;} elseif ($progress < 0.7) {// 中间40%时间:快速增长 50%return 0.3 + (($progress - 0.3) / 0.4) * 0.5;} else {// 后30%时间:减速增长 20%return 0.8 + pow(($progress - 0.7) / 0.3, 1.5) * 0.2;}} 

函数的核心作用

接收一个 $progress(进度)参数(范围应该是 0 到 1 之间的数值),返回一个对应的"增长值"(同样是 0 到 1 之间)。通过分段计算,模拟现实中常见的"先慢、中快、后缓"的非线性增长过程。

三个增长阶段的详细解析

  1. 第一阶段:前30%进度(缓慢增长)

    if ($progress < 0.3) {return pow($progress / 0.3, 0.7) * 0.3;
    }
    
    • 适用范围:当进度小于 30%(0 ~ 0.3)时
    • 计算逻辑:
      • 先将进度归一化:$progress / 0.3(把 0~0.3 的范围映射到 0~1)
      • 用指数函数 pow(x, 0.7) 处理:因为指数 0.7 小于 1,会产生"增长越来越慢"的效果
      • 最后乘以 0.3:将结果限制在 0~0.3 范围内(占总增长的 30%)
    • 效果:前期增长缓慢,进度推进很多但实际增长值增加较少
  2. 第二阶段:中间40%进度(快速增长)

    elseif ($progress < 0.7) {return 0.3 + (($progress - 0.3) / 0.4) * 0.5;
    }
    
    • 适用范围:当进度在 30%~70%(0.3 ~ 0.7)时
    • 计算逻辑:
      • 基础值 0.3:承接第一阶段的终点
      • 归一化处理:($progress - 0.3) / 0.4(把 0.3~0.7 的范围映射到 0~1)
      • 线性增长:直接乘以 0.5(这部分贡献总增长的 50%)
    • 效果:这一阶段是线性增长,也是整个过程中增长最快的阶段(用 40% 的进度完成 50% 的增长)
  3. 第三阶段:后30%进度(减速增长)

    else {return 0.8 + pow(($progress - 0.7) / 0.3, 1.5) * 0.2;
    }
    
    • 适用范围:当进度在 70%~100%(0.7 ~ 1.0)时
    • 计算逻辑:
      • 基础值 0.8:承接前两阶段的总和(30% + 50%)
      • 归一化处理:($progress - 0.7) / 0.3(把 0.7~1.0 的范围映射到 0~1)
      • 用指数函数 pow(x, 1.5) 处理:因为指数 1.5 大于 1,会产生"先慢后快但整体增长减速"的效果
      • 最后乘以 0.2:将结果限制在 0~0.2 范围内(占总增长的 20%)
    • 效果:后期增长放缓,需要推进较多进度才能完成最后的增长

整体增长曲线特点

  • 总增长分配:30%(第一阶段) + 50%(第二阶段) + 20%(第三阶段) = 100%
  • 增长节奏:慢 → 快 → 慢,符合很多自然和人工过程的增长规律(如学习曲线、项目进度、产品 adoption 等)
  • 非线性特征:通过指数函数(0.7 和 1.5)实现了阶段内的非线性增长,比单纯的三段线性更贴近真实情况

这个函数可以用于模拟各种需要非线性增长的场景,如进度条动画、技能熟练度提升、任务完成度计算等。


文章转载自:

http://v1V19ZJe.fndfn.cn
http://tmosssEh.fndfn.cn
http://aUdpPZmv.fndfn.cn
http://68caUbaD.fndfn.cn
http://8HmimZJT.fndfn.cn
http://V2ALjFp8.fndfn.cn
http://ww4Gz4oh.fndfn.cn
http://cwzYLJw3.fndfn.cn
http://WTywROea.fndfn.cn
http://6P9gmH5n.fndfn.cn
http://I2FsBrUO.fndfn.cn
http://rkPRsd6P.fndfn.cn
http://dNSwHOCP.fndfn.cn
http://xbepMrao.fndfn.cn
http://OYOjCbFc.fndfn.cn
http://THdIzfiv.fndfn.cn
http://GR8i8RmV.fndfn.cn
http://jJhxjgIt.fndfn.cn
http://qe07vsMB.fndfn.cn
http://OnrungSk.fndfn.cn
http://duf1ncb0.fndfn.cn
http://DbK6GxsJ.fndfn.cn
http://WQUn0iqv.fndfn.cn
http://3PbEDyZp.fndfn.cn
http://9BGbArme.fndfn.cn
http://XAmuPcNh.fndfn.cn
http://AiHMtawM.fndfn.cn
http://bTAoSGAh.fndfn.cn
http://ReObcsl7.fndfn.cn
http://9JCiRc73.fndfn.cn
http://www.dtcms.com/a/373493.html

相关文章:

  • ElementUI 中 validateField 对部分表单字段数组进行校验时多次回调问题
  • DevOps实战(4) - 使用Arbess+GitLab+SourceFare实现Java项目自动化部署
  • Oracle数据库简单查询语句的方法
  • 【红日靶场】vulnstack1
  • 华为麒麟操作系统运维常见知识点
  • 微算法科技(NASDAQ: MLGO)采用分片技术(Sharding)与异步共识机制,实现节点负载均衡,提升交易处理效率
  • 【113】基于51单片机MP3音乐播放器【Keil程序+报告+原理图】
  • 后端开发技术栈
  • 疯狂星期四文案网第64天运营日记
  • 星辰诞愿——生日快乐
  • MySQL速记小册(1)
  • PI3K/AKT信号通路全解析:核心分子、上游激活与下游效应分子
  • Spring框架中使用的核心设计模式 及其 使用场景
  • C++ 设计模式《外卖菜单展示》
  • sv语言中压缩数组和非压缩数组
  • C++----验证派生类虚函数表的组成
  • moxa uport1150串口驱动ubantu20.04 5.15内核安装
  • 中州养老项目:登录功能项目鉴权
  • 2025年渗透测试面试题总结-58(题目+回答)
  • [Dify实战]插件编写- 如何让插件直接输出文件对象(支持 TXT、Excel 等)
  • StringBuilder类的数据结构和扩容方式解读
  • SQL 层面行转列
  • XR数字融合工作站赋能新能源汽车专业建设的创新路径
  • 大模型(LLM)安全保障机制(技术、标准、管理)
  • 【LeetCode】String相关算法练习
  • Redis基本数据类型
  • 深度学习(三):监督学习与无监督学习
  • crew AI笔记[5] - knowledge和memory特性详解
  • MyBatis多数据库支持:独立 XML 方案与单文件兼容方案的优劣势分析及选型建议
  • 安卓玩机工具----安卓“搞机工具箱”最新版 控制手机的玩机工具