14

I'm taking a class which uses Processing.

I having a problem understanding the map() function.

According to it's documentation(http://www.processing.org/reference/map_.html):

Re-maps a number from one range to another.

In the first example above, the number 25 is converted from a value in the range of 0 to 100 into a value that ranges from the left edge of the window (0) to the right edge(width).

As shown in the second example, numbers outside of the range are not clamped to the minimum and maximum parameters values, because out-of-range values are often intentional and useful.

Is is similar to a random function but the range is set by the user? Also, i cant understand the explanation for the first example: it says the number is converted to a value of 0 to 100 into a value that ranges from edge to edge of the screen. im thinking why not just convert directly, the number 25 to the range of value pertaining to the screen?

4

3 回答 3

30

map()功能是一个有用的快捷方式,您不会后悔花时间理解它。
这是它的语法:

变量 2 = 地图(变量 1,min1,max1,min2,max2);

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

min1:min2 = max1:max2

您可以将其解读为:min1min2就像max1max2 一样。
variable1存储第一个范围min1~max1 之间的值。
variable2获取第二个范围min2~max2 之间的值。

这是函数为程序员求解的方程:

变量2 = 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));
}
于 2013-06-16T16:34:26.807 回答
2

可以这样想:将 0 到 10 的范围分成 100 个相等的部分。(您将得到每部分 0.1)现在将 0 到 100 的范围分成 100 个相等的部分(每部分您将得到 1),因此 0 到 10 范围内的 0.1 等于 0 到 100 范围内的 1。如果你想要要找到 0 到 10 范围内的 5 属于 0 到 100 范围内的哪个位置,请将 5 除以 0 到 10 部分的大小,然后将该数字乘以 0 到 100 部分的大小,您就会得到答案!(50)

PS我知道这不是它的实际工作方式,但我只是想我会举一个例子来澄清事情。

于 2014-02-04T23:25:33.470 回答
1

如果你仔细想想,

无非就是计算百分比,

以百分比表示,您的最终范围为 0-100,初始范围为 0 - 最大值(例如,所有科目的最高分数为 500,则初始范围为 0 - 500),

现在对于解决方案,您可以做什么:

逐步了解

n - 你的号码

(initialMin - initialMax) 你的初始范围

(finalMin - finalMax) 你的最终范围

然后,

n

_______________________ X (finalMax - finalMin) = 说 N

(初始最大值 - 初始最小值)

现在 N 完全像百分比,而不是 0 到 100 作为范围,你有 0 到 (finalMax-finalMin) 作为范围

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

只做N = N + finalMin

现在你得到的答案是 N

希望大家理解解决方案>>>

于 2019-09-15T15:13:27.203 回答