Réponses:
La formule de base est:
Result := ((Input - InputLow) / (InputHigh - InputLow))
* (OutputHigh - OutputLow) + OutputLow;
Ton cas:
Résultat: = (( Input - -1 ) / ( 1 - -1 ) * ( 255 - 0 ) + 0 ;
De là, vous pouvez optimiser la conversion si vos coefficients sont statiques, mais le compilateur le fera probablement lui-même également.
Résultat: = (( Entrée - -1 ) / 2 ) * 255 + 0 ;
Résultat: = entrée * 127,5 + 127,5 ;
Grâce à la puissance de la mise à l'échelle et du biais.
De votre valeur, soustrayez la valeur minimale de votre plage. Cela vous donnera une valeur dans la plage [0..2].
Divisez cela par la largeur de la plage source, en vous donnant une valeur dans la plage [0..1].
Multipliez cela par la largeur de la plage cible, en vous donnant une valeur dans la plage [0..255].
Ajoutez la base de la plage cible pour obtenir une valeur dans la plage cible, qui dans ce cas est la même que l'étape précédente.
En résumé:
(v - (-1.0))
v' = 0 + ---------------- * (255 - 0)
(1.0 - (-1.0))
oldRange = oldMax - oldMin
newRange = newMax - newMin
newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin
J'espère que cela t'aides.
Traduire la plage d' entrée pour obtenir le min à zéro en ajoutant 1 (la valeur négative de l'entrée min) -1 .. 1 -> 0 .. 2
Comme la plage de sortie commence par zéro, ne faites rien pour cela.
Mettre à l'échelle la nouvelle plage d'entrée afin qu'elle s'adapte à la plage de sortie, c'est facile car ils commencent maintenant tous les deux à zéro: multipliez la valeur par 255/2 0..2 * 2/255 -> 0..255
Terminé!
Exemple:
0,5 ira: (0,5 + 1) * 127,5 = 191,25 -0,5 ira: (-0,5 + 1) * 127,5 = 63,75
Disons qu'il xs'agit de l'entrée d'origine et de la ysortie attendue. Nous avons au moins deux points
(x, y) (-1, 0) (1, 255)
Puisque nous voulons faire une interpolation linéaire, nous pouvons regarder l'équation de forme
y = m*x + c
Avec plus de deux points, nous pouvons résoudre metc
Une fois cela fait, vous obtenez l'équation de transformation.
Notez que cette méthode fonctionne également pour d'autres types d'équations. par exemple, si vous voulez une interpolation exponentielle ou quadratique.
v = (1-a)*x + (a)*y . Je ne vois pas en quoi cette réponse a beaucoup de pertinence avec la question posée car tout ce qu'il veut, c'est une cartographie des plages.