I did some maths while I was bored, and I calculated a way to draw a perfect octagon.
I thought this might come in useful for some of you :3
Warning! Maths ahead!
Maths:
Imagine a square, with side length a.
Our octagon will fit in this square.
We will call the length of a side of the octagon b.
Now you put a into this equation:
Which can also be written as:
And you get b.
Now, round b to the nearest number. We can’t be dealing with fractions of pixels now, can we?
Now you have b, we can draw the octagon.
Drawing:
For this example, our reference point will be in the center of the octagon, which is also the center of our imaginary square.
Our first 2 co-ordinates will be a/2 up and b/2 to either side.
For the sides, it will be a/2 to the side and b/2 up or down.
Then, draw lines between the co-ordinates to finish the octagon.
And there you have a regular octagon!
Pseudo code:
Initialize:
size = (length of side of square)
oct_side = round((size*sqrt(2))/(2+sqrt(2)))
Loop:
coord_1x = x – oct_side/2
coord_1y = y + size/2
coord_2x = x + oct_side/2
coord_2y = y + size/2
coord_3x = x + size/2
coord_3y = y + oct_side/2
coord_4x = x + size/2
coord_4y = y – oct_side/2
coord_5x = x + oct_side/2
coord_5y = y – size/2
coord_6x = x – oct_side/2
coord_6y = y – size/2
coord_7x = x – size/2
coord_7y = y – oct_side/2
coord_8x = x – size/2
coord_8y = y + oct_side/2
//draw_line(from_x,from_y,to_x,to_y)
draw_line(coord_1x,coord_1y,coord_2x,coord_2y)
draw_line(coord_2x,coord_2y,coord_3x,coord_3y)
draw_line(coord_3x,coord_3y,coord_4x,coord_4y)
draw_line(coord_4x,coord_4y,coord_5x,coord_5y)
draw_line(coord_5x,coord_5y,coord_6x,coord_6y)
draw_line(coord_6x,coord_6y,coord_7x,coord_7y)
draw_line(coord_7x,coord_7y,coord_8x,coord_8y)
draw_line(coord_8x,coord_8y,coord_1x,coord_1y)
And that’s how to draw a perfect octagon!
Coming soon: How to draw a perfect hexagon!
To those interested in the maths involved to get the equation:
I originally calculated this to be able to draw the Aperture Science logo by hand, but I also saw the use of it on the computer!