Преобразование чисел внутри диапазона в номера в другом диапазоне

Возможный дубликат:
Преобразовать диапазон чисел в другой диапазон, поддерживая коэффициент

Итак, у меня есть функция, которая возвращает значения в пределах 0 и 255, и мне нужно преобразовать эти значения в значения от -255 до 255 Так что 200 будет примерно 145, 150 - примерно 45 и так далее. Я просмотрел Преобразование диапазона чисел в другой диапазон, поддерживая коэффициент, но формулы там не будут работать. Любая другая формула, которую я мог бы использовать?

Ответ 1

Попробуйте следующее:

int Adjust( int num )
{
    return num * 2 - 255;
}

Ответ 2

public static int ConvertRange(
    int originalStart, int originalEnd, // original range
    int newStart, int newEnd, // desired range
    int value) // value to convert
{
    double scale = (double)(newEnd - newStart) / (originalEnd - originalStart);
    return (int)(newStart + ((value - originalStart) * scale));
}

Ответ 3

Общее решение для произвольного диапазона...

var val1 = 200;
var min1 = 0;
var max1 = 255;
var range1 = max1 - min1;

var min2 = -255;
var max2 = 255;
var range2 = max2 - min2;

var val2 = val1*range2/range1 + min2;

Ответ 4

public int ConvertRange(
           int originalStart, int originalEnd,
           int newStart, int newEnd,
           int value)
{

  int originalDiff = originalEnd - originalStart;
  int newDiff = newEnd - newStart;
  int ratio = newDiff / originalDiff;
  int newProduct = value * ratio;
  int finalValue = newProduct + newStart;
  return finalValue; 

}

Ответ 5

Скорректировано = оригинал /255 * 510 - 255

145 = 200 / 255 * 510 - 255
 45 = 145 / 255 * 510 - 255