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 插值是啥意思 ? 是取两个数之间中间数吗?

Unity3D中的线性插值Lerp()函数解析

使用通用虚函数实现的任意组合实现派生类的正确方法是啥?

数据库表、视图、函数和存储过程的通用术语是啥?

Unity云消散巩固step,lerp和smoothstep

VBA 函数或过程允许的最长名称是啥