如何优化这个smoothstep函数?还有其他选择吗?

时间:2013-05-01 21:20:42

标签: c# interpolation smoothing

在我的一个项目中,我使用以下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

是否有替代方案(不包括预先计算点然后进行插值)以提供更好的性能(和相同的行为),或者是另一种能够提供近似值的函数?

1 个答案:

答案 0 :(得分:0)

您应该能够预先计算“m”项,因为它不依赖于a或b,并且假设您在整个插值中执行此操作,这将显着加快您的代码速度。

或者,您可以使用内置的MathHelper.Smoothstep方法,该方法提供三次插值,而不是您从版本中获得的线性插值。该类中还有其他更先进的插补器。