代码如下:
#include
#include
#include
#define PI 3.14159265359
void DrawCircle(FILE* fp,double x,double y,double radius)
{
fprintf(fp,"0 \nSECTION\n");
fprintf(fp,"2 \nENTITIES\n");
fprintf(fp,"0 \nCIRCLE\n");
fprintf(fp,"8 \n0\n");
fprintf(fp,"10 \n%f\n",0.0);
fprintf(fp,"20 \n%f\n",0.0);
fprintf(fp,"40 \n%f\n",radius);
fprintf(fp,"62 \n1\n");//设置为红色
//圆形绘制结束
for (int i=0;i<12;i++)
{
fprintf(fp,"0 \nLINE\n");
fprintf(fp,"8 \n0\n");
fprintf(fp,"10 \n%f\n20 \n%f\n11 \n%f\n21 \n%f\n 62\n 1\n",
radius*0.8*cos(i*PI/6.0),radius*0.8*sin(i*PI/6.0),radius*cos(i*PI/6.0),radius*sin(i*PI/6.0));
}
}
//绘图顺序为先画时针,再画分针,为第二题准备
void DrawHands(FILE* fp,double hourangle,double minuteangle,double radius)
{
fprintf(fp,"0 \nLINE\n");
fprintf(fp,"8 \n0\n");
fprintf(fp,"10 \n%f\n20 \n%f\n11 \n%f\n21 \n%f\n 62 \n3\n",
0.0,0.0,radius*0.4*cos(hourangle),radius*0.4*sin(hourangle));//画时针
fprintf(fp,"0 \nLINE\n");
fprintf(fp,"8 \n0\n");
fprintf(fp,"10 \n%f\n20 \n%f\n11 \n%f\n21 \n%f\n 62 \n3\n",
0.0,0.0,radius*0.6*cos(minuteangle),radius*0.6*sin(minuteangle));//画分针
}
int main()
{
double hour,minute,r;
double hour_angle,minute_angle;
FILE* fp;
fp=fopen("Circle.dxf","w");
if (fp==NULL)
{
printf("Can not open this file !\n");
return 0;
}
while(1)
{
printf("请输入表盘的直径R:");
scanf("%lf",&r);
printf("请输入时间(Hour Minut):");
scanf("%lf %lf",&hour,&minute);//依次输入,用空格隔开。默认输入为10:30,用来与第二题作比较
if (hour>23||minute>59)
{
printf("输入错误,请重新输入!\n");
}
else
{
break;
}
}
minute_angle=(90.0-minute*6.0)*PI/180.0;
hour_angle=(90.0-(hour+minute/60.0)*30.0)*PI/180.0;
DrawCircle(fp,hour_angle,minute_angle,r);
DrawHands(fp,hour_angle,minute_angle,r);
fprintf(fp,"0 \nENDSEC\n");
fprintf(fp,"0 \nEOF");
fclose(fp);
return 0;
}