我不确定这是提出这类问题的正确位置(也许mathematica会更好?)。
我正在编写一个从模拟操纵杆读取输入值的程序。
值范围从-100到100,其中0是中心值。
我的问题是,中心区域的杆值不是很精确。例如,在释放棒时,我应该得到一个等于0的输入值,但我经常得到像2,7或-5等的值(几乎不会超过10或-10)。
我想要做的是应用“平滑”功能来减少0区域周围的值。
我没有数学经验,到目前为止我能找到的最好的功能是:
function smooth(x) {
return Math.pow(x,3)/10000;
}
这给了我这种values:
正如你所看到的,这个功能太“激进”,因为即使f(20)〜= 0!
知道我可以使用哪种更好的功能?
答案 0 :(得分:1)
您可以检查绝对值是否小于或等于10并返回零而不是值。
function smooth(x) {
return Math.abs(x) <= 10 ? 0 : x;
}
答案 1 :(得分:0)
我最终将我的第一个解决方案与Nina提供的解决方案混合在一起。
var deadzone = 15;
function smooth(x) {
return Math.abs(x) <= deadzone ? Math.pow(x,3)/Math.pow(deadzone,2) : x;
}
请参阅this图