W.A. schrieb:
> Meier schrieb:
>> gibt es eine Möglichkeit, bei der Rundungsfehler am besten nicht ins
>> Gewicht fallen.
>
> Das kommt auf deinen Maßstab drauf an.
Hätte ich jetzt auch gesagt.
Wenn man die RGB Werte im Zahlenraum 0 bis 255 als ganze Zahl benutzt
und auch für HSV entsprechende Zahlenrräume benutzt (H 0 bis 360, S und
V 0 bis 255) dann ist es relativ simpel eventuelle float
Kummulierungsfehler durch eine Rundungskorrektur vor dem Niedercasten
auf int loszuwerden. Einfach 0.5 addieren.
Ansonsten:
so gross sind die Wertebereiche dann auch wieder nicht, dass man den AVR
mal ein paar Minuten damit beschäftigen kann, alle möglichen
Kombinationen von RGB nach HSV und wieder zurück wandeln zu lassen und
mit den Ausgangswerten zu vergleichen. Dann hat man die Gewähr, dass das
für alle vorkommenden Kombinationen auch tatsächlich einwandfrei
funktioniert, weil man es ja getestet hat
1 | for( R = 0; R < 255; R++ ) {
|
2 | for( G = 0; G < 255; G++ ) {
|
3 | for( B = 0; B < 255; B++ ) {
|
4 |
|
5 | rgbToHsv( R, G, B, H, S, V );
|
6 | hsvToRgb( H, S, V, R1, G1, B1 );
|
7 |
|
8 | if( R != R1 || G != G1 || B != B1 ) {
|
9 |
|
10 | Fehler! Auf LCD anzeigen, LED aufleuchten lassen
|
11 | Sirene einschalten, per UART die RGB Werte ausgeben lassen,
|
12 | die NSA benachrichtigen, auf Facebook und Twitter posten (ach
|
13 | nee, die NSA hatten wir ja schon), ....
|
14 | }
|
15 | }
|
16 | }
|
17 | }
|
18 |
|
19 | "alles ok" ausgeben
|
das mag vielleicht ein wenig dauern, aber so ein Computer hat ja Zeit.
Überhaupt in der Nacht, während du schläfst.