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

oss*_*sse 13 processing

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

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

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

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

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

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

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

小智 23

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));
}
Run Code Online (Sandbox Code Playgroud)