2011-06-04 3 views
1

J'ai un nombre flottant qui représentent le pourcentage (0,0 à 100,0)%gamme mathematic - simple question

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

comme exemple: convertir ce nombre à une plage -2 à 2 ainsi: représenter = 0 seront représentés comme -2 représentent = 50 seront représentés comme 0 représentent = 100 seront représentés comme 2

EDIT: bonne réponse simple de Orbling et amis, encore que je cherche quelque chose le long des lignes de : map (valeur, fromLow, fromHigh, à Low, toHigh) Y a-t-il une fonction dans l'objectif C pour mapper une telle plage pour des valeurs plus complexes?

Répondre

1

Cela devrait faire l'affaire:

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

Explication:

  • norme est v réduite à une valeur comprise entre 0 et 1, en rapport avec r1 et r2.
  • La ligne suivante calcule le point entre t1 et t2 en utilisant la norme comme facteur de pourcentage.

Exemple d'utilisation:

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

Notez que le 25 provient de '-2-2 = 4 => 0 à 100 = 100 => 100/4 = 25'. Dans le cas où le PO ne savait pas d'où cela venait, considérez que c'est un simple calcul. – Orbling

+1

Juste parce que c'est C et considéré comme un bon style, j'ajouterais le suffixe f aux chiffres. – JustSid

+0

@JustSid merci, c'est fait. –