Respostas:
A fórmula base é:
Result := ((Input - InputLow) / (InputHigh - InputLow))
* (OutputHigh - OutputLow) + OutputLow;
Seu caso:
Resultado: = (( Entrada - -1 ) / ( 1 - -1 ) * ( 255 - 0 ) + 0 ;
A partir daqui, você pode otimizar a conversão se seus coeficientes forem estáticos, mas o compilador provavelmente fará isso sozinho.
Resultado: = (( Entrada - -1 ) / 2 ) * 255 + 0 ;
Resultado: = Entrada * 127,5 + 127,5 ;
Através do poder da escala e do viés.
Do seu valor, subtraia o valor mínimo do seu intervalo. Isso fornecerá um valor no intervalo [0..2].
Divida isso pela largura do intervalo de origem, fornecendo um valor no intervalo [0..1].
Multiplique isso pela largura do intervalo de destino, fornecendo um valor no intervalo [0..255].
Adicione a base do intervalo de destino para obter um valor no intervalo de destino, que neste caso é o mesmo da etapa anterior.
Em suma:
(v - (-1.0))
v' = 0 + ---------------- * (255 - 0)
(1.0 - (-1.0))
oldRange = oldMax - oldMin
newRange = newMax - newMin
newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin
Espero que isto ajude.
Traduza o intervalo de entrada para obter o mínimo em zero, adicionando 1 (o valor negativo da entrada mínima) -1 .. 1 -> 0 .. 2
Como o intervalo de saída começa com zero, não faça nada para isso.
Dimensione a nova faixa de entrada para que ela se ajuste à faixa de saída, isso é fácil, pois agora ambos começam em zero: multiplique o valor por 255/2 0..2 * 2/255 -> 0..255
Feito!
Exemplo:
0,5 será: (0,5 + 1) * 127,5 = 191,25 -0,5 será: (-0,5 + 1) * 127,5 = 63,75
Digamos que x
seja a entrada original e a y
saída esperada. Temos pelo menos dois pontos
(x, y) (-1, 0) (1, 255)
Como queremos fazer uma interpolação linear , podemos olhar para a equação da forma
y = m*x + c
Com acima de dois pontos, podemos resolver m
e c
Uma vez feito isso, você obtém a equação de transformação.
Observe que este método também funciona para outros tipos de equações. Por exemplo, se você deseja uma interpolação exponencial ou quadrática.
v = (1-a)*x + (a)*y
. Não vejo como essa resposta tenha muita relevância para a pergunta, pois tudo o que ele quer é um mapeamento de alcance.