Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Как нарисовать звезду в круге c#

#c_sharp #net #windows


Как на c# нарисовать звезду в круге используя picturebox?

    private void OnPaint()
    {
        int n = 5;               // число вершин
        double R = 25, r = 50;   // радиусы
        double alpha = 0;        // поворот
        double x0 = 60, y0 = 60; // центр
        Graphics e = pictureBox1.CreateGraphics();
        PointF[] points = new PointF[2 * n + 1];
        double a = alpha, da = Math.PI / n, l;
        for (int k = 0; k < 2 * n + 1; k++)
        {
            l = k % 2 == 0 ? r : R;
            points[k] = new PointF((float)(x0 + l * Math.Cos(a)), (float)(y0 + l
* Math.Sin(a)));
            a += da;
        }

        e.DrawLines(Pens.Black, points);
        e.DrawEllipse(Pens.Green, 60, 60, 200, 200);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        OnPaint();
    }
}


}

У меня получилось только вот это: 


    


Ответы

Ответ 1



Вы вызываете DrawEllipse(), передавая вторым и третьим аргументом координаты центра: double x0 = 60, y0 = 60; ^^ ^^ // ... e.DrawEllipse(Pens.Green, 60, 60, 200, 200); ^^ ^^ Однако согласно документации функция ожидает там координаты верхнего левого угла: public void DrawEllipse (System.Drawing.Pen pen, int x, int y, int width, int height); ^ ^ Можно, конечно, просто поправить числа. Но лучше вообще от них отказаться, динамически подгоняя круг под звезду: e.DrawEllipse(Pens.Green, x0 - R, y0 - R, R * 2, R * 2)

Комментариев нет:

Отправить комментарий