将间隔映射到较小间隔的算法

Mar*_*eau 17 mapping algorithm distribution

我试着搜索,但由于我的问题的性质,我无法找到令人满意的东西.

我的问题如下:我试图将范围从0到2000(尽管理想情况下上限可调)的数字映射到范围从10到100的小得多的区间.上限将映射(2000-> 100)和也是下限.除此之外,一个比区间[0; 2000]中的另一个条目更大的条目理想地大于[0; 100]中的映射条目

我认为这个问题不是特定于语言的,但如果您想知道,我今天正在使用Javascript.

Nis*_*ant 41

To map
[A, B] --> [a, b]

use this formula
(val - A)*(b-a)/(B-A) + a
Run Code Online (Sandbox Code Playgroud)

正如在另一个答案中正确提到的那样,它是线性映射.

基本上

y = m*x + c

c = intersection at y-axis
m = slope determined by two known point (A, a), (B, b) = (b-a)/(B-A)
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为,不是给你直接映射的公式,更好的方法是解释它背后的想法:

假设我们想要将区间[0,1]映射到区间[1,3],这可以看作是找到f(x)= Ax + B的问题,使得从区间[0,1]给出任何x,将导致f(x)为/导致区间[1,3].

从这个角度来看,我们已经知道一些价值观:

  1. x = 0&f(0)= 1 => f(0)= A*0 + B = 1 => B = 1
  2. x = 1&f(1)= 3 => f(1)= A*1 + B = 3 <=> A + 1 = 3 => A = 2

从(1)和(2),我们可以得出结论,将区间[0,1]到[1,3]的函数映射为f(x)= 2x + 1.

在你的情况下,你现在应该具备所有必要的知识,能够将[0,2000]间隔映射到[10,100].


Hen*_*rik 1

一个简单的线性映射将映射xx*90/2000+10