Ich mache Terrain-Generierung und ich habe eine Perlin-Bibliothek, die mir Zufallszahlen zwischen -1 und +1 gibt. Ich möchte dies auf die Skala von 0-255 umrechnen. Was ist der richtige Weg, um dies zu tun?
mathematics
Thraka
quelle
quelle
Der Bereich
-1
bis1
ist ein Gesamtbereich von2
. Sie müssen es also entsprechend skalieren, um zu gelangen255
. Etwas wie das:Sie addieren also zunächst
1
, um0..2
dann multiplizieren zu können127.5
, um eine Reihe von zu erhalten0..255
quelle
Durch die Kraft von Skalierung und Voreingenommenheit.
Subtrahieren Sie von Ihrem Wert den Mindestwert Ihres Bereichs. Das ergibt einen Wert im Bereich [0..2].
Teilen Sie dies durch die Breite des Quellbereichs und geben Sie einen Wert im Bereich [0..1] an.
Multiplizieren Sie dies mit der Breite des Zielbereichs, um einen Wert im Bereich [0..255] zu erhalten.
Fügen Sie die Basis des Zielbereichs hinzu, um einen Wert im Zielbereich zu erhalten, der in diesem Fall mit dem vorherigen Schritt identisch ist.
Zusammenfassend:
quelle
Hoffe das hilft.
quelle
Übersetzen Sie den Eingangsbereich , so dass wir die min auf Null durch Zugabe von 1 (der negative Wert des min - Eingang) erhalten -1 .. 1 -> 0 .. 2
Da der Ausgabebereich mit Null beginnt, nichts dafür tun.
Skalieren Sie den neuen Eingabebereich so, dass er zum Ausgabebereich passt. Dies ist einfach, da beide jetzt bei Null beginnen: Multiplizieren Sie den Wert mit 255/2 0..2 * 2/255 -> 0..255
Getan!
Beispiel:
0,5 ergibt: (0,5 + 1) * 127,5 = 191,25 -0,5 ergibt: (-0,5 + 1) * 127,5 = 63,75
quelle
Nehmen wir an, es
x
handelt sich um die ursprüngliche Eingabe undy
die erwartete Ausgabe. Wir haben mindestens zwei Punkte (x, y) (-1, 0) (1, 255)Da wir eine lineare Interpolation durchführen wollen, können wir die Formgleichung untersuchen
y = m*x + c
Mit den obigen zwei Punkten können wir lösen
m
undc
sobald dies erledigt ist, erhalten Sie die Transformationsgleichung.Beachten Sie, dass diese Methode auch für andere Arten von Gleichungen funktioniert. zB Wenn Sie eine exponentielle oder quadratische Interpolation wünschen.
quelle
v = (1-a)*x + (a)*y
. Ich verstehe nicht, wie wichtig diese Antwort für die gestellte Frage ist, da er nur eine Bereichszuordnung haben möchte.