20

検索してみましたが、質問の性質上、満足のいくものを見つけることができませんでした。

私の問題は次のとおりです。0 から 2000 までの範囲の数値 (上限は調整可能であることが理想的ですが) を 10 から 100 までのはるかに小さい間隔にマップしようとしています。上限は (2000->100) にマップされ、下限も。それ以外では、間隔 [0;2000] 内の別のエントリよりも大きいエントリは、理想的には [0;100] 内のそのマッピングされたエントリよりも大きくなります。

この質問は言語固有のものではないと考えていますが、ご参考までに、私は今日 Javascript を使用しています。

4

6 に答える 6

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

use this formula
(val - A)*(b-a)/(B-A) + a

他の回答で正しく言及されているように、それは線形マッピングです。

基本的

y = m*x + c

c = intersection at y-axis
m = slope determined by two known point (A, a), (B, b) = (b-a)/(B-A)
于 2012-10-17T09:34:23.747 に答える
3
// Given a value from intervalA, returns a mapped value from intervalB.
function intervalicValueMap(intervalA, intervalB, valueIntervalA) {
    var valueIntervalB = (valueIntervalA - intervalA[0]) * (intervalB[1] - intervalB[0]) 
                            / (intervalA[1] - intervalA[0]) + intervalB[0];

    valueIntervalB = Math.round(valueIntervalB); // Ommit rounding if not needed.
    return valueIntervalB;
}

var intervalA = [100, 200];
var intervalB = [1, 10];
var valueIntervalA = 170;
var valueIntervalB = intervalicValueMap(intervalA, intervalB, valueIntervalA);

console.log(valueIntervalB); // Logs 7
于 2014-09-18T06:08:11.343 に答える
1

単純な線形マッピングは にマッピングxされx*90/2000+10ます。

于 2012-10-17T09:29:18.593 に答える