математический диапазон - простой вопрос - PullRequest
1 голос
/ 04 июня 2011

У меня есть число с плавающей запятой, которое представляет процент (от 0,0 до 100,0)%

float represent = 50.00; // fifty present, or half.

в качестве примера: преобразовать это число в диапазон от -2 до 2 таким образом: представляют = 0 будет представлен как -2 представьте = 50 будет представлен как 0 представьте = 100 будет представлен как 2

EDIT: Хороший простой ответ от Орблинга и его друзей. Тем не менее я ищу что-то вроде: map (value, fromLow, fromHigh, toLow, toHigh) Есть ли в цели C функция для отображения такого диапазона для более сложных значений?

Ответы [ 2 ]

4 голосов
/ 04 июня 2011
represent = (represent / 25.0f) - 2.0f;
1 голос
/ 04 июня 2011

Это должно сработать:

define map(v, r1, r2, t1, t2) 
{
    norm = (v-r1)/(r2-r1);
    return (t1*(1-norm) + t2*norm);
}

Объяснение:

  • норма v масштабируется до значения от 0 до 1, относящегося к r1и r2.
  • Следующая строка вычисляет точку между t1 и t2, используя norm в процентах.

Пример использования:

map (0, 0, 100, -2, 2) // 0 mapped to -2..2 in the range 0..100
-2.0
map (50, 0, 100, -2, 2) // 50 mapped to -2..2 in the range 0..100
0
map (100, 0, 100, -2, 2) // 100 mapped to -2..2 in the range 0..100
2.0
map (-90, -100, 20, -4, 2) // -90 mapped to -4..2 in the range -100..20
-3.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...