Hi, LED Matrix mal wieder und eigentlich ein einfaches Problem...
Ich will den Inhalt eines Rechtecks in ein (nicht überlappendes) zweites Rechteck hineinskalieren (vergrößern/verkleinern/verzerren).
Gegeben sind 8 Werte:
x und y von Quellrechteck und Zielrechteck jeweils Punkt oben links und Punkt unten rechts.
x0, y0 und x1, y1 definieren die Quelle;
x2, y2 und x3, y3 definieren das Ziel.
Lösungsidee:
1. Länge und Breite des Ziels ermitteln, 2 verschachtelte for-Schleifen, um jeden Punkt des Ziels anzusprechen.
2. proportional entsprechenden Punkt aus der Quelle suchen und Inhalt ins Ziel kopieren.
Lösung dafür (Betrachtung nur x-Achse):
Länge Ziel/aktueller x Wert im Ziel = Länge Quelle/gesuchten Punkt
Umgestellt: gesuchter Punkt = ((x1-x0) * x)/(x3-x2)
Komplett in Code:
void Scale(byte x0, byte y0, byte x1, byte y1, byte x2, byte y2 ,byte x3, byte y3) {
for(int y = y2; y < y3+1; y++) {
for(int x = x2; x < x3+1; x++) {
leds[XY(x,y)] = leds[XY(
x0 + ( x * ( (x1-x0) / (x3-x1) ) ),
y0 + ( y * ( (y1-y0) / (y3-y1) ) ) )];
}
}
}
Funktioniert aber nicht.
Jemand 'ne Idee, wo der Fehler liegt, oder wie man es besser macht?
Helmuth