Wie ordne ich Zahlen linear zwischen a und b zu, um zwischen c und d zu wechseln?
Das heißt, ich möchte, dass Zahlen zwischen 2 und 6 Zahlen zwischen 10 und 20 zugeordnet werden ... aber ich brauche den verallgemeinerten Fall.
Mein Gehirn ist gebraten.
Antworten:
Wenn Ihre Zahl X zwischen A und B liegt und Sie möchten, dass Y zwischen C und D liegt, können Sie die folgende lineare Transformation anwenden:
Das sollte Ihnen das geben, was Sie wollen, obwohl Ihre Frage etwas mehrdeutig ist, da Sie das Intervall auch in umgekehrter Richtung abbilden könnten. Achten Sie einfach auf die Division durch Null und Sie sollten in Ordnung sein.
quelle
Y=f(X)=m*X+b
m und b gleichzeitig aus den folgenden zwei Bedingungsgleichungen bestimmt wurden, die sich aus dem Ersetzen der Werte von X und Y an den erforderlichen Endpunkten ergeben:C=m*A+b
undD=m*B+b
X=A+(A-B)*t
die Gleichheit zwischen diesem Ansatz und dem von Peter beweisen. t ist im Wesentlichen eine Nichtdimensionierung von X. (t=(X-A)/(A-B)
)Teilen Sie, um das Verhältnis zwischen den Größen der beiden Bereiche zu erhalten, subtrahieren Sie dann den Startwert Ihres Anfangsbereichs, multiplizieren Sie ihn mit dem Verhältnis und addieren Sie den Startwert Ihres zweiten Bereichs. Mit anderen Worten,
Dadurch werden die Zahlen aus dem ersten Bereich im zweiten Bereich gleichmäßig verteilt.
quelle
Es wäre schön, diese Funktionalität in der
java.lang.Math
Klasse zu haben, da dies eine so häufig benötigte Funktion ist und in anderen Sprachen verfügbar ist. Hier ist eine einfache Implementierung:Ich setze diesen Code hier als Referenz für die Zukunft selbst ein und kann jemandem helfen.
quelle
Abgesehen davon ist dies das gleiche Problem wie beim klassischen Konvertieren von Celcius in Farenheit, bei dem Sie einen Zahlenbereich abbilden möchten, der 0 - 100 (C) bis 32 - 212 (F) entspricht.
quelle
Jedes Einheitsintervall im ersten Bereich nimmt (dc) / (ba) "Raum" im zweiten Bereich ein.
Pseudo:
Wie Sie mit der Rundung umgehen, liegt bei Ihnen.
quelle
Natürlich mit Überprüfungen der Division durch Null.
quelle
Wenn Ihr Bereich von [a bis b] reicht und Sie ihn in [c bis d] abbilden möchten, wobei x der Wert ist, den Sie abbilden möchten, verwenden Sie diese Formel (lineare Zuordnung).
quelle
https://rosettacode.org/wiki/Map_range
quelle
Wenn Sie das Ergebnis rückgängig machen möchten, verwenden Sie zusätzlich zur Antwort @PeterAllenWebb Folgendes:
quelle