Преобразование шестиугольника в треугольник с помощью System.Drawing

Итак, у меня есть следующий код, но когда он проходит некоторые шаги, он начинает не заполнять фигуру и в конце концов он не заполняет ее вообще. Я пробовал некоторые изменения, такие как использование линий, а не полигонов, но это не помогло. Не знаю, как исправить, пожалуйста, помогите.

Graphics gr = CreateGraphics();
        Pen p = new Pen(color);
        float x1 = 100, y1 = 100,
            x2 = 50, y2 = 200,
            x3 = 100, y3 = 300,
            x4 = 200, y4 = 300,
            x5 = 250, y5 = 200,
            x6 = 200, y6 = 100,
            n = 30;
        int px1 = 800, py1 = 431,
            px2 = 1000, py2 = 431,
            px3 = 900, py3 = 231;
        float edx1 = ((px3 - x6) / n), edy1 = ((py3 - y6) / n),
            edx2 = ((px2 - x1) / n), edy2 = ((py2 - y1) / n),
            edx3 = ((px1 - x2) / n), edy3 = ((py1 - y2) / n),
            edx4 = ((px3 - x3) / n), edy4 = ((py3 - y3) / n),
            edx5 = ((px2 - x4) / n), edy5 = ((py2 - y4) / n),
            edx6 = ((px1 - x5) / n), edy6 = ((py1 - y5) / n);
        SolidBrush colorBrush = new SolidBrush(color);
        gr.Clear(Form1.DefaultBackColor);
        for (int i = 0; i < n; i++)
        {
            if (checkBox1.Checked == false) {
                gr.Clear(Form1.DefaultBackColor);
            }

            x1 = (float)(x1 + edx2);
            y1 = (float)(y1 + edy2);
            x2 = (float)(x2 + edx3);
            y2 = (float)(y2 + edy3);
            x3 = (float)(x3 + edx4);
            y3 = (float)(y3 + edy4);
            x4 = (float)(x4 + edx5);
            y4 = (float)(y4 + edy5);
            x5 = (float)(x5 + edx6);
            y5 = (float)(y5 + edy6);
            x6 = (float)(x6 + edx1);
            y6 = (float)(y6 + edy1);
            PointF point1 = new PointF(x1, y1);
            PointF point2 = new PointF(x2, y2);
            PointF point3 = new PointF(x3, y3);
            PointF point4 = new PointF(x4, y4);
            PointF point5 = new PointF(x5, y5);
            PointF point6 = new PointF(x6, y6);
            PointF[] curvePoints = { point1, point2, point3, point4, point5, point6 };
            gr.DrawPolygon(p, curvePoints);
            if (checkBox1.Checked == false)
            {
                gr.FillPolygon(colorBrush, curvePoints);
            }
            Thread.Sleep(sleepDuration);
        }

0 ответов

Другие вопросы по тегам