#include #define N 100 using namespace std; struct vec { float x,y; void operator += (const vec &a) {x+=a.x,y+=a.y;} void operator -= (const vec &a) {x-=a.x,y-=a.y;} void operator *= (float a) {x*=a,y*=a;} vec operator + (const vec &a) const {vec b=(*this);b+=a;return b;} vec operator - (const vec &a) const {vec b=(*this);b-=a;return b;} vec operator * (float a) const {vec b=(*this);b*=a;return b;} float norm(){return sqrt(x*x+y*y);} }p[N]; const float XL=0.1; //左边框留白比例 const float XR=0.1; //右边框留白比例 const float YL=0.1; //上边框留白比例 const float YR=0.1; //下边框留白比例 const float vertex_R=.1; //点的半径 const float border_width=.01; //点的边框粗细 const string border_color="#616161"; //点的边框和边的颜色 const map mp{{"b","#29B6F6"},{"r","#FF7043"}}; //颜色映射表 const string label = "A"; // 标签格式 const string font_family = "Ubuntu Mono"; // 字体 const string font_color = "white"; // 标签颜色 const float output_scale = 100; vec calc(vec a,vec b) { vec c=b-a; c*=(vertex_R-border_width/2)/c.norm(); return a+c; } int n,m; float minX,minY,maxX,maxY; string pc[N]; void printhelp(const char* name) { printf( "g2s the 6east svg graph generator, built on %s.\n" "Usage: %s \n" ,__DATE__,name); exit(1); } int main(int argc,char** argv) { if(argc!=3) printhelp(argv[0]); freopen(argv[1],"r",stdin); freopen(argv[2],"w",stdout); cin>>n; //输入点数(int) for(int i=1;i<=n;i++) { cin>>p[i].x>>p[i].y>>pc[i]; //输入第i个点的横坐标(float)、纵坐标(float)、半径(float)和颜色(string) if(mp.find(pc[i])!=mp.end()) pc[i]=mp.find(pc[i])->second; if(i==1) minX=maxX=p[i].x,minY=maxY=p[i].y; if(p[i].xmaxX) maxX=p[i].x; if(p[i].ymaxY) maxY=p[i].y; } minX-=vertex_R,minY-=vertex_R; maxX+=vertex_R,maxY+=vertex_R; float X=minX-(maxX-minX)*XL; float Y=minY-(maxY-minY)*YL; for(int i=1;i<=n;i++) p[i].x-=X,p[i].y-=Y; X=(maxX-X)+(maxX-minX)*XR; Y=(maxY-Y)+(maxY-minY)*YR; printf(R"( )", X * output_scale, Y * output_scale, X * output_scale, Y * output_scale); for(int i=1;i<=n;i++) { cout<<""<>m; //输入边数(int) for(int i=1;i<=m;i++) { int a,b; cin>>a>>b; //输入端点编号(int[1,n]) vec A=calc(p[a],p[b]); vec B=calc(p[b],p[a]); cout<<""<%c )", font_family.c_str(), font_color.c_str(), vertex_R * output_scale, p[i].x * output_scale, p[i].y * output_scale, i + label[0] - 1); } } cout<<""<