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:
Nun ist dies mein Lösungsansatz:
Der Fehler muss sich irgendwo in case 3 befinden, da die Kugel ja weiß wird und sich dann nicht mehr verändert. Bei 255, 255, 255 müsste ja der Wert weiß erreicht sein. Wo ist hier der Fehler? Hat jemand hier eine elegantere Variante?
Danke und grüße
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:
Code:
painter.setBrush(QBrush(QColor(colorX, colorY, colorZ), Qt::SolidPattern));
Nun ist dies mein Lösungsansatz:
Code:
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 Fehler muss sich irgendwo in case 3 befinden, da die Kugel ja weiß wird und sich dann nicht mehr verändert. Bei 255, 255, 255 müsste ja der Wert weiß erreicht sein. Wo ist hier der Fehler? Hat jemand hier eine elegantere Variante?
Danke und grüße