Versuche nun, den fünfeckigen Stern auszumalen, den du bereits früher umrandet hast:
// Konstanten festlegen const int anzahlEcken = 5; // >= 3 const float mittelpunktswinkel = 360.0f / anzahlEcken; const float startwinkel = -90.0f; // weißen Hintergrund zeichnen using (SolidBrush pinsel = new SolidBrush(Color.White)) g.FillRectangle(pinsel, rechteck); // Mittelpunkt und Umkreisradius berechnen int hoehe = rechteck.Height; int breite = rechteck.Width; int mittelpunktX = breite / 2; int mittelpunktY = hoehe / 2; int halbseite = (hoehe < breite ? hoehe : breite) / 2; int radius = halbseite - 10; // Speicherplatz für Punkte reservieren PointF[] punkte = new PointF[anzahlEcken]; // Eckpunkte berechnen for (int i = 0; i < punkte.Length; i++) { double zentralwinkel = i * mittelpunktswinkel; zentralwinkel *= 2; double winkel = zentralwinkel + startwinkel; double bogen = Math.PI * winkel / 180.0; punkte[i].X = (float)(radius * Math.Cos(bogen)) + mittelpunktX; punkte[i].Y = (float)(radius * Math.Sin(bogen)) + mittelpunktY; } // Vieleck zeichnen using (SolidBrush pinsel = new SolidBrush(Color.Firebrick)) { g.FillPolygon(pinsel, punkte); }
Das Programmstück erzeugt diese Zeichnung:
Das ist überraschend: Es werden zwar die Spitzen des Sterns ausgemalt, das innere Fünfeck des Sterns bleibt aber ungefärbt.
Um den Stern ganz auszumalen, musst du bei Aufruf der Methode FillPolygon() ein zusätzliches Argument angeben, den Füllmodus. Verwende als Füllmodus FillMode.Winding:
// Konstanten festlegen const int anzahlEcken = 5; // >= 3 const float mittelpunktswinkel = 360.0f / anzahlEcken; const float startwinkel = -90.0f; // weißen Hintergrund zeichnen using (SolidBrush pinsel = new SolidBrush(Color.White)) g.FillRectangle(pinsel, rechteck); // Mittelpunkt und Umkreisradius berechnen int hoehe = rechteck.Height; int breite = rechteck.Width; int mittelpunktX = breite / 2; int mittelpunktY = hoehe / 2; int halbseite = (hoehe < breite ? hoehe : breite) / 2; int radius = halbseite - 10; // Speicherplatz für Punkte reservieren PointF[] punkte = new PointF[anzahlEcken]; // Eckpunkte berechnen for (int i = 0; i < punkte.Length; i++) { double zentralwinkel = i * mittelpunktswinkel; zentralwinkel *= 2; double winkel = zentralwinkel + startwinkel; double bogen = Math.PI * winkel / 180.0; punkte[i].X = (float)(radius * Math.Cos(bogen)) + mittelpunktX; punkte[i].Y = (float)(radius * Math.Sin(bogen)) + mittelpunktY; } // Vieleck zeichnen using (SolidBrush pinsel = new SolidBrush(Color.Firebrick)) { g.FillPolygon(pinsel, punkte, FillMode.Winding); }
Das entspricht nun eher den Erwartungen:
Der Stern ist jetzt vollständig ausgefüllt.