Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Drawing a polygon according to the input coordinates

Tags:

c#

polygon

draw

How can i draw a polygon according to the input coordinates which are given in C#.

enter image description here

like image 272
Mehmet Avatar asked Aug 24 '12 11:08

Mehmet


People also ask

How do you construct a polygon using coordinates?

For Start X Field and Start Y Field, select the field containing the X coordinates (longitude) and Y coordinates (latitude) of the starting points, respectively. For End X Field and End Y Field, select the field containing the X coordinates (longitude) and Y coordinates (latitude) of the ending points, respectively.

How do you draw a polygon step by step?

To draw a polygon, start by drawing a circle on a piece of paper using a protractor. Then, decide how many sides you want your polygon to have. Once you've decided, divide 360 by the number of sides to find out what the angle between each set of neighboring lines should be.


2 Answers

You didn't show any code because based on those coordinate, you are applying some form of scaling to the image.

Using the Paint event of a PictureBox, here is an example using those coordinates on the screen. It fills in the polygon, then draws the border, then it loops through all the points to draw the red circle:

void pictureBox1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
  e.Graphics.Clear(Color.White);

  // draw the shading background:
  List<Point> shadePoints = new List<Point>();
  shadePoints.Add(new Point(0, pictureBox1.ClientSize.Height));
  shadePoints.Add(new Point(pictureBox1.ClientSize.Width, 0));
  shadePoints.Add(new Point(pictureBox1.ClientSize.Width,
                            pictureBox1.ClientSize.Height));
  e.Graphics.FillPolygon(Brushes.LightGray, shadePoints.ToArray());

  // scale the drawing larger:
  using (Matrix m = new Matrix()) {
    m.Scale(4, 4);
    e.Graphics.Transform = m;

    List<Point> polyPoints = new List<Point>();
    polyPoints.Add(new Point(10, 10));
    polyPoints.Add(new Point(12, 35));
    polyPoints.Add(new Point(22, 35));
    polyPoints.Add(new Point(24, 22));

    // use a semi-transparent background brush:
    using (SolidBrush br = new SolidBrush(Color.FromArgb(100, Color.Yellow))) {
      e.Graphics.FillPolygon(br, polyPoints.ToArray());
    }
    e.Graphics.DrawPolygon(Pens.DarkBlue, polyPoints.ToArray());

    foreach (Point p in polyPoints) {
      e.Graphics.FillEllipse(Brushes.Red, 
                             new Rectangle(p.X - 2, p.Y - 2, 4, 4));
    }
  }
}

enter image description here

like image 113
LarsTech Avatar answered Oct 06 '22 21:10

LarsTech


You may use Graphics.DrawPolygon. You can store the coordinates in an array of Point and then you can pass that to DrawPolygon method. You may wanna see:

Drawing with Graphics in WinForms using C#

private System.Drawing.Graphics g;
System.Drawing.Point[] p = new System.Drawing.Point[6];
p[0].X = 0;
p[0].Y = 0;
p[1].X = 53;
p[1].Y = 111;
p[2].X = 114;
p[2].Y = 86;
p[3].X = 34;
p[3].Y = 34;
p[4].X = 165;
p[4].Y = 7;
g = PictureBox1.CreateGraphics();
g.DrawPolygon(pen1, p);
like image 23
Habib Avatar answered Oct 06 '22 21:10

Habib