Generuję tereny i mam bibliotekę perlin, która podaje mi losowe liczby od -1 do +1. Chcę przekonwertować to na skalę 0-255. Jak to zrobić w odpowiedni sposób?
mathematics
Tracja
źródło
źródło
Zakres
-1
do1
jest całkowitym zakresem2
. Musisz więc odpowiednio skalować, aby dostać się do255
. Coś takiego:Więc najpierw dodajesz
1
, aby0..2
następnie pomnożyć przez,127.5
aby uzyskać zakres0..255
źródło
Dzięki sile skalowania i stronniczości.
Od wartości odejmij minimalną wartość zakresu. To da ci wartość z zakresu [0..2].
Podziel to przez szerokość zakresu źródłowego, dając wartość z zakresu [0..1].
Pomnóż to przez szerokość zakresu docelowego, dając wartość z zakresu [0..255].
Dodaj podstawę zakresu docelowego, aby uzyskać wartość w zakresie docelowym, który w tym przypadku jest taki sam jak w poprzednim kroku.
W podsumowaniu:
źródło
Mam nadzieję że to pomoże.
źródło
Przetłumacz zakres wejściowy, aby uzyskać min do zera przez dodanie 1 (ujemna wartość minimalnego wejścia) -1 .. 1 -> 0 .. 2
Ponieważ zakres wyjściowy zaczyna się od zera, nie rób nic dla tego.
Skaluj nowy zakres wejściowy, aby pasował do zakresu wyjściowego, jest to łatwe, ponieważ teraz oba zaczynają się od zera: pomnóż wartość przez 255/2 0..2 * 2/255 -> 0..255
Gotowy!
Przykład:
0,5 pójdzie: (0,5 + 1) * 127,5 = 191,25 -0,5 pójdzie: (-0,5 + 1) * 127,5 = 63,75
źródło
Powiedzmy, że
x
to oryginalne wejście iy
oczekiwane wyjście. Mamy co najmniej dwa punkty (x, y) (-1, 0) (1, 255)Ponieważ chcemy wykonać interpolację liniową , możemy przyjrzeć się równaniu formy
y = m*x + c
Z powyższymi dwoma punktami możemy rozwiązać
m
ic
Gdy to zrobisz, otrzymasz równanie transformacji.Uwaga: ta metoda działa również w przypadku innych typów równań. np. jeśli chcesz interpolacji wykładniczej lub kwadratowej.
źródło
v = (1-a)*x + (a)*y
. Nie rozumiem, w jaki sposób ta odpowiedź ma duże znaczenie dla zadanego pytania, ponieważ wszystko, czego chce, to mapowanie zasięgu.