#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