Hallo zusammen,
ich suche einen Algorithmus für folgende Situation in einem Programm für C++ und Qt Bibliotheken (geschrieben wird das ganze im QtCreator)
Ein Ball ist in Bewegung. Dabei durchläuft er eine Farbveränderung, wobei jeder Bewegung um ein Pixel eine Farbveränderung um "eins" entspricht. Dabei geht der Farbverlauf von RGB {0, 0, 0} zunächst zu {255, 0, 0} danach zu {255, 255, 0} danach: { 255, 255, 255 }, {0, 255, 255}, { 0, 0, 255}, { 0, 0, 0 } wonach er sich wiederholt.
Der Ball wird folgendermaßen befüllt:
1 | painter.setBrush(QBrush(QColor(colorX, colorY, colorZ), Qt::SolidPattern)); |
Nun ist dies mein Lösungsansatz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | if (increment) // increment = 1 also ist der Ball in Bewegung switch (color) { case 0: if (colorX <= 255 && colorY == 0 && colorZ == 0) { colorX++; } else color = 1; //break; case 1: if (colorX >= 255 && colorY <= 255 && colorZ == 0) { colorX = 255; colorY++; } else color = 2; //break; case 2: if (colorX >= 255 && colorY >= 255 && colorZ <= 255) { colorX = 255; colorY = 255; colorZ++; } else color = 3; //break; case 3: if (colorX >= 255 && colorY >= 255 && colorZ >= 255) { colorX--; colorY = 255; colorZ = 255; } else color = 4; //break; case 4: if (colorX <= 0 && colorY >= 255 && colorZ >= 255){ colorX = 0; colorY--; colorZ = 255; } else color = 5; //break; case 5: if (colorX <= 0 && colorY <= 0 && colorZ >= 255){ colorX = 0; colorY = 0; colorZ--; } else color = 6; //break; case 6: if (colorX <= 0 && colorY <= 0 && colorZ <= 0){ colorX = 0; colorY = 0; colorZ = 0; } color = 0; //break; } |
Der Ball durchläuft ein paar Farben und bleibt dann weiß. Wo ist hier der Fehler? Hat jemand hier eine elegantere Variante?
Danke und grüße eurer Phil