Moin,
es geht um lineares runterskalieren eines 2d Byte Arrays in ein Rechteck.
x1, y1, x2, y2 sind Eck-Koordinaten als Bytes, noise ist ein 2d Byte Array. kMatrixWidth und kMatrixHight ist die Groesse des Noise Arrays (16x16).
for(int i = x1; i <= x2; i++) {
for(int j = y1; j <= y2; j++) {
uint8_t index = noise[i * kMatrixWidth / (x2-x1)][j * kMatrixHeight / (y2-y1)];
uint8_t bri = 255;
CRGB color = ColorFromPalette( currentPalette, index, bri);
leds[XY(i,j)] = color;
}
}
Funktioniert nicht wie geplant. Immer Geflacker in der letzten Zeile/Spalte, bei machen Koordinatenkombinationen nur ein gleichfarbiges Rechteck.
Warum? Rundungsfehler bei der Division?
Andere Formel bzw. diese Formel umstellen oder mit 16 Bit Werten rechnen und am Ende nur die oberen 8 Bit verwenden?
Oder wie wuerdet Ihr das machen?
Beste Gruesse
Helmuth
edit: Ok, habe es hinbekommen.
[code]
for(int i = x1; i <= x2; i++) {
for(int j = y1; j <= y2; j++) {
uint8_t index = noise[i * (kMatrixWidth-1) / (x2-x1)][j * (kMatrixHeight-1) / (y2-y1)];
uint8_t bri = 255;
CRGB color = ColorFromPalette( currentPalette, index, bri);
leds[XY(i,j)] = color;
}
}
[/code]