**Here's a simple algorithm on adding an "almost-perfect" hex (it just looks good, but isn't actually perfect - the diagonal lines are about 10% longer than the vertical ones):**For a vertical (pointy) hexagon w/ an outer diameter of 100 pixels (length between two opposing angles):

1. Start drawing a line from x, y-50 (x and y = center of hex) ==> x-50, y-25. (top left diagonal)

2. Draw a line from x-50, y-25 ==> x-50, y+25. (left vertical)

3. Draw a line from x-50, y+25 ==> x, y+50. (bottom left diagonal)

4. Draw a line from x, y+50 ==> x+50, y+25. (bottom right diagonal)

5. Draw a line from x+50, y+25 ==> x+50, y-25. (right vertical)

6. Draw a line from x+50, y-25 ==> x, y-50. (top right diagonal)

Notice how you can apply this to any size (+/- 25 is 25% of outer diameter, while +/-50 is 50%, so for a 40-pixel hexagon this would be +/- 10px and +/- 20px, respectively). Note however, that the smaller a hexagon is, the more difference there'll be between vertical/horizontal sides and diagonal sides, because a vertical/horizontal line cannot be a decimal number of pixels in length (although diagonal lines can, as long as both its x and y span equals an integer number of pixels).

====================

Thankfully, in programming, there's really no reason to make the hexes absolutely perfect. As long as they look good, opposing sides are of same length (e.g. top right == lower left) and the hexes are drawn at minimum processing, they work.

**Edited by DrMadolite, 12 August 2012 - 08:41 AM.**