Well I'm not sure where radius and all come's into play here because the radius of the rotation is not determined by these equations. It is determined by how much you translate the object from the origin prior to rotating it.

To find out why the rotation equations work simply plug and chug. You will get a feel for what is taking place quite easily.

And this:

x=cos(°)*r

y=sin(°)*r

Is not a rotation equation. It will only displace x and y from the origin based on the current angle and it will only displace x and y by a maximum of 1 unit. To add radius and increase the displacement from the origin you need this:

p(t)=p(start)+(v*t)

or:

Code:

struct point2D
{
float x;
float y;
};
...
...
//_ray is assumed to be of unit length or normalized
void DisplacePointAlongRay(point2D _start,point2D _ray,float _distance,point2D &newpoint)
{
newpoint.x=_start.x+(_ray.x*_distance);
newpoint.y=_start.y+(_ray.y*_distance);
}

What you posted only works if you use the origin as your starting point in all cases. But you are very close to figuring out why the second equation you posted works. Essentially you are rotating a ray.

To understand it set theta equal to 0,90,180, and 270 degrees and solve for x and y. Plot your results on graph paper. Now do this for all other angles. You should have a a unit circle centered around the origin on your graph paper.