Javascript中的重新映射或映射函数

Javascript中的重新映射或映射函数,javascript,map,processing,remap,Javascript,Map,Processing,Remap,最近,我的大部分编程经验都是关于JavaScript的,最近我一直想深入研究一些JavaScript,因为它们之间有点关联 我只是想知道,由于我最近的搜索没有找到任何结果,JavaScript是否有一个类似于Processing的“map”函数的函数,在这个函数中,一个值及其范围被获取并重新映射到一个新的范围 更多信息请点击此处: PS:是的,我也知道www.processingjs.org是存在的,但我只是想知道JS是否在本机上有这样的功能。不是在本机上。Javascript核心实际上是最小的

最近,我的大部分编程经验都是关于JavaScript的,最近我一直想深入研究一些JavaScript,因为它们之间有点关联

我只是想知道,由于我最近的搜索没有找到任何结果,JavaScript是否有一个类似于Processing的“map”函数的函数,在这个函数中,一个值及其范围被获取并重新映射到一个新的范围

更多信息请点击此处:


PS:是的,我也知道www.processingjs.org是存在的,但我只是想知道JS是否在本机上有这样的功能。

不是在本机上。Javascript核心实际上是最小的(有关详细信息,请参阅)。数学函数仅限于在对象中找到的内容。因此,要广泛使用这样一个函数,您需要Javascript本身的实现。

编辑使用@Alnitak的代码;这个版本是正确的

不,没有,但是你可以很容易地写一个:

function adjust(value, r0, r1, r2, r3) {
  var mag = Math.abs(value - r0), sgn = value < 0 ? -1 : 1;
  return sgn * mag * (r3 - r2) / (r1 - r0);
}
功能调整(值,r0,r1,r2,r3){
var mag=数学abs(值-r0),sgn=值<0?-1:1;
返回sgn*mag*(r3-r2)/(r1-r0);
}
就我个人而言,我不会称之为“map”,因为“map”与列表处理机制(我的)关联


(请注意,我想您可能想检查范围反转错误;我不熟悉处理中“map”的确切语义。)

下面的函数产生与原始处理函数相同的行为:

function map_range(value, low1, high1, low2, high2) {
    return low2 + (high2 - low2) * (value - low1) / (high1 - low1);
}

下面是Javascript中处理数学便利方法的一个实现。它是原始处理Java源代码的直接转换

p5.sq()
p5.constrain()
p5.degrees()
p5.mag()
p5.dist()
p5.lerp()
p5.norm()
p5.map()
从这里获取代码:

可重用的重新映射 如果要将多个值重新映射到定义的范围,可能需要使用此版本

/**
 * Create a function that maps a value to a range
 * @param  {Number}   inMin    Input range minimun value
 * @param  {Number}   inMax    Input range maximun value
 * @param  {Number}   outMin   Output range minimun value
 * @param  {Number}   outMax   Output range maximun value
 * @return {function}          A function that converts a value
 * 
 * @author Victor N. wwww.victorborges.com
 * @see https://gist.github.com/victornpb/51b0c17241ea483dee2c3a20d0f710eb/
 */
function createRemap(inMin, inMax, outMin, outMax) {
    return function remaper(x) {
        return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
    };
}
用法示例
没有,也没有像这样的本机函数。但您可以轻松编写自己的函数。为了将来参考,这里提供了大多数处理函数的源代码:符号检测不应依赖于
-该函数应独立于提供的值的符号。@Alnitak-啊,您是对的。。。我会让你的答案保持不变并编辑我的答案。感谢大家在这方面的帮助!干杯,非常感谢!这是非常有用的!感谢您的编辑,因为您的编辑既没有用处,也没有必要。我把它们还原了。
var f2c = createRemap(32,212, 0,100); //fahrenheit to celsius
var c2f = createRemap(0,100, 32,212); //celsius to fahrenheit

f2c(-459.67) //-273.15
c2f(-273.15) //-459.6699999999999
c2f(96)      //204.8
f2c(96)      //35.55555555555556
f2c(60)      //15.555555555555555
f2c(90)      //32.22222222222222
c2f(70)      //158
c2f(-30)     //-22
c2f(0)       //32
f2c(32)      //0


var p = createRemap(0,1, 0,100);    

p(0)    //0
p(0.33) //33
p(0.5)  //50
p(0.99) //99
p(1)    //100
p(1.5)  //150
p(-0.1) //-10


var map8b10b = createRemap(0,255, 0,1023);

map8b10b(0)   //0
map8b10b(32)  //128.3764705882353
map8b10b(64)  //256.7529411764706
map8b10b(128) //513.5058823529412
map8b10b(255) //1023