2017-05-24 4 views
1

Ich habe regelmäßige Polygone gezeichnet und diese in gleiche Teile unterteilt. Es ist so: enter image description hereFüllen Sie regelmäßige Polygone mit 2 Farben

aber ich will es so mit zwei Farben füllen:

enter image description here

Wie das ich umsetzen? -Code, wie Polygone zu zeichnen ist unten:

Graphics g = e.Graphics; 
    nPoints = CalculateVertices(sides, radius, angle, center); 

    g.DrawPolygon(navypen, nPoints); 
    g.FillPolygon(BlueBrush, nPoints); 
    Point center = new Point(ClientSize.Width/2, ClientSize.Height/2); 

    for(int i = 0; i < sides; i++) { 
     g.DrawLine(new Pen(Color.Navy), center.X, center.Y, nPoints[i].X, nPoints[i].Y); 

    } 

    private PointF[] CalculateVertices(int sides, int radius, float startingAngle, Point center) 
    { 
     if (sides < 3) { 
      sides = 3; 
     } 
      //throw new ArgumentException("Polygon must have 3 sides or more."); 

     List<PointF> points = new List<PointF>(); 
     float step = 360.0f/sides; 

     float angle = startingAngle; //starting angle 
     for (double i = startingAngle; i < startingAngle + 360.0; i += step) //go in a circle 
     { 
      points.Add(DegreesToXY(angle, radius, center)); 
      angle += step; 
     } 

     return points.ToArray(); 
    } 

    private PointF DegreesToXY(float degrees, float radius, Point origin) 
    { 
     PointF xy = new PointF(); 
     double radians = degrees * Math.PI/180.0; 

     xy.X = (int)(Math.Cos(radians) * radius + origin.X); 
     xy.Y = (int)(Math.Sin(-radians) * radius + origin.Y); 

     return xy; 
    } 
+0

Dies lässt sich nicht kompilieren: 'Clientsize/2.Width.X, Clientsize/2.Height.Y' - Grundsätzlich Sie zwei polygone benötigen, wenn Sie zwei Farben wünschen. - Auch: Worauf zielen Sie ab: Winforms, WPF, ASP ..? __Always__ tag Ihre Frage richtig! - lso: Versuchen Sie Arrays für die Liste zu vermeiden. Viel schöner zum Arbeiten !! – TaW

+0

@TaW Oh ich tippte es falsch und ich benutze Winforms (Bearbeitete meine Frage !!). Ich habe Farb-Arrays für zwei Farben gemacht, aber ich weiß nicht, wie man es benutzt. – user19283043

+0

Sie können [ExtFloodFill] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd162709 (v = vs.85) .aspx) Funktion über [PInvoke] (http://www.pinvoke.net/default.aspx/gdi32.extfloodfill). –

Antwort

2

Es gibt mehrere Möglichkeiten, aber die meisten geradlinig ist die Polygone (Dreiecke) in verschiedenen Farben getrennt zu ziehen.

Assumig ein List<T> für Farben:

List<Color> colors = new List<Color> { Color.Yellow, Color.Red }; 

Sie können diese hinzufügen, bevor der DrawLine Aufruf:

using (SolidBrush brush = new SolidBrush(colors[i%2])) 
    g.FillPolygon(brush, new[] { center, nPoints[i], nPoints[(i+1)% sides]}); 

Hinweis, wie ich wickeln sowohl um die nPoints und der colors mit dem % Operator!

enter image description here

+0

Diese Idee ist brilliant! Danke vielmals – user19283043

Verwandte Themen