Hallo liebes Forum
Ich versuche einen Kreis mittels eines Rasterisierers mit interpolierten Farbwerten zu füllen. Das gelingt leider nicht ganz so gut. Ziel ist es ausgehend vom Mittelpunkt hin zum Rand die Farben zu interpolieren und auszugeben. Was mir bereits gelungen ist, ist den Kreis mit einem Verlauf zu füllen. Leider sieht der so geviertelt aus. Was habe ich falsch gemacht?
Anbei ist die Methode, die die Darstellung macht:
Zur Belustigung aller interessierten habe ich noch einen Screenshot angehängt... Möglicherweise bietet der einen Hinweis? Danke für Eure Mühe im voraus.
Viele Grüße,
Semo
EDIT: Bilde vergessen :-D
Ich versuche einen Kreis mittels eines Rasterisierers mit interpolierten Farbwerten zu füllen. Das gelingt leider nicht ganz so gut. Ziel ist es ausgehend vom Mittelpunkt hin zum Rand die Farben zu interpolieren und auszugeben. Was mir bereits gelungen ist, ist den Kreis mit einem Verlauf zu füllen. Leider sieht der so geviertelt aus. Was habe ich falsch gemacht?
Anbei ist die Methode, die die Darstellung macht:
Java:
private void drawCircle(final Circle circle, final Color[][] frameBuffer) {
System.out.println("circle");
Color cR = (Color) circle.getAttributesR().get("color");
Color cP = (Color) circle.getAttributesP().get("color");
int mx = (circle.getP()).get(0, 0).intValue();
int my = (circle.getP()).get(1, 0).intValue();
int r = (int) circle.getR();
int radiusPow2 = (int) Math.pow(r, 2);
int x = 1;
int y = (int) (Math.sqrt(radiusPow2 - 1) + 0.5);
int count = 0;
frameBuffer[mx][my + r] = cR;
frameBuffer[mx][my - r] = cR;
frameBuffer[mx + r][my] = cR;
frameBuffer[mx - r][my] = cR;
while (x < y) {
frameBuffer[mx + x][my + y] = cR;
frameBuffer[mx + x][my - y] = cR;
frameBuffer[mx - x][my + y] = cR;
frameBuffer[mx - x][my - y] = cR;
frameBuffer[mx + y][my + x] = cR;
frameBuffer[mx + y][my - x] = cR;
frameBuffer[mx - y][my + x] = cR;
frameBuffer[mx - y][my - x] = cR;
x++;
y = (int) (Math.sqrt(radiusPow2 - x * x) + 0.5);
}
if (x == y) {
frameBuffer[mx + x][my + y] = cR;
frameBuffer[mx + x][my - y] = cR;
frameBuffer[mx - x][my + y] = cR;
frameBuffer[mx - x][my - y] = cR;
}
// gesamten kreis zeichnen
for (int i = -r; i <= r; i++) {
for (int j = -r; j < r; j++) {
int f = i * i + j * j;
if (f <= r * r) {
float hilf = (float) (r) / (float) (i - r);
float hilf2 = (float) (r) / (float) (j - r);
if (hilf <= 0)
hilf *= -1;
if (hilf >= 1)
hilf = 1;
if (hilf2 <= 0)
hilf2 *= -1;
if (hilf2 >= 1)
hilf2 = 1;
int cr = (int) ((1 - hilf) * cR.getRed() + hilf
* cP.getRed());
int cg = (int) ((1 - hilf) * cR.getGreen() + hilf
* cP.getGreen());
int cb = (int) ((1 - hilf) * cR.getBlue() + hilf
* cP.getBlue());
int cr2 = (int) ((1 - hilf2) * cR.getRed() + hilf2
* cP.getRed());
int cg2 = (int) ((1 - hilf2) * cR.getGreen() + hilf2
* cP.getGreen());
int cb2 = (int) ((1 - hilf2) * cR.getBlue() + hilf2
* cP.getBlue());
Color c;
if (i == mx && j == my) {
c = new Color(cP.getRed(), cP.getGreen(), cP.getBlue());
} else {
c = new Color((cr + cr2) / 2, (cg + cg2) / 2,
(cb + cb2) / 2);
}// else
frameBuffer[mx + i][my + j] = c;
}// if
}// for
}// for
}
Zur Belustigung aller interessierten habe ich noch einen Screenshot angehängt... Möglicherweise bietet der einen Hinweis? Danke für Eure Mühe im voraus.
Viele Grüße,
Semo
EDIT: Bilde vergessen :-D