lerp 函数的逆函数的通用名称是啥?
Posted
技术标签:
【中文标题】lerp 函数的逆函数的通用名称是啥?【英文标题】:What's the common name for the inverse of the lerp function?lerp 函数的逆函数的通用名称是什么? 【发布时间】:2014-07-01 13:41:14 【问题描述】:函数lerp()是编程语言中常用的函数:
lerp(a, b, t) = a + t * (b - a).
现在对于很多情况,我都有一个反函数:
fraction(x, a, b) = (x - a) / (b - a).
这个函数是这样构建的
lerp(a, b, fraction(x, a, b)) == x
和
fraction(lerp(a, b, t), a, b) == t
但是我对“分数”这个名字不满意。这个函数有通用名称吗?
【问题讨论】:
除了我在下面的回答之外,我还要补充一点,我喜欢将t
参数命名为“比率”而不是“时间”,因为它通常用作一部分与另一部分的比率(所以从技术上讲,它不是比率,而是比率的一小部分)。所以近年来我一直倾向于使用decudeRatio()
或ratioOf()
或proportionFrom()
之类的名称(“比例”是我喜欢的另一个名称,尽管不完全符合数学定义)。这在具有命名参数的现代语言中可以非常干净,从而导致像 ratio(of: 3.5, in: 0.0...10.0)
或 (3.5).proportion(within: 0.0...10.0)
这样的调用。
我的库有 prel (x, xLo, xHi) 返回 0 到 1。还有 lerpxlh (yLo, yHi, x, xLo, xHi) 返回与 xLo 到 xHi 中的 x 成比例的 ay 值。跨度>
【参考方案1】:
GLSL
GLSL 的内置函数包括:
mix()
,其工作方式类似于您的 lerp()
函数。smoothstep()
,其工作方式类似于您的反向 lerp 函数,结合了 Hermite 平滑和 x = clamp(x, 0.0, 1.0)
。
您可以考虑将名称 linearstep()
用于您的实施。
统一引擎
Unity 的 API 包括:
Lerp()
/LerpUnclamped()
InverseLerp()
,这正是你的逆 lerp 函数所做的。
注意:我不会使用名称 fraction()
——它似乎很容易与 fract()
/frac()
混淆,它们的作用完全不同。
【讨论】:
以上是关于lerp 函数的逆函数的通用名称是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Unity3d 的 Mathf.Lerp 插值是啥意思 ? 是取两个数之间中间数吗?