# 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:

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

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.