Javascript 增加体积滑块感知线性度的数学函数
背景 我不是数学家,但我确切地知道我需要什么。请接受我的非数学解释 概要Javascript 增加体积滑块感知线性度的数学函数,javascript,function,Javascript,Function,背景 我不是数学家,但我确切地知道我需要什么。请接受我的非数学解释 概要 我想要一个javascript函数的帮助,该函数将输入滑块映射到输出编号,并满足以下两个要求。我正在控制一个数字混音器,但是用一个简单的x-100=y关系,它在滑块的底部非常不敏感,在顶部非常敏感。稍后,我将控制其他设备,如照明调光器,因此我希望尽可能多地了解这些功能,而不会不必要地深入数学 输入值始终为0到100,输出值范围为-99到x和y之间的指定数字,例如0或5。i、 e.该数字在功能中易于更改 需要是非线性的,就像
我想要一个javascript函数的帮助,该函数将输入滑块映射到输出编号,并满足以下两个要求。我正在控制一个数字混音器,但是用一个简单的x-100=y关系,它在滑块的底部非常不敏感,在顶部非常敏感。稍后,我将控制其他设备,如照明调光器,因此我希望尽可能多地了解这些功能,而不会不必要地深入数学 输入值始终为0到100,输出值范围为-99到x和y之间的指定数字,例如0或5。i、 e.该数字在功能中易于更改 需要是非线性的,就像下面显示的曲线一样,输出在滑块的底端变化更快,但它需要是一条更陡的曲线。我无法用数学计算出如何做那件事。我尝试了两个数学函数ln,并在图形计算器上登录,但无法接近我需要的。事实上,我想通过以下两种方式了解我需要做什么来指定或调整曲线:曲线的陡度,以及镜像曲线的方式,以便在开始时的更改比我上面描述的更大
有无限的可能性,所以这将是一个猜测。使用您尝试使用的同一种公式,即x的平方根,可以识别三个参数: 曲线应与Y轴相交的Y值 曲线应与X轴相交的X值 弯曲曲率的大小 最后一个参数可以通过更改应用于x的功率来影响。所以如果你用1/3代替1/2,那么弯曲会更强 很容易看出前两个参数是如何影响函数的 下面是一个基于这三个参数返回实际函数的函数:
function createFunc(y0, x0, power) {
const inv = 10 / power;
const c = y0 / (x0 ** inv);
return function f(x) {
return c * (x ** inv) - y0;
}
}
此逻辑中的数字10允许幂为整数,但足够敏感。因此,对于平方根,您将传递值20:然后inv变为1/2
下面是一个小演示,允许您以交互方式更改这三个参数,并查看结果图:
常量输入=document.querySelectorAllinput;
const canvas=document.querySelectorcanvas;
const ctx=canvas.getContext2d;
常数shiftX=10.5;
常数shiftY=10.5;
ctx.translateshiftX,shiftY;
常量rangeX=[-shiftX,canvas.width shiftX];
常量rangeY=[-shiftY,canvas.height-shiftY];
功能显示{
ctx.clearRectrangeX[0],rangeY[0],rangeX[1],rangeY[1];
ctx.beginPath;
ctx.strokeStyle=黑色;
ctx.lineWidth=1;
ctx.moveTorangeX[0],0;
ctx.lineTorangeX[1],0;
ctx.moveTo0,rangeY[0];
ctx.lineTo0,rangeY[1];
对于let i=10;i