2013-05-01 108 views
0

在我的项目之一,我用下面的smoothstep()功能:如何优化这个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

为T这里有一个替代方案(不包括预先计算的点,然后插值)提供更好的性能(和相同的行为),或另一个函数给出了很好的近似值?

回答

0

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

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