Звезда

Звезду можно получить из правильного многоугольника если каждую вторую точку рисовать с другим (внутренним) радиусом. Воспользуемся кодом с предыдущего урока и слегка модифицируем его

 

private void Form1_Paint(object? sender, PaintEventArgs e)
{
    var gr = e.Graphics;
    gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    gr.Clear(Color.Black);
    PointF? prevPoint = null;
    double radius1 = 160;  // внешний радиус звезды
    double radius2 = 60;   // внутренний радиус звезды
    var centerX = ClientRectangle.Width / 2;
    var centerY = ClientRectangle.Height / 2;
    int n = 5;  // количество лучей у звезды
    var step = 360.0f / (n * 2); // шаг градусов
    bool even = false;  // флаг указывающий какой из радиусов использовать на текущем шагу
    for (int i = 0; i <= n * 2; i++)  // пробегаемся циклом по всем иднексам вершин звезды
    {
        float ang = i * step;   // получаем из индекса  угол путем домнажения на шаг step
        var radians = ang * Math.PI / 180.0 - Math.PI / 2;  // переводим в радианы и поворачиваем на -90°
        even = !even; // переключаем радиус
        var radius = even ? radius1 : radius2;  // выбираем радиус исходя из текущего состояния флага even

        // расчитываем координаты точки (x, y)
        var x = centerX + radius * Math.Cos(radians); 
        var y = centerY + radius * Math.Sin(radians);

        PointF point = new PointF((float)x, (float)y);

        if (prevPoint != null)
            gr.DrawLine(Pens.White, prevPoint.Value, point);  // рисуем линию между точками

        prevPoint = point;
    }
}

 

 Запустив получим следующий результат: