如何优化这个平滑阶跃函数?还有别的办法吗?

本文关键字:阶跃函数 平滑 何优化 优化 | 更新日期: 2023-09-27 18:11:56

在我的一个项目中,我使用以下smoothstep()函数:

float smoothstep(float a, float b, float m, int n)
{
    for(int i = 0 ; i < n ; i++)
    {
        m = m * m * (3 - 2 * m);
    }
    return a + (b - a) * m;
}

它工作得很好,但是,它有两个缺点:

  • 速度很慢(特别是对于n的大值)
  • 它不工作的非整数值(例如:n = 1.5)

是否有一个替代方案(排除预计算点,然后插值)提供更好的性能(和相同的行为),或另一个函数给出一个很好的近似?

如何优化这个平滑阶跃函数?还有别的办法吗?

您应该能够预先计算"m"项,因为它不依赖于a或b,并且假设您在整个插值过程中执行此操作,这应该会大大加快您的代码。

或者,您可以使用内置的MathHelper。平滑步进方法,它提供了三次插值,而不是你从你的版本中得到的线性插值。在这个类中还有其他更高级的插值器。