# calculate coordinates of a polygon using radius and centerpoint

I am trying to calculate the coordinates of a polygon, coding it out isn't really a problem, its just my maths is quite bad but slowly learning.

I need to calculate the coordinates based on the center point and radius. e.g. centerX = 40, centerY = 40, radius = 8, sides = 5, i = n 0 - 5

This is what I have so far. int x, y; int sides = 5; int angle = 0;

for (size_t i = 0; i < sides; i++) { x = round(centerX + radius * cos(2* PI * i / sides)); y = round(centerY + radius * sin(2* PI * i / sides)); points.push_back(point(x, y)); }

This does give me a nice polygon (kinda) when i plot the points on an online generator.

However, it is slightly rotated and i am not sure how to solve this, ideally i would like a flat line at the bottom.

So my questions are:

- Is my formula for x/y correct? can it be improved?
- how do i add rotation? for example 20 degrees

thank you for your help.

## Answers

Rotation is a matrix operation. In 2D it's [[cos(a),-sin(a)],[sin(a),cos(a)]] applied to each point (x,y) like so (I don't know your language):

xnew= cos(a)* x - sin(a)* y; ynew= sin(a)* x + cos(a)* y;

See e.g. Rotation_(mathematics)#Two_dimensions on Wikipedia. Note that the angle a is in radians, so you might need to multiply by pi/180 if your input is in degrees.

Assuming that you are coding in C++, I guess that what you are looking for is something like this:

for (size_t i = 0; i < sides; i++) { double angle = M_PI / 2 + 2 * M_PI * i / sides; int x = round(centerX + radius * cos(angle)); int y = round(centerY + radius * sin(angle)); points.push_back(point(x, y)); }

Even if you choose to use integers to represent x,y coordinates it's better to use a double for the angle, which is in radians. I simply added Pi/2 to your formula to rotate the poligon 90° counter clock wise.