Yanıtlar:
Temel formül:
Result := ((Input - InputLow) / (InputHigh - InputLow))
* (OutputHigh - OutputLow) + OutputLow;
Senin durumun:
Sonuç: = (( giriş - -1 ) / ( 1 - -1 ) * ( 255 - 0 ) + 0 ;
Buradan, katsayılarınız statikse dönüşümü optimize edebilirsiniz, ancak derleyici muhtemelen kendi başına da yapacaktır.
Sonuç: = (( Girdi - -1 ) / 2 ) * 255 + 0 ;
Sonuç: = Giriş * 127,5 + 127,5 ;
Ölçeklendirme ve önyargı gücü sayesinde.
Değerinizden, aralığınızın minimum değerini çıkarın. Bu size [0..2] aralığında bir değer verecektir.
Bunu kaynak aralığı genişliğine bölün ve size [0..1] aralığında bir değer verin.
Bunu hedef aralığın genişliği ile çarpın ve size [0..255] aralığında bir değer verin.
Hedef aralıkta bir değer elde etmek için hedef aralığın tabanını ekleyin; bu durumda önceki adımla aynıdır.
Özetle:
(v - (-1.0))
v' = 0 + ---------------- * (255 - 0)
(1.0 - (-1.0))
oldRange = oldMax - oldMin
newRange = newMax - newMin
newValue = ((oldValue - oldMin) * newRange / oldRange) + newMin
Bu yardımcı olur umarım.
1 (min girişinin negatif değeri) -1 ekleyerek min'i sıfıra indirecek şekilde giriş aralığını çevirin. -1 .. 1 -> 0 .. 2
Çıkış aralığı sıfır ile başladığında, bunun için hiçbir şey yapmayın.
Yeni giriş aralığını çıkış aralığına uyacak şekilde ölçeklendirin, artık her ikisi de sıfırdan başladığı için bu kolay: değeri 255/2 0,2 * 2/255 -> 0,,255 ile çarpın
Bitti!
Misal:
0.5 gidecek: (0.5 + 1) * 127.5 = 191.25 -0.5 gidecek: (-0.5 + 1) * 127.5 = 63.75
Diyelim ki x
orijinal girdi ve y
beklenen çıktı. En az iki noktamız var
(x, y) (-1, 0) (1, 255)
Doğrusal bir enterpolasyon yapmak istediğimizden , form denklemine bakabiliriz
y = m*x + c
Yukarıdaki iki nokta ile, m
vec
yapıldıktan sonra, dönüşüm denklemini elde edersiniz.
Bu yöntemin diğer denklem türleri için de işe yaradığını unutmayın. Örneğin, üstel veya karesel bir enterpolasyon istiyorsanız.
v = (1-a)*x + (a)*y
. Bu cevabın, tek istediği bir menzil haritalaması olduğu için sorulan soru ile ne kadar ilgili olduğunu görmüyorum.