我正在尝试解决以下问题之一。
我有两个数字MAX = 200,MIN = 110现在一个随机数可以说是120,它只能在这两个数字之间(MAX和MIN)。现在我想缩小MAX = 10,MIN = 1&随机数到新MAX和&之间的相应值。 MIN在这种情况下是2.可以有人帮助我使用优化的javascript函数吗?
答案 0 :(得分:1)
您要搜索的是地图功能。
function rand(MIN, MAX) {
return MIN + Math.random() * (MAX - MIN);
}
function map(val, prevmin, prevmax, newmin, newmax) {
var prevrange = prevmax - prevmin;
var newrange = newmax - newmin;
return newmin + (val - prevmin) / prevrange * newrange;
}
var x = rand(10, 20);
console.log(x);
x = map(x, 10, 20, 100, 200);
console.log(x);
说明:
该函数有5个参数,第一个是你要映射的值,第二个和第三个定义旧值所在的范围,第四个和第五个是它应该在的范围。
var prevrange = prevmax - prevmin;
var newrange = newmax - newmin;
计算先前的范围和新值。
return newmin + (val - prevmin) / prevrange * newrange;
首先减法:它计算旧值在绝对先前范围内的位置。
/ prevrange
将此范围映射到0-1并将* newrange
映射回新范围。
newmin +
只是将其转换回相对范围。
答案 1 :(得分:0)
你在这里:
function newVal(oldMax, oldMin, newMax, newMin, oldVal) {
return (newMax - newMin)/(oldMax - oldMin)*(oldVal - oldMin) + newMin;
}
console.log(newVal(200,110,10,1,120));
答案 2 :(得分:0)
function scaleToRange(number,MAXinput,MINinput,MAXoutput,MINoutput) {
return (number-MINinput)/MAXinput*MAXoutput+MINoutput;
}
alert(scaleToRange(120,200,110,10,1))

这会从一个范围到另一个范围按比例缩放数字。它很简单。