Ähnlich wie beim Zeichnen eines Kreises, allerdings zeichnen wir direkt einen Quadranten!
treffen erst sukkzessive Entscheidungen bis die Steigung -1 erreicht ist, ob nächstes Pixel im Osten (E) oder im Südosten (SE) ?
treffen dann sukkzessive Entscheidungen, ob nächstes Pixel im Südosten (SE) oder im Süden (S) ?
untersuchen hierzu Mittelpunkt zwischen den entsprechenden Pixeln durch Einsetzen in die implizite Form
Wann beträgt die Steigung -1?
Bemühen wir die Tangentengleichung:
Transformation dieser impliziten Geradengleichung in die explizite Form:
Die Steigung ist also
d.h. die Steigung ist gleich -1, wenn für die partiellen Ableitungen gilt:
Berechnen wir dies:
Überraschung: wenn wir wählen, entspricht dies genau der Bedingung beim Kreiszeichnen:
void DrawEllipseQuadrant(
int x0, int y0,
int rx, int ry,
int color
) {
int x(0);
int y(ry);
SetPixel(x+x0, y+y0, color);
while( 2*ry*ry*x < 2*rx*rx*y ) {
if( F(x+1, y-0.5) >= 0) y--;
x++;
SetPixel(x+x0, y+y0, color);
}
while( y >= 0 ) {
if( F(x+0.5, y-1) <= 0) x++;
y--;
SetPixel(x+x0, y+y0, color);
}
}
Statt immer wieder komplett zu berechen, nutze bereits berechnete Werte aus vorhergehender Iteration!
Auch hier runden wir, statt mit 4 zu multiplizieren.
Macht man dabei einen groben Fehler?: Übung.
Bemerkung: hier könnten wir die Zeichenrichtung umdrehen und an der -Achse zu zeichnen beginnen. Dies würde die Berechnungen zwischen den Quadranten etwas vereinfachen.
wir haben also: