Smoothstep功能

时间:2015-03-05 22:39:32

标签: c++ interpolation

我试图通过使用AMD提供的Smoothstep函数在图表上绘制一些结果,该函数在此维基百科页面Smoothstep上有用。使用;

  

AMD [4]提供的C / C ++示例实现如下。

float smoothstep(float edge0, float edge1, float x)
{
    // Scale, bias and saturate x to 0..1 range
    x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
    // Evaluate polynomial
    return x*x*(3 - 2 * x);
}

问题是由于static method clamp无法使用,我无法使用此方法。

我已导入以下内容;

#include <math.h> 
#include <cmath> 
#include <algorithm>  

然而,没有定义clamp方法。

我的数学技能不是最好的,但有没有办法实现Smoothstep function,就像有办法实现LERP function;

float linearIntepolate(float currentLocation, float Goal, float time){

    return (1 - time) * currentLocation + time * Goal;
}

1 个答案:

答案 0 :(得分:1)

也许只是命名空间&#34; std&#34;缺少的:这是我编译的代码:

#include <algorithm>

float smoothstep(float edge0, float edge1, float x) {
    // Scale, bias and saturate x to 0..1 range
    x = std::clamp((x - edge0) / (edge1 - edge0), 0.0f, 1.0f);
    // Evaluate polynomial
    return x * x * (3 - 2 * x);
}