Простая математическая задача - PullRequest
0 голосов
/ 05 января 2011

У меня есть набор данных, содержащий n значений от 0 до m.

Теперь я хочу отобразить эти значения в диапазоне от минимума до максимума. Но как мне это сделать? Если у меня есть в каждом объекте этот метод:

public double getValue(int min, int max) {
   // return value between min and max;
}

Думаешь, это работа?

Ответы [ 3 ]

5 голосов
/ 05 января 2011

Попробуйте:

return min + (max - min) * (val / m);
3 голосов
/ 05 января 2011

Если вы говорите о отображении диапазона от 0..m до min..max, то, конечно, это всего лишь вопрос:

newval = val * (max - min) / m + min

, что, конечно, позволяет использовать любые целочисленные значения / числа с плавающей точкой, такие как непреднамеренное округление.

Умножение на (max - min) / m масштабирует его до правильного диапазона, а добавление min даст правильное нижнее смещение.

2 голосов
/ 05 января 2011

Этот код является немного более общим (не только для диапазона 0 м, но и для любого исходного диапазона):

public double GetValue(int value, 
                       int min, 
                       int max, 
                       int originalMin, 
                       int originalMax) 
{
   return min + (double)(value - originalMin) * (max - min) / (originalMax - originalMin);
}
// in your case originalMin = 0, and originalMax = m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...