编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 旋转五角星
  · 旋转五角星

用户:  明日科技
发帖:  417 篇
作品:  1 个
回复:  2 篇
技术分:  805 分
等级:  
注册:  2009-09-07 06:37:23



发表于:2010-06-11 09:00:56
          楼主

l 五角星的绘制:

在实现的过程中用到了黄金分割数0.382,下面具体说下:五角星每两个点之间的夹角是72°,外圈上的点与它相邻的内圈上的点的夹角是36°,从圆心到外圈上点的长度乘以0.382正好等于从圆心到其相邻内圈上的点的长度,明白他们之间的相互关系,我们就能求出外圈及内圈上五角星点的坐标,对坐标之间用line函数连线就能画出五角星。

l 发光部分的实现:

想实现五角星发光的效果并不是很难,这里我们用ellipse()函数来实现便可以,但是在用ellipse()函数实现的过程中有几点我们要明确即一圈要画多少个发光点;每个发光点的大小(本程序中是1°);要花多少圈,把这三个点明确了套上相应的数值就可以画出发光的效果。

l 五角星转动的实现:

要体现出五角星转动的感觉,就是要在每次清屏后再画五角星的时候把将要画的五角星的初始位置改变,本实例中采用的是在前一次的基础上增加30°的方法,这里还有一点要强调即每次在前一次的基础上增加的度数不可以是72°,这样就体现不出来转动效果。

#include <graphics.h>

#include <stdlib.h>

#include <math.h>

#define PI 3.1415926

#define R1 150

void Pentacle(double m)                                                                      /*自定义函数Pentacle用来画五角星*/

{

    int x1, y1, x2, y2;

    double n;

    setcolor(RED);

    for (n = m; n <= 2 *PI + m; n += 2 * PI / 5)

    {

        x1 = 320+R1 * cos(n);

        y1 = 240-R1 * sin(n);

        x2 = 320+R1 * 0.382 * cos(n + PI / 5);                                   /*0.382黄金分割点*/

        y2 = 240-R1 * 0.382 * sin(n + PI / 5);

        line(x1, y1, x2, y2);                                                                       /*将外圈确定的点与内圈确定的点相连接*/

        x1 = 320+R1 * cos(n + 2 * PI / 5);

        y1 = 240-R1 * sin(n + 2 * PI / 5);

        line(x2, y2, x1, y1);                                                                       /*将内圈确定的点与外圈确定的点相连接*/

    }

    setfillstyle(1, RED);                                                                     /*设置填充形式为红色实填充*/

    floodfill(320, 240, RED);                                                              /*对五角星内进行填充*/

}

void light()                                                                                       /*自定义函数light用来画发光部分*/

{

    int i, j, x, y, r2 = 160;

    setcolor(YELLOW);

    for (i = 0; i <= 16; i++)

    {

        for (j = 0; j <= 60; j++)

            ellipse(320, 240, j *6, j *6+1, r2 + 10 * i, r2 + 5 * i);

    }

}

void Delay(int Second)                                                              /*自定义时间延迟函数Delay*/

{

    long T1, T2;

    T1 = time();

    while (1)

    {

        delay(50);

        T2 = time();

        if (T2 - T1 > Second)

            break;

    }

}

main()

{

    int gdriver = DETECT, gmode;

    double m = 0.0;

    initgraph(&gdriver, &gmode, "");                                         /*函数图形初始化*/

    while (!kbhit())

    {

        Pentacle(m);                                                               /*调用函数Pentacle*/

        light();                                                                       /*调用函数light*/

        Delay(0.5);                                                                 /*调用函数Delay*/

        cleardevice();                                                               /*清屏*/

        m += PI / 6;                                                               /*函数参数每次增加30°实现五角在不同位置重画*/

    }

    getch();

    closegraph();                                                                      /*退出图形状态*/

}

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页