用两种颜色填充正多边形

Fill regular polygons with 2 colors

我画了正多边形并将它们分成相等的部分。 是这样的:

但我想用 2 种颜色填充它:

我该如何实施? 绘制多边形的代码如下:

    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;
    }

方法有很多种,但最直接的就是分别绘制不同颜色的多边形(三角形)。

假设 List<T> 颜色:

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

您可以在 DrawLine 调用之前添加:

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

请注意我是如何使用 % 运算符环绕 nPointscolors 的!