当前位置:编程学习 > C/C++ >>

C语言编程题,要在Turbo C上运行,加注释行,谢谢!

题目:编制曲线轨迹动画程序 要求:画一圆的外摆线,使一个五角星在曲线轨迹上移动。 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语言题目,帮忙写下程序,输出如下图形

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,