两种方法 这里写一种点旋转的方法

平面一点(x1,y1),绕一点(x0,y0)顺时针旋转 a度

则新的坐标为

x=(x1-x0)*cosa-(y1-y0)*sina+x0;

y=(y1-y0)*cosa+(x1-x0)*sina+y0;

逆时针旋转则是

x=(x1-x0)*cos(-a)-(y1-y0)*sin(-a)+x0;

y=(y1-y0)*cos(-a)+(x1-x0)*sin(-a)+y0;

#include <bits/stdc++.h>
using namespace std;
const double pi=acos(-1.0);
int main(){
    int t;
    cin>>t;
    while(t--){
    int x,y,r,n;
    cin>>x>>y>>r>>n;
    double ansx=x+r;
    double ansy=y;
    if(abs(ansx)<1e-7) ansx=0.0;
    if(abs(ansy)<1e-7) ansy=0.0;
    printf("%.2lf %.2lf\n",ansx,ansy);
    for(int i=n-1;i>=1;i--){
        double cs=cos((-1.0/n)*2*pi);
        double sn=sin((-1.0/n)*2*pi);
        double newx=(ansx-x)*cs-(ansy-y)*sn+x;
        double newy=(ansy-y)*cs+(ansx-x)*sn+y;
        if(abs(newx)<1e-7) newx=0.0;
        if(abs(newy)<1e-7) newy=0.0;
        printf("%.2lf %.2lf\n",newx,newy);
        ansx=newx;
        ansy=newy;
    }
    }
    
    return 0;
}