Jay Frosted
Jay Frosted

Reputation: 45

Creating a single hexagon in C# using DrawPolygon

Ok so i have created a triangle but I cant for the life of me work out the coordinates to create a simple hexagon,

Point[] shape = new Point[3];        
            shape[0] = new Point(200, 100);        
            shape[1] = new Point(300, 200);
            shape[2] = new Point(100, 200);

This makes a triangle but I cant figure out the x and y values for a hexagon, sounds like a simple question but my brain just isn't working correctly today, Below is the array for the hexagon I just can't figure out the values.

Point[] shape = new Point[6];        
                shape[0] = new Point(0, 0);         
                shape[1] = new Point(0, 0);
                shape[2] = new Point(0, 0);     
                shape[3] = new Point(0, 0);
                shape[4] = new Point(0, 0);
                shape[5] = new Point(0, 0);

Any help would be great thanks!

Upvotes: 4

Views: 9887

Answers (1)

Maximilian Gerhardt
Maximilian Gerhardt

Reputation: 5353

Since I've already written a comment, I guess I should demonstrate that in some real code.

I created a WinForms application with a Panel object on which I can draw. Then I've overridden the Paint event on that to draw me a hexagon.

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        var graphics = e.Graphics;

        //Get the middle of the panel
        var x_0 = panel1.Width / 2;
        var y_0 = panel1.Height / 2;

        var shape = new PointF[6];

        var r = 70; //70 px radius 

        //Create 6 points
        for(int a=0; a < 6; a++)
        {
            shape[a] = new PointF(
                x_0 + r * (float)Math.Cos(a * 60 * Math.PI / 180f), 
                y_0 + r * (float)Math.Sin(a * 60 * Math.PI / 180f));
        }

        graphics.DrawPolygon(Pens.Red, shape);            
    }

This then draws

hexagon

As I said, the key is to view the hexagon as a "discrete" circle. The points are all computed as being on the outer part of a perfect circle, which are then connected with a straight line. You can create all regular n-Point shapes with this technique (a pentagon e.g. as a 5-regular shape ;))

So, you just "inscribe" the 6 points in the circle to get your hexagon, as shown in this diagram with a regular 5-point shape:

hexa2

Then remember that you can compute the (x,y) coordinates of a point given its polar coordinates (r, phi) as

coordinate_trafo

enter image description here

To which you can also add an offset offset, which is in my case the center of the frame I'm drawing in.

Upvotes: 16

Related Questions