The proportions of the pentagram and pentagon have been well researched, and it's cool how the magic number Phi comes up everywhere. But it's only the diagonals, not the x- and y-coordinates of the vertices, see?

Would I have to use right triangles and dissect the star piece by piece?

### Rotations to the Rescue

There's usually a math tool that will help, and this time it's rotation. The vertices (the "points") of a five-sided star can be seen as a set of five rotations from the center, like this:

#### Radians

Most graphics packages and programming languages measure their angles in radians, not degrees, so I can still use degrees, but I just have to convert the number to radians by using the "radians" function.

def star(sz):

fill(255,255,0) #yellow

beginShape() #remember the vertices

for i in range(5): #"do this 5 times"

vertex(0,100) #make a vertex at the point(0,100)

rotate(radians(72)) #then rotate 72 degrees

endShape()

Unfortunately, all I got was a blank screen. Since the "rotate" function rotates the coordinate system, it makes it impossible to save the coordinates of the vertices that way.

### Polar Coordinates to the Rescue

There's another math tool which might help: polar coordinates. Instead of defining a point by its horizontal (x) and vertical (y) location, it's defined by a rotation and then a "radius" from the center of rotation, like this:

So I could define a vertex as a point that has a radius "sz" and the angle keeps going up by 72. A loop is in order!

def star3(sz):

fill(255,255,0) #yellow

beginShape()

for x in range(5):

vertex(sz*cos(radians(72*x)),sz*sin(radians(72*x)))

endShape(CLOSE)

I was hoping the loop wouldn't mess with the vertex functionality, and here's the output:

Oops! I have to rotate twice as many degrees every vertex. Let's change the vertex line to this:

vertex(sz*cos(radians(144*x)),sz*sin(radians(144*x)))

And there's my star. Perfect!

Want to add ornaments to my tree? Click anywhere!