编写一个函数来平滑指定范围内的中心值

Writing a function for smoothing center values in specified range

我不确定这是问这类问题的正确地点(也许 mathematica 会更好?)。

我正在编写一个从模拟操纵杆读取输入值的程序。

取值范围为 -100 到 100,中间值为 0。

我的问题是,中心区域的粘性值不是很精确。例如,松开摇杆后,我应该得到一个等于 0 的输入值,但我经常得到 2、7、-5 等值(几乎从不超过 10 或 -10)。

我想做的是应用 "smoothing" 函数来减少 0 区域周围的值。

我没有数学经验,到目前为止我能找到的最好的函数是:

function smooth(x)  {
    return Math.pow(x,3)/10000;
}

这给了我这种 values:

如你所见,这个函数太"aggressive" 因为即使是 f(20) ~= 0 !

知道我可以使用哪个更好的功能吗?

您可以检查绝对值是否小于或等于 10 并且 return 零而不是值。

function smooth(x)  {
    return Math.abs(x) <= 10 ? 0 : x;
}

我最终将我的第一个解决方案与 Nina 提供的解决方案混合在一起。

var deadzone = 15;

function smooth(x) {
    return Math.abs(x) <= deadzone ? Math.pow(x,3)/Math.pow(deadzone,2) : x;
}

参见this图表