математический диапазон — простой вопрос

#iphone #objective-c #math

#iPhone #objective-c #математика

Вопрос:

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

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

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

РЕДАКТИРОВАТЬ: хороший простой ответ от Orbling и друзей, все еще я ищу что-то вроде: map (value, fromLow, fromHigh, toLow, toHigh) Есть ли функция в objective C для отображения такого диапазона для более сложных значений?

Ответ №1:

 represent = (represent / 25.0f) - 2.0f;
  

Комментарии:

1. Обратите внимание, что 25 происходит от -2 to 2 = 4 => 0 to 100 = 100 => 100/4 = 25 . В случае, если OP не знал, откуда это взялось, считайте, что это простая математика.

2. Просто потому, что это C и считается хорошим стилем, я бы добавил суффикс f к числам.

3. Круглые скобки в этом случае излишни.

4. Лично я бы для начала просто использовал удвоения, чтобы сохранить точность как можно дольше.

5. @ShiShi: Смотрите мой ответ о map функции, которая это делает.

Ответ №2:

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

 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, используя норму в качестве процентного коэффициента.

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

 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