处理中的map()函数如何工作?

时间:2013-06-16 15:29:05

标签: processing

我正在上一个使用Processing的课程。

我在理解map()函数时遇到了问题。

根据它的文档(http://www.processing.org/reference/map_.html):

  

将数字从一个范围重新映射到另一个范围。

     

在上面的第一个示例中,数字25从0到100范围内的值转换为从窗口(0)的左边缘到右边缘(宽度)的范围内的值。

     

如第二个示例所示,范围之外的数字不会被限制在最小和最大参数值,因为超出范围的值通常是有意和有用的。

是否类似于随机函数,但范围是由用户设置的?另外,我无法理解第一个例子的解释:它表示数字被转换为0到100的值,其值从屏幕的边缘到边缘。我在想为什么不直接转换,数字25到与屏幕有关的值范围?

3 个答案:

答案 0 :(得分:21)

map()函数是一个有用的快捷方式,您不会后悔花在理解它上面的时间 这是它的语法:

variable2 = map(variable1,min1,max1,min2,max2);

该函数在两个值范围之间建立比例:

min1:min2 = max1:max2

你可以把它读作:min1 min2 max1 max2。
variable1 存储第一个范围 min1~max1之间的值。
  variable2 获取第二个范围 min2~max2之间的值。

这是函数为程序员解决的等式:

variable2 = min2 +(max2-min2)*((variable1-min1)/(max1-min1))

这是Processing map()函数背后的Java代码:

static public final float map(float value, 
                              float istart, 
                              float istop, 
                              float ostart, 
                              float ostop) {
    return ostart + (ostop - ostart) * ((value - istart) / (istop - istart));
}

答案 1 :(得分:2)

这样想:将0到10的范围分成100个相等的部分。 (你将获得每部分0.1)现在将范围0到100分成100个相等的部分(每个部分你会得到1个)所以0到10范围内的0.1在0到100的范围内等于1。如果你想要的话找到0到10范围内的5属于0到100的范围,将0除以0到10的大小,并将该数乘以0到100的大小,你就得到你的答案! (50)

P.S。我知道这不是它的实际效果,但我只是想举一个例子来澄清事情。

答案 2 :(得分:0)

如果您仔细考虑一下,

只不过是计算百分比而已,

以百分比表示,最终范围是0-100,初始范围是0-最大值(例如,您在所有主题中的最高分数是500,那么初始范围是0-500)

现在为您提供解决方案:

逐步了解

n-您的电话号码

(initialMin-initialMax)您的初始范围

(finalMin-finalMax)您的最终范围

然后

n

________________________ X(finalMax-finalMin)=说N

(initialMax-initialMin)

现在N就像百分比一样,而不是0到100的范围,您将0到(finalMax-finalMin)作为范围

因此将其转换为map()函数在处理中所做的finalMin到finalMax范围,

只需 N = N + finalMin

现在您得到的答案是N

希望你们能理解解决方案>>>