Rückgabewert von 0 bis 1: brauche aber 1 bis 0

Hallo,

ich bin zwar an einer Android Anwendung dran, da ich in meiner Frage aber nach einem allgemeinen Algorithums suche stell ich sie hier rein:

Ich habe ein Element, das sich von oben nach unten bewegt. Die Bewegung bekomme ich über eine Variable (Float) mit. Die Variable hat am Start (=Unten) 0 und am Ziel (=Oben) 1. In der Bewegung die Werte zwischen 0 und 1.

Ich komme nicht dahinter, wie ich die Rückgabewerte der Variable umgedreht berechnen kann.
Start soll sein 1 und Ziel soll den Wert 0 haben. Die Bewegung dazwischen von 1 auf 0. Also quasi die Umkehrung.

Hat jemand von Euch eine Ahnung, wie ich das anstellen kann?

Danke
GGK

Ich denke ein einfaches “1-Wert” sollte da genügen.

Das gibts ja nicht…verflixt und zugenäht…danke Dir!!!

GGK

Die Aufgabe, einen Bereich linear auf einen anderen abzubilden, kommt so oft vor (weil sie so universell und so wichtig ist), dass ich tatsächlich überlegt habe, die passende Funktion in irgendeine Lib zu packen (zusammen mit ein paar anderen, ähnlich trivialen).

Für [0,1] -> [1,0] ist das ziemlich witzlos, zugegeben. Aber wenn man “oft” beliebige intervalle [a,b] auf [x,y] abbilden will, kann man das recht generisch hinschreiben:

import java.util.function.DoubleUnaryOperator;

public class RangeMapTest {
    public static void main(String[] args) {

        DoubleUnaryOperator op = map(0.0, 1.0, 1.0, 0.0);

        System.out.println("0.0 becomes " + op.applyAsDouble(0.0));
        System.out.println("0.2 becomes " + op.applyAsDouble(0.2));
        System.out.println("0.5 becomes " + op.applyAsDouble(0.5));
        System.out.println("0.8 becomes " + op.applyAsDouble(0.8));
        System.out.println("1.0 becomes " + op.applyAsDouble(1.0));
    }

    private static DoubleUnaryOperator map(
            double sourceMin, double sourceMax, 
            double targetMin, double targetMax) {
        double invSourceDelta = 1.0 / (sourceMax - sourceMin);
        double targetDelta = targetMax - targetMin;
        return value -> {
            double alpha = (value - sourceMin) * invSourceDelta;
            return targetMin + alpha * targetDelta;
        };
    }
}