Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 增加体积滑块感知线性度的数学函数_Javascript_Function - Fatal编程技术网

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本德:嗨,你应该让我们看看你到目前为止都做了些什么。我们不是来做你的工作的。你应该知道这一点,作为一个成员已经有7年多了……我想要一个javascript函数的帮助,你的函数在哪里?请把它添加到你的问题中。你的要求太模糊了——你不知道你需要什么。有无限多条曲线适合您指定的曲线。这是干什么用的?你需要提供更多的信息。这里没有人会反复尝试为你找到答案。@J.Sadi到目前为止我所尝试的都在本页的图片中。我已经指定了一个数学函数,但它并没有给出我所需要的。150x减去100的平方根等于y。我将用我使用的Javascript更新原始帖子。这里的问题是,你需要的帮助是从头开始的,没有代码会让你在这里总是被否决。我相信,如果您在解决自己的问题时尝试更新或删除并重新发布此问题,人们会很乐意为您提供帮助!: