Liebes Java-Forum
Ich habe die Aufgabe einen Rasterisierer zu schreiben und hänge an der Stelle, daß ich nicht Linien mit negativer Steigung darstellen kann. Wie kann man das korrigieren?
Erklärung: Es gibt zwei Punkte und Koordinaten. Die Linie zeichne ich pixelweise mittels einer Formel, die aus dem Buch: "Fundamentals of Computergraphics" stammt:
(y0 − y1 )*x + (x1 − x0 )*y + x0 * y1 − x1 * y0 = 0
f (x, y, x0 , x1 , y0 , y1 ) = (y0 − y1 )*x + (x1 − x0 )*y + x0 * y1 − x1 * y0 ≡ 0
Im Prinzip wird damit eine verallgemeinerte Darstellung einer üblichen Funktion erzeugt:
f (x) = ax + b
Prüfe ob der nächste Pixel ober-/unterhalb einer gedachten Linie auf einem Raster liegt ? erhöhe y-Wert : verringere y-Wert einer Pixels.
Hier ist das entsprechende Snippet:
Ich würde mich freuen, wenn mir jemand einen Rat geben kann.
Lieben Gruß,
Semo
Ich habe die Aufgabe einen Rasterisierer zu schreiben und hänge an der Stelle, daß ich nicht Linien mit negativer Steigung darstellen kann. Wie kann man das korrigieren?
Erklärung: Es gibt zwei Punkte und Koordinaten. Die Linie zeichne ich pixelweise mittels einer Formel, die aus dem Buch: "Fundamentals of Computergraphics" stammt:
(y0 − y1 )*x + (x1 − x0 )*y + x0 * y1 − x1 * y0 = 0
f (x, y, x0 , x1 , y0 , y1 ) = (y0 − y1 )*x + (x1 − x0 )*y + x0 * y1 − x1 * y0 ≡ 0
Im Prinzip wird damit eine verallgemeinerte Darstellung einer üblichen Funktion erzeugt:
f (x) = ax + b
Prüfe ob der nächste Pixel ober-/unterhalb einer gedachten Linie auf einem Raster liegt ? erhöhe y-Wert : verringere y-Wert einer Pixels.
Hier ist das entsprechende Snippet:
Java:
// ++++++++++++++++++++++
// + +
// + YOU START HERE ! +
// + +
// ++++++++++++++++++++++
if (figure instanceof Line) {
System.out.println("line");
Color c = Color.magenta;
final Line line = (Line) figure;
int x0 = (line.getP1()).get(0, 0).intValue();
int x1 = (line.getP2()).get(0, 0).intValue();
int y0 = (line.getP1()).get(1, 0).intValue();
int y1 = (line.getP2()).get(1, 0).intValue();
int y = y0;
for (int x = line.getP1().get(0, 0).intValue(); x <= line.getP2()
.get(0, 0).intValue(); ++x) {
frameBuffer[x][y] = c;
double kipp = (y0 - y1) * (x + 1) + (x1 - x0) * (y + 0.5) + x0
* y1 - x1 * y0;
if (kipp > 0) {
--y;
} else if (kipp < 0) {
++y;
}
}
}
Ich würde mich freuen, wenn mir jemand einen Rat geben kann.
Lieben Gruß,
Semo