Lua实现输入0-1映射0.1至0.001的反比例函数求助
解决Lua反比例映射函数的问题
你的核心需求是:输入0到1的数值,输出从0.1到0.001的反比例递减值。直接用
y=1/x失效是因为它的值域和目标区间完全不匹配——x=1时y=1远大于0.1,x趋近0时y会趋向无穷大,所以需要调整反比例函数的参数来适配目标输入输出范围。适配后的精确函数推导:
我们构造形如y = A/(B*x + C)的函数,满足两个边界条件:- 当x=0时,y=0.1
- 当x=1时,y=0.001
代入求解后,得到无浮点数误差的精确函数:
function mapInverse(x) -- 输入x∈[0,1],返回0.1到0.001的反比例递减值 return 1/(990*x + 10) end验证边界:
- x=0 →
1/(0+10)=0.1,符合要求 - x=1 →
1/(990+10)=1/1000=0.001,符合要求 - 中间值比如x=0.5 →
1/(495+10)=1/505≈0.00198,确实随x增大单调递减,且落在目标区间内。
你现有代码的问题:
代码里heat_increment = heat *10和new_time = heat_increment/time的逻辑和需求的反比例映射无关,只是对输入做线性放大后再除以time,完全不是你需要的映射逻辑。如果要将heat(0-1范围)转换为目标值,直接调用上面的mapInverse函数即可。关于导数积分的误解:
你的需求只是静态的输入输出反比例映射,完全不需要用到微积分。可能是他人误解了你的需求——只有当你需要处理变化率、累积量这类动态过程时,才会涉及导数或积分,当前场景用简单的函数映射就能解决。
内容的提问来源于stack exchange,提问作者StealthYakumama
相关产品推荐
相关产品推荐

