Autor Beitrag
Ares
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 128



BeitragVerfasst: Mi 20.07.11 14:32 
Hallo!

Ich bastel jetzt schon eine Ganze weile daran, und bekomme es einfach nicht vernünftig hin:
In einem Label wird ein Dezimalwert angezeigt (4 Nachkommastellen). Dieser soll nun auf einen neuen Wert geändert werden wobei die Änderung im Label angezeigt wird. Der aktuelle Wert soll also bis zum neuen Wert rauf oder runter gezählt werden. Das reine rauf oder runter Zählen ist mit hilfe eines Timers kein Problem.

Es sieht aber nicht schön aus, wenn "linear" gezählt wird, sich der Wert also in jedem Schritt um den gleichen Betrag ändert. Das Zählen zu verlangsamen, also die Abstände zwischen den Timeraufrufen zu verlängenr sieht ebenfalls nicht gut aus. Daher würde ich gerne einen "Ease-out" Effekt beim Zählen verwenden. Die Differenz zwischen neuem und aktuellem Wert soll also erst in sehr großen Schritten abnehmen und die Schritte dann immer kleiner werden. Egal wie groß die Differenz ist, die Änderung soll immer gleich lange dauern. Wie mache ich das?

Vor langer Zeit war ich gar nicht mal so schlecht in Mathe aber jetzt stelle ich fest, dass ich quasi nichts mehr kann :-)

Ich brauche also eien Funktion die zunächst schnell fällt und sich dann abflacht. Aber sah so eine Funktion noch mal aus? S-Funktionen, die also ein "Ease-Out" UND ein "Ease-In" haben, sind mir schon genug eingefallen. Aber ein reines Ease-Out will mir nicht gelingen.

Weiß jemand Hilfe?
Besten Dank
Ares

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ach ja, die Funktion benötige ich in Delphi und dann auch in einem C# Programm. Ich kann also keine Funktionen verwenden die aus irgendeiner fertigen Bibliothek stammen (wie z.B. smoothstep bei Python).
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Mi 20.07.11 14:47 
user profile iconAres hat folgendes geschrieben Zum zitierten Posting springen:

Ich brauche also eien Funktion die zunächst schnell fällt und sich dann abflacht. Aber sah so eine Funktion noch mal aus?

Das ist alles ziemlich subjektiv und unspezifisch, aber im Prinzip sollten doch Funktionen wie f(x) = exp(-x) oder f(x) = 1/(1+x*x) geeignet sein. Es kommt halt auch auf die Argumente und deren Skalierung an.
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 434
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Mi 20.07.11 15:02 
Wie wärs mit folgendem:

n mal (per Timer):

Labelwert := Labelwert+(gewünschter Wert-Labelwert)/2

und zum Schluß:
Labelwert := gewünschter Wert

Bei n=10 ist beim letzten Durchlauf der Unterschied Labelwert/gewünschter Wert
schon recht gering (tausendstel)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 20.07.11 15:20 
Geeignete Funktionen sollten sich nach kurzer Suche in Hülle und Fülle finden lassen: sol.gfxile.net/interpolation/

_________________
>λ=