2011-06-04 62 views
1

我有代表百分比(0.0至100.0)%数学范围 - 简单的问题

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

作为一个例子的浮点数:这个数字转换为范围从-2到2 从而: 表示= 0将被表示为-2 表示为0 代表= 100为2

EDIT表示= 50将表示:从Orbling和朋友 好简单的回答,不过我找了沿东西线:map(value,fromLow,fromHigh,to低,toHigh) 目标C中是否有一个函数将这个范围映射为更复杂的值?

回答

1

这应该做的伎俩:

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 
4
represent = (represent/25.0f) - 2.0f; 
+1

注意,25来自'-2至2 = 4 => 0至100 = 100 => 100/4 = 25'。如果OP不知道从哪里来,请认为这是一个简单的数学运算。 – Orbling 2011-06-04 11:47:21

+1

仅仅因为这是C并且被认为是很好的风格,我会为数字添加f后缀。 – JustSid 2011-06-04 11:48:11

+0

@JustSid谢谢,完成。 – 2011-06-04 11:52:05