Der Trick beim Dimmen, Lautstärke regeln etc.. ist, die nonlineare
Wahrnehmung abzubilden. Wenn Du immer nur einen Wert abzählst, sieht es
so aus, als würde es Anfangs langsam und dann immer schneller dunkel
werden.
Deshalb ist es für das Empfinden angenehmer/natürlicher, wenn der Wert
schrittweise mit einem Faktor 0 < x < 1 multipliziert wird, wobei die 0
nur bei beliebig genauen reelen Zahlen nicht erreicht werden würde, in
der Praxis aber definierbar schnell erreicht wird.
Ich denke, das ganze ist mit Integers abbildbar.
Schau einfach, nach wie vielen Schritten Du von einem Standardwert (z.B.
1000) auf 0 kommst, wenn Du ihn immer wieder mit 1000 multiplizierst und
durch 1024 teilst:
1 | #include <stdio.h>
|
2 |
|
3 | int main(int argc, char** argv)
|
4 | {
|
5 | int i, n;
|
6 | i = 1000;
|
7 | for (n = 0; i > 0; ++n)
|
8 | {
|
9 | i *= 1000;
|
10 | i /= 1024;
|
11 | printf ("%d: %d\t", n, i);
|
12 | }
|
13 | }
|
gibt aus:
0: 976 1: 953 2: 930 3: 908 4: 886
...
153: 4 154: 3 155: 2 156: 1 157: 0
Bei einem Standardwert von 1000 hast Du also 158 Schritte bis zur 0. Die
kannst Du jedesmal live ausrechnen oder in einer Tabelle ablegen, ist
Geschmackssache und eine Frage des freien Speichers.
Der Gag ist, dass Du das Abdimmen dadurch machst, dass Du den jeweiligen
Wert errechnest:
Aktueller Wert = (Startwert * aktueller Faktor) / 1000