Відповіді:
Базова формула:
Result := ((Input - InputLow) / (InputHigh - InputLow))
* (OutputHigh - OutputLow) + OutputLow;
Ваш випадок:
Результат: = (( Введення - -1 ) / ( 1 - -1 ) * ( 255 - 0 ) + 0 ;
Звідси ви можете оптимізувати перетворення, якщо ваші коефіцієнти статичні, але компілятор, ймовірно, зробить це і сам.
Результат: = (( Введення - -1 ) / 2 ) * 255 + 0 ;
Результат: = Введення * 127,5 + 127,5 ;
Через силу масштабування та упередженості.
Від вашої вартості віднімайте мінімальне значення діапазону. Це дасть вам значення в діапазоні [0..2].
Розділіть це на ширину діапазону джерела, даючи значення в діапазоні [0..1].
Помножте це на ширину цільового діапазону, даючи значення в діапазоні [0..255].
Додайте базу цільового діапазону, щоб отримати значення в цільовому діапазоні, яке для цього випадку є таким же, як і попередній крок.
Підсумовуючи:
(v - (-1.0))
v' = 0 + ---------------- * (255 - 0)
(1.0 - (-1.0))
oldRange = oldMax - oldMin
newRange = newMax - newMin
newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin
Сподіваюся, це допомагає.
Перекладіть діапазон введення, щоб ми отримали хв до нуля, додавши 1 (від’ємне значення хв. Введення) -1 .. 1 -> 0 .. 2
Оскільки вихідний діапазон починається з нуля, нічого не робіть для цього.
Масштабуйте новий діапазон вводу, щоб він відповідав діапазону виходу, це легко, оскільки вони обидва починаються з нуля: помножте значення на 255/2 0..2 * 2/255 -> 0..255
Готово!
Приклад:
0,5 піде: (0,5 + 1) * 127,5 = 191,25 -0,5 піде: (-0,5 + 1) * 127,5 = 63,75
Скажімо, x
це оригінальний вхід і y
очікується вихід. Маємо принаймні дві точки
(x, y) (-1, 0) (1, 255)
Оскільки ми хочемо зробити лінійну інтерполяцію, ми можемо заглянути в рівняння форми
y = m*x + c
Маючи вище два пункти, ми можемо вирішити для, m
і c
як тільки це буде зроблено, ви отримаєте рівняння перетворення.
Зауважте, що цей метод працює і для інших типів рівнянь. Наприклад, якщо ви хочете експоненціальної чи квадратичної інтерполяції.
v = (1-a)*x + (a)*y
. Я не бачу, наскільки ця відповідь має велике значення для поставленого питання, тому що все, що він хоче, - це відображення діапазону.