如何优化这个平滑阶跃函数?还有别的办法吗?
本文关键字:阶跃函数 平滑 何优化 优化 | 更新日期: 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。平滑步进方法,它提供了三次插值,而不是你从你的版本中得到的线性插值。在这个类中还有其他更高级的插值器。