C语言做渐变动画

     在学习flash制作的时候,制作渐变动画是一门必修的功课,flash制作渐变动画一般有两种:帧变换和连续变幻。帧变换是从开始到结束这两个关键帧之间插入多个中间帧利用视觉暂留现象来达到连续变幻的效果,连续变幻就是直接设定为渐变动画,由软件自己来完成中间的填补。

      具体的关于flash动画的制作这里就不多说了,那么C语言画图,能不能达到动画的效果呢?当然可以,为了方便画图,老方法采用EasyX画图。当然大家也可以采用VC自带的Windows GUI画图,但是比较麻烦,但是Windows GUI画图必然是主流,采用EasyX画图不是长久之计,因此后面的文章尽量慢慢向GUI靠近,但是目前为了学习C语言画图还是采用EasyX工具。

      好了,那么怎样进行模拟呢?我们知道圆可以看作是边数无限的正N边型,因此我们闲话三角形、四边形、五边形、·····慢慢的当变数达到一定的范围是看起来就像圆了。好了现在方法知道了,那么怎样实现呢?画N边形不是有专门的函数,但是分析下就知道没法用。1、多边形绘制函数的各个顶点是提前在一个数组中计算出来的,但是我们进行模拟的这些顶点坐标只能在运行中动态的求出来。2、是为了采用XOR擦除进行绘图,达到动画的效果。XOR绘图的原理这里就不多说了,大家可以参考:

好了开始工作吧。具体代码如下:

#include 

#include 

#include 

#define PI 3.1415926

int morph(int xc,int yc,int r,int clr,int delay)

{

int i,j,a;

int x1,y1,x2,y2,dt;

double x,y,theta,ang,sinn,cosn,pi2;

setcolor(clr);

a=3;

dt = delay;

pi2 = 2.0*PI;

//变数达到360就可以认为是一个圆

while(a<361)

{

setcolor(clr);

theta =2.0*PI/a;

x1 = xc;

y1 = yc-r;

ang = theta;

while(ang

{

cosn = cos(ang);

sinn = sin(ang);

x = -r*sinn;

y = r*cosn;

x2 = xc+x;

y2 = yc-y;

line(x1,y1,x2,y2);

x1 = x2;

y1 = y2;

ang = ang+theta;

}

line(x1,y1,xc,yc-r);

//延迟

for(i=0;i

for(j=0;j

{

;

}

// _sleep(100);

//XOR擦除

setcolor(BLACK);

x1 = xc;

y1 = yc-r;

ang = theta;

while(ang

{

cosn = cos(ang);

sinn = sin(ang);

x = -r*sinn;

y = r*cosn;

x2 = xc+x;

y2 = yc-y;

line(x1,y1,x2,y2);

x1 = x2;

y1 = y2;

ang = ang+theta;

}

line(x1,y1,xc,yc-r);

a++;

//为得到平滑加入的延迟

if(a>16)

{

dt = delay/a;

}

}

setcolor(clr);

circle(xc,yc,r);

return 0;

}

int main()

{

// 初始化绘图窗口

initgraph(400, 400); // 创建绘图窗口

setcolor(WHITE); // 设置绘图颜色

morph(200,200,100,RED,10000);

// 按任意键退出

getchar();

closegraph();

return 0;

}

具体效果如下:

你可能感兴趣的:(C,C++语言编程)