Преобразование чисел в диапазоне в числа в другом диапазоне [дубликат]
Возможные Дубликаты:
преобразовать диапазон в другой диапазон, сохраняя соотношение
поэтому у меня есть функция, которая возвращает значения в пределах 0 и 255, и мне нужно преобразовать эти значения во что-то между -255 и 255 Таким образом, 200 будет примерно 145, 150 будет примерно 45 и так далее.. Я посмотрел на преобразовать диапазон в другой диапазон, сохраняя соотношение но Формулы там не работают. Любой другая формула, которую я мог бы использовать?
5 ответов
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));
}
общее решение для произвольного диапазона...
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;
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;
}