【问题标题】: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 值。跨度>

标签: function naming-conventions terminology inverse linear-interpolation


【解决方案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() 混淆,它们的作用完全不同。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2022-10-05
    • 2011-08-23
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多