Заполните нарисованный треугольник линиями

#c# #draw #system.drawing #drawimage

#c# #нарисуйте #system.drawing #нарисуйте изображение

Вопрос:

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

 public void draw(Graphics g, Pen blackPen)
    {
        double xDiff, yDiff, xMid, yMid;

        xDiff = oppPt.X - keyPt.X;
        yDiff = oppPt.Y - keyPt.Y;
        xMid = (oppPt.X   keyPt.X) / 2;
        yMid = (oppPt.Y   keyPt.Y) / 2;

        // draw triangle
        g.DrawLine(blackPen, (int)keyPt.X, (int)keyPt.Y, (int)(xMid   yDiff / 2), (int)(yMid - xDiff / 2));
        g.DrawLine(blackPen, (int)(xMid   yDiff / 2), (int)(yMid - xDiff / 2), (int)oppPt.X, (int)oppPt.Y);
        g.DrawLine(blackPen, (int)keyPt.X, (int)keyPt.Y, oppPt.X, oppPt.Y);

    }
  

метод должен принимать оба этих аргумента

 public void fillTriangle(Graphics g, Brush redBrush)
    {


    }
  

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

1. Есть FillPolygon , насколько я помню… Многоугольник с 3 точками является треугольником.

2. Вам нужно будет создать drawPolygon , а затем заполнить его с помощью fillPolygon .

3. @Fildor итак, вам нужно сохранить нарисованные линии в массив, а затем передать его в качестве второго аргумента fillpolygon ?

4. Треугольник — это многоугольник, ограниченный тремя точками. Используйте Graphics.FillPolygon() для заполнения фигуры. Или GraphicsPath.AddPolygon() . С помощью GraphicsPath вы также можете нарисовать 3 линии, затем вызвать .CloseFigure() , затем Graphics.FillPath() .

5. а) сохраните 3 точки в трехточечных переменных!!! б) составьте из них список <Точка>!! c) вызовите drawPolygon и d) передайте список в вашу функцию fillTriangle, где вы используете fillPolygon!

Ответ №1:

Используйте единственную функцию для рисования, а для уменьшения сложности и согласованности используйте GraphicsPath объект.

 void DrawGraphics(Graphics g, Pen pen, Brush brush)
{
    float xDiff=oppPt.X-keyPt.X;
    float yDiff=oppPt.Y-keyPt.Y;
    float xMid=(oppPt.X keyPt.X)/2;
    float yMid=(oppPt.Y keyPt.Y)/2;

    // Define path with the geometry information only
    var path = new GraphicsPath();
    path.AddLines(new PointF[] {
        keyPt,
        new PointF(xMid   yDiff/2, yMid-xDiff/2),
        oppPt,
    });
    path.CloseFigure();

    // Fill Triangle
    g.FillPath(brush, path);

    // Draw Triangle
    g.DrawPath(pen, path);
}
  

Результат, как показано ниже:

scr

Ответ №2:

Вам просто нужно создать массив с точками, после этого настроить способ заливки, а затем да нарисовать, FillPolygon который является объектом, для DrawPolygon которого является просто контуром.

     public void draw(Pen blackPen)
    {
        Graphics draw = CreateGraphics();

        Point[] points = new Point[6];
        points[0].X = 0;
        points[0].Y = 0;
        points[1].X = 150;
        points[1].Y = 150;
        points[2].X = 0;
        points[2].Y = 150;

        using (SolidBrush fillvar = new SolidBrush(Color.FromArgb(100, Color.Yellow)))
        {
            draw.FillPolygon(fillvar, points.ToArray());
            draw.DrawPolygon(Pens.DarkBlue, points);
        }

    }
  

Если вы хотите нарисовать FillPolygon внутри чего-либо, как в случае с PictureBox , вам просто нужно присвоить это Graphics draw .

     Graphics draw = picturebox.CreateGraphics();
  

Выше приведена лишь практическая иллюстрация того, как это работает, взгляните на свой код. Не хватает только реализации его координат xDiff, yiff, xMid, yMid.

     public void draw(Graphics g, Pen blackPen)
    {
        double xDiff, yDiff, xMid, yMid;

        Point[] points = new Point[6];
        points[0].X = 50;
        points[0].Y = 50;
        points[1].X = 150;
        points[1].Y = 150;
        points[2].X = 0;
        points[2].Y = 150;

        SolidBrush varbrush = new SolidBrush(Color.FromArgb(100, Color.Yellow));

        fillTriangle(g, varbrush, points);
    }
  

Вам нужно будет передать точки в fillTriangle и нарисовать их этим методом.

     public void fillTriangle(Graphics g, Brush varbrush, Point[] points)
    {
        g.FillPolygon(varbrush, points.ToArray());
        g.DrawPolygon(Pens.Red, points);
    }
  

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

1. Пожалуйста, удалите эти вещи: Graphics draw = CreateGraphics(); и Graphics draw = picturebox.CreateGraphics(); . Для рисования на его поверхности необходимо использовать событие Paint элемента управления. Если вы не знаете почему, сверните форму и снова нормализуйте ее.

2. @Alberto Santos дело в том, что заполнение должно выполняться другим методом, поэтому я могу вызвать его где-нибудь еще, основываясь на выборе пользователя