Сделайте круг в C # только пером, без использования метода эллипса - PullRequest
0 голосов
/ 17 февраля 2019

Код, который я сделал, жестко запрограммирован, и я хочу, чтобы он преобразовал его в круг, любой фрагмент, который я могу добавить, или что-то в этом роде.

Код написан на C, результирующий вывод - как прямоугольник, который мне нужнопреобразовать его в круг

        private void pictureBox1_Click(object sender, EventArgs e)
        {
        int length = 100;
        int flag = 0;
        int flag2 = 0;
        int flag3 = 0;

        Pen p = new Pen(Color.Red, 4);
        Graphics g = pictureBox1.CreateGraphics();
        Brush redBrush = new SolidBrush(Color.Red);
        for (int i = 0; i < 20; i++)
        {
                if(i==0 || i<10)
                {
                    g.DrawLine(p, 622 - 10 * i, 229+10*i, 623 - 10 * i, 229+10*i);
                }
                if(i==10)
                {
                    flag = 1;
                }
                if(flag==1)
                {
                    g.DrawLine(p, 622 - 10 * i, 419 - 10 * i, 623 - 10 * i, 419-10*i);
                    flag2 = 1;
                }
                if(flag2 == 1)
                {
                    g.DrawLine(p, 622 - 10 * i, 29+10*i, 623 - 10 * i, 29+10*i);
                    flag3 = 1;
                }
                if (flag3 == 1)
                {
                    g.DrawLine(p, 432 + 10 * i, 29+10*i, 433 + 10 * i, 29 + 10 *i);
                }

        }

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Вы можете сделать это

void DrawCircle(Graphics g, Pen p, Point centre, double radius=20, int sides = 360)
{
    var angle = 2 * Math.PI / sides;
    for (int i = 0; i < sides; i++)
    {
        Point from = new Point((int)(radius * Math.Sin(i * angle) + centre.X), (int)(radius * Math.Cos(i * angle) + centre.Y));
        Point to = new Point((int)(radius * Math.Sin((i+1) * angle) + centre.X), (int)(radius * Math.Cos((i+1) * angle) + centre.Y));
        g.DrawLine(p, from, to);
    }
}

и использовать

DrawCircle(g, p, new Point(100, 100), 50, 8); // 8 sides, an octagon

Увеличьте количество сторон, чтобы сделать его более точным.

В качестве альтернативы,

g.DrawEllipse(p, (float)(centre.X-radius), (float)(centre.Y-radius), (float)radius*2, (float)radius*2);
0 голосов
/ 19 февраля 2019

Для этого есть встроенная функция.Вместо этого используйте g.DrawEllipse ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...