C语言编程题,要在Turbo C上运行,加注释行,谢谢!
题目:编制曲线轨迹动画程序 要求:画一圆的外摆线,使一个五角星在曲线轨迹上移动。 x=(a+b)cost-bcos[(a+b/b)t]: y=(a+b)sint-bsin[(a+b/b)t]: a,b,t由键盘输入,输入的数据送文件保存,按回车键程序结束。
题目:编制曲线轨迹动画程序 要求:画一圆的外摆线,使一个五角星在曲线轨迹上移动。 x=(a+b)cost-bcos[(a+b/b)t]: y=(a+b)sint-bsin[(a+b/b)t]: a,b,t由键盘输入,输入的数据送文件保存,按回车键程序结束。
答案:#include <conio.h> #include <graphics.h> #include <math.h> #define PI 3.1416 /* 宏常量 π = 3.1416 */ #define LEN 50 /* "单位长度1" 用屏幕上的50个点表示 */ #define XCENTER 320 /* 代表屏幕中心x坐标的宏常量XCENTER */ #define YCENTER 240 /* 代表屏幕中心y坐标的宏常量YCENTER */ void fun(int xstar,int ystar,int r); /* 声明 画五角星函数 的原型 */ int main() { int a; /* 定圆半径 */ int b; /* 动圆半径 */ int t; /* 参数方程角度最大值 */ int i; /* 循环变量,参数方程角度 */ double r; /* 角度对应弧度 */ double x; /* 浮点x坐标,因为坐标计算设计三角函数,计算过程用到浮点数; 为了计算方便定义为浮点型,绘制图形时再强制转换为int型 */ double y; /* 浮点y坐标 */ int gdriver = DETECT; /* 自动检测显示硬件 */ int gmode; clrscr(); /* a = 1; b = 1; t = 360; */ printf("int a b and t (eg. 2 1 360) :\n"); scanf("%d%d%d",&a,&b,&t); initgraph(&gdriver,&gmode,"C:\\TC20\\BGI"); /*初始化图形模式,指定BGI驱动的路径 C:\TC20\BGI */ /*用角度i做循环变量,随着角度的变化,用描点的方式画出外摆线的图形*/ for(i=0;i<t;i++) { r = PI*i/180; /*角度转弧度*/ x = XCENTER + LEN*( (a+b)*cos(r) - b*cos((a+b)*r/b) ); /*屏幕中心作为坐标原点,计算x坐标*/ y = YCENTER - LEN*( (a+b)*sin(r) - b*sin((a+b)*r/b) ); /*屏幕中心作为坐标原点,计算y坐标*/ putpixel((int)x,(int)y,GREEN); /*用绿色画点,上面计算好的浮点坐标强制转换为int型*/ setcolor(YELLOW); /*设置前景色为黄色*/ fun((int)x,(int)y,1); /*画出五角星,【(int)x,(int)y】是五角星的中心,1代表半径*/ /*delay(10);延时函数,如果需要就加上它,适当调整一下参数*/ if(i==t-1)/*画完最后一个五角星后退出循环*/ { break; } setcolor(BLACK); /*设置前景色为黑色*/ fun((int)x,(int)y,1); /*在同一位置画一个大小完全的五角星覆盖前面画点五角星*/ } getch(); /*等待按回车退出*/ closegraph(); /*关闭图形模式*/ return 0; /*程序结束返回*/ } /*fun函数以(xstar,ystar)为中心画五角星,r 是五角星外界圆的半径,r*LEN是外界圆半径的长度 在屏幕上显示的点的个数 */ void fun(int xstar,int ystar,int r) { int a1[10]; /*存放五角星是个点的x坐标*/ int a2[10]; /*存放五角星是个点的y坐标*/ int i; /*循环变量,循环话线需要用到*/ /*十个点的坐标计算,以(xstar,ystar)为中心,用初中几何知识就能分析、计算出来*/ a1[0] = xstar; a2[0] = ystar - LEN*r; a1[1] = xstar + (int)( LEN*r*cos(PI*54/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a2[1] = ystar - (int)( LEN*r*sin(PI*54/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a1[2] = xstar + (int)( LEN*r*( cos(PI*54/180) + cos(PI*54/180)/sin(PI*18/180) )/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a2[2] = ystar - (int)( LEN*r*sin(PI*54/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a1[3] = xstar + (int)( LEN*r*sin(PI*72/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a2[3] = ystar + (int)( LEN*r*cos(PI*72/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a1[4] = xstar + (int)( LEN*r*sin(PI*36/180) ); a2[4] = ystar + (int)( LEN*r*cos(PI*36/180) ); a1[5] = xstar; a2[5] = ystar + (int)( LEN*r/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a1[6] = xstar - (int)( LEN*r*sin(PI*36/180) ); a2[6] = ystar + (int)( LEN*r*cos(PI*36/180) ); a1[7] = xstar - (int)( LEN*r*sin(PI*72/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a2[7] = ystar + (int)( LEN*r*cos(PI*72/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a1[8] = xstar - (int)( LEN*r*( cos(PI*54/180) + cos(PI*54/180)/sin(PI*18/180) )/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a2[8] = ystar - (int)( LEN*r*sin(PI*54/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a1[9] = xstar - (int)( LEN*r*cos(PI*54/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); a2[9] = ystar - (int)( LEN*r*sin(PI*54/180)/( sin(PI*54/180) + cos(PI*54/180)*tan(PI*72/180) ) ); /*用计算出的坐标,循环画线*/ for(i=0;i<9;i++) { line(a1[i],a2[i],a1[i+1],a2[i+1]);/*画连接(a1[i],a2[i])和(a1[i+1],a2[i+1])两个点的线*/ } line(a1[9],a2[9],a1[0],a2[0]); /*画连接(a1[9],a2[9])和(a1[0],a2[0])两点的线*/ } 效果图 http://hiphotos.zhaoxi.net/veket_linux/pic/item/cc1bc09e8f06a0efc9eaf4aa.jpg 输入的数据a,b,t 送文件保存 这个功能没写 ,这个简单
上一个:C高手进!!!
下一个:c语言题目,帮忙写下程序,输出如下图形