2011-06-04 59 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