gpt4 book ai didi

javascript - 将一个数字范围映射到另一个数字范围

转载 作者:行者123 更新时间:2023-11-30 20:04:51 30 4
gpt4 key购买 nike

我正在尝试将一个十进制数字范围映射到另一个范围。在下面的示例中,范围 0.0 -> 2.0 映射到 0.0 -> 0.8。我似乎无法让输出范围在 0.8 处结束——它在 0.722 处停止。我认为问题是如何计算比例变量,但我不确定如何解决它。谁能看出我哪里出错了?

function myscale (num, in_min, in_max, out_min, out_max, factor)
{
// number map
var scale = Math.max(0.0, num - in_min) / (in_max - in_min);

// calculate easing curve
var r = out_min + (Math.pow(scale, factor) * (out_max - out_min));

// 64-bit floating point representation fix
r = parseFloat(r.toFixed(10));

// return mapped scale number
return r;
}

var text = "";
var i;

for (i = 0.0; i <= 2.0; i = i + 0.1)
{
text += myscale(i, 0.0, 2.0, 0.0, 0.8, 2) + "<br />";
}

document.getElementById("demo").innerHTML = text;
<!DOCTYPE html>
<html>
<body>

<b>Numbers mapped from 0 to 0.8</b>

<p id="demo"></p>

</body>
</html>

最佳答案

您可以采用不同的方法并进行迭代,直到值小于所需值。最后取最大的值,并在 for 循环之外用这个值调用函数,这个值没有我们加法的浮点错误。

function myscale (num, in_min, in_max, out_min, out_max, factor) {
// number map
var scale = Math.max(0.0, num - in_min) / (in_max - in_min);

// calculate easing curve
var r = out_min + (Math.pow(scale, factor) * (out_max - out_min));

// 64-bit floating point representation fix
r = parseFloat(r.toFixed(10));

// return mapped scale number
return r;
}

var text = "";
var i;

for (i = 0; i < 2; i += 0.1) {
text += myscale(i, 0, 2, 0, 0.8, 2) + "<br />";
}
text += myscale(2, 0, 2, 0, 0.8, 2) + "<br />";

document.getElementById("demo").innerHTML = text;
<b>Numbers mapped from 0 to 0.8</b>
<p id="demo"></p>

关于javascript - 将一个数字范围映射到另一个数字范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53034590/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com