Jawaban:
Formula dasar adalah:
Result := ((Input - InputLow) / (InputHigh - InputLow))
* (OutputHigh - OutputLow) + OutputLow;
Kasus Anda:
Hasil: = (( Input - -1 ) / ( 1 - -1 ) * ( 255 - 0 ) + 0 ;
Dari sini Anda dapat mengoptimalkan konversi jika koefisien Anda statis, tetapi kompiler mungkin akan melakukannya sendiri juga.
Hasil: = (( Input - -1 ) / 2 ) * 255 + 0 ;
Hasil: = Input * 127.5 + 127.5 ;
Melalui kekuatan penskalaan dan bias.
Dari nilai Anda, kurangi nilai minimum rentang Anda. Itu akan memberi Anda nilai dalam kisaran [0..2].
Bagilah dengan lebar rentang sumber, yang memberi Anda nilai dalam kisaran [0..1].
Lipat gandakan dengan lebar rentang target, memberi Anda nilai dalam kisaran [0..255].
Tambahkan basis rentang target untuk mendapatkan nilai dalam rentang target, yang untuk kasus ini sama dengan langkah sebelumnya.
Singkatnya:
(v - (-1.0))
v' = 0 + ---------------- * (255 - 0)
(1.0 - (-1.0))
oldRange = oldMax - oldMin
newRange = newMax - newMin
newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin
Semoga ini membantu.
Terjemahkan rentang input sehingga kami mendapatkan min ke nol dengan menambahkan 1 (nilai negatif dari input min) -1 .. 1 -> 0 .. 2
Ketika rentang output dimulai dengan nol, jangan lakukan apa pun untuk itu.
Skala rentang input baru sehingga sesuai dengan rentang output, ini mudah karena sekarang keduanya dimulai dari nol: kalikan nilainya dengan 255/2 0..2 * 2/255 -> 0..255
Selesai!
Contoh:
0,5 akan: (0,5 + 1) * 127,5 = 191,25 -0,5 akan:: -0,5 + 1) * 127,5 = 63,75
Katakanlah x
input asli dan y
output yang diharapkan. Kami memiliki setidaknya dua poin
(x, y) (-1, 0) (1, 255)
Karena kita ingin melakukan interpolasi linier, kita dapat melihat persamaan bentuk
y = m*x + c
Dengan dua poin di atas, kita bisa menyelesaikan m
dan c
Setelah itu selesai, Anda mendapatkan persamaan transformasi.
Perhatikan metode ini juga berfungsi untuk jenis persamaan lainnya. mis. Jika Anda menginginkan interpolasi eksponensial atau kuadratik.
v = (1-a)*x + (a)*y
. Saya tidak melihat bagaimana jawaban ini memiliki banyak relevansi dengan pertanyaan yang diajukan karena yang dia inginkan hanyalah pemetaan jangkauan.