如何利用C语言实现动画?
发布网友
发布时间:2022-04-25 00:23
我来回答
共2个回答
热心网友
时间:2022-04-16 06:12
基于擦除法的C语言动画设计与实现
Movie design implement in C language base on erasure way
东华理工学院计算机与通信系 姜林 何月顺 江西 南昌 330013
摘要:
本文介绍了程序设计语言中动画设计的原理,在C语言中的动画设计常用方法,并提出了在C语言中新的动画设计方法――擦除法。阐述擦除法动画设计的原理,并通过一个具体的实例详细介绍了这种方法的设计实现,文中末尾总结了擦除法动画设计的优点及适用的范围。
关键字:擦除法;C语言;TurboC2.0;动画设计;原理;实现
中图分类号:TP312
Summary:
Through the principium of movie design in program design language, the thesis present movie design general way in C language, and bring forward new movie design way――erasure . The thesis also expatiate the principium of erasure way, particular describe the design implement of erasure by a instance. The end summarize the excellence and range of erasure way.
Key words: erasure way; C language ; TurboC 2.0; movie design; principium; implement
0. 引言
动画技术是计算机图形学中的重要内容,它广泛用于游戏娱乐,辅助教学,科学实验模拟等计算机辅助设计。用于动画设计的程序设计语言有多种,并且有多种方法。其中C语言程序设计又广泛用于各种软件开发项目中。因此,掌握C语言的动画设计方法对于软件开发很有必要。
1. 程序设计中动画原理
程序设计中动画设计的原理类似电影的方法,它利用人的视觉具有暂留的生理特点,即人眼对动态图像的变化仅能分辨出时间间隔为25毫秒左右的变化,如果图像变化太快,则人眼无法分辨。在程序设计中我们可以在屏幕上画出一张图像,而将这张图像在不同时间出现,然后一张张快速(时间间隔小于25毫秒)呈现在屏幕上,从视觉效果上看这些画面就如同电影在连续变化一样,给人以动的视觉感觉。
2. C语言动画设计常用方法
C语言常用动画设计方法[1]:
2.1 利用动态开辟图视口方法
在位置动态变化,但大小不变的图视口中(用setviewpot()函数[2]),设置固定图形,这样呈现在观察者面前的是当前图视口位置在动态变化,因而在屏上看到的图像就好像在动态变化一样。
2.2 利用显示页和编辑页交替变化
将当前显示页和编辑页分开(用setvisualpage()和setactivepage()函数),在编辑页上
画好图形后,立即令该页变为显示页,然后在上次显示页上进行画图,画好后,再交换,如此反复,在观察者的视觉上,就出现了动画的效果。
2.3 利用画面存储再重放的方法
如同制作幻灯片一样,将整个动画过程变成一个个片断,然后存储到显示缓冲区内,当把它们按顺序重放到屏幕上时,就出现了动画效果。
2.4 直接对图像动态存储器进行操作
利用显示适配器上控制图像显示的各种寄存器和图像存储器VRAM,对其进行直接操作和控制,从而可以高效快速的实现动画效果。
上述4种方法均可以实现动画效果,但其操作比较复杂,且在程序中要对图像不断进行存取操作,这需要耗费大量内存资源。下面的擦除法动画设计可以解决上述问题。
3. 擦除法动画设计原理
擦除法动画设计方法在很多的动画制作工具(如flash)中大量使用,但在程序设计中却鲜有人用。它的设计原理是:利用同色原理,当图形色与背景色相同时人眼不能感知。在动画设计中,当在一个位置画了一张图像时,使图像色与背景色相异,然后再到另一个位置画一张图像并使图像色与背景色也相异,此时将先前画的图像在原位置再画一张,并使图像色与背景色相同,这样人眼只能看到新画的一张图像而看不到先前画的图像,从而先前画的图像感觉被擦除了。这样连续画多张图像并在每画一张新的图像,将原来的图像擦除,从而在观察者来看就实现了动画的效果。
4. 擦除法的动画设计实现
下面以一个上下翻滚的圆作为一个例子来讲解在TurboC2.0开发环境下用C语言来实现动画的设计过程,其中动画设计的方法是擦除法。具体的实现步骤如下:
4.1 TC的图形系统的初始化
TurboC2.0为用户提供了一个功能强大的画图软件库,它包括图形库文件(graphics.lib),图形头文件(graphics.h)和许多图形显示器的驱动程序。在TurboC2.0开始进行图形设计前必须对之进行初始化,使系统知道要用什么类型的图形显示器的驱动程序,采用什么模式的图形方式,以及该适配器驱动程序的寻找路径名。这个初始化的函数是initgraph()。在本程序中的初始化如下:
gdriver=DETECT;
initgraph(&gdriver, &gmode, "");//图形显示器、显示模式、路径自动检测
4.2 画图
setcolor(LIGHTRED);//设置圆的线条颜色为淡红色
setlinestyle(0,0,1);//设置线条为形状为实线,线宽为一点宽
setfillstyle(1, 10);//设置圆的填充式样为以实填充,填充色为淡绿色
circle(300, 10+10*y,15);//画一个圆心在坐标(300,10+10y),半径为15的圆
这个地方我们需要画一个圆(用draw()函数实现),并且设置圆的圆周线条的颜色(用setcolor()函数),设置线条类型(用setlinestyle()函数),设置圆的填充色和填充模式(用setfillstyle()函数),设置圆的填充色(用floodfill()),最后是画圆(用circle()函数)。在本程序(draw()函数)中的代码如下:
floodfill(300, 10+10*y, 12);//给圆填充如上stfillstyle中的淡绿色
为了实现擦除操作需在同一个位置再画一个圆(用clear()函数实现),该操作只需将上面的画圆函数(draw()函数)改动两个设置即可,如下示:
setcolor(BLUE);//设置圆的线条颜色为蓝色(与背景色相同)
setfillstyle(1, 10);//设置圆的填充式样为以实填充,填充色为淡绿色
4.3 动画实现
本部分是核心部分,先设置背景色为蓝色(用setbkcolor()函数),再在屏幕上画一个填充色为淡绿色的圆(draw()函数)。设置一个循环控制语句实现在屏幕上不同的位置画圆,同时在每画一个圆后作一个时间的延迟(用delay()函数),再在延迟后实现擦除操作,即调用clear()函数。其流程图及代码如下:
setbkcolor(BLUE);//设置背景色为蓝色
for(j=20;j>0;j=j-4)//控制动画实现的次数为20次
{ for(i=j;i<30;i++)//实现动画从上向下闪烁
{ draw(i);//画圆
delay(100000);//延迟0.1秒
clear(i);//擦除已画的圆
}
for(i=30;i>j;i--)//实现动画从下向上闪烁
{ draw(i);//画圆
delay(100000);//延迟0.1秒
clear(i);//擦除已画的圆
}
}
动画实现后的最后效果图如下示。
4.4 关闭图形系统
当图形实现结束后需要关闭图形系统,利用函数closegraph()即可实现。
5. 总结
擦除法动画设计原理易于理解,便于操作。并且它的程序运行所需内存空间也比上述四种常用方法要少得多,因为它在程序执行过程中不需将图形存入内存再从内存调出,这节省了大量的内存空间。如果程序运行在内存紧张的环境中,如嵌入式系统中,这种方法尤其适用
热心网友
时间:2022-04-16 07:30
建议看下高级编程技术这本书
目录如下:
1文本的屏幕输出和键盘输入
1.1 文本的屏幕输出
1.2 键盘输入
1.3 问题实现
1.4 高级应用——菜单实现
实验一
2图形显示方式和鼠标输入
2.1 图形显示
2.2 鼠标的使用
2.3 问题实现
实验二
3屏幕图象与动画技术
3.1 一个简单的实现方法
3.2 利用动态开辟图视口的方法
3.3 利用屏幕图象存储再放的方法
3.4 利用页交替的方法
3.5 问题实现
实验三
4中断技术
4.1 编写自己的中断程序
4.2 问题实现
4.3 其它应用——硬中断演示秒表程序
实验四
5发声技术
5.1 声音函数
5.2 计算机乐谱
5.3 问题实现
实验五
6汉字显示技术
6.1 汉字编码
6.2 问题实现
实验六
c语言中如何将静态图变成动态,形成动画效果
先在PS中做几个不同的层,再导入到ImageReady中,打开动画面板,新建帧,有几层就建几帧。然后每一帧分别显示一张图片。最后保存优化结果。OK!
C语言设计一个简单的图形动画,用turboc2运行,怎样编写使图形动起来的...
1、首先,打开vc6.0,建立程序编写页面,建立C语言环境,声明两个整数型变量。2、随后,打出新的前三行,由于规律不明显,就用printf语句手动输入,要仔细观察模版。3、观察可得,中间三行相同,就可以使用for循环,循环三行,每行的个数要仔细计算,模版很重要。4、随后的七列逐渐减少,同样使用for循...
急!!!求汉诺塔c语言动画演示程序!!!
include <graphics.h>#include<stdio.h>#include <conio.h>#include#include<math.h>#include<string.h>#define N 10 //定义盘数RECT r = {240, 0, 460, 240};TCHAR step[5];int stepn=0;int pan[3];void dizuo(){ setlinestyle(PS_SOLID,NULL,4); line(20,400,160,400...
运用C语言制作动画的基本方法
首先画图,让图形移动后,把原来的图形用黑色屏蔽掉,如此反复就形成了动画效果
汉诺塔c语言 动画演示 地址1162765886@qq.com
// 用背景色清空屏幕 cleardevice();settextstyle(30, 0, _T("宋体"));drawtext(_T("汉诺塔动画演示"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);settextstyle(16, 0, _T("宋体"));outtextxy(300,140,"step:");pan[0]=N; //第一个座初始有3个盘 dizuo(); //...
如何利用C语言实现动画?
C语言常用动画设计方法[1]:2.1 利用动态开辟图视口方法 在位置动态变化,但大小不变的图视口中(用setviewpot()函数[2]),设置固定图形,这样呈现在观察者面前的是当前图视口位置在动态变化,因而在屏上看到的图像就好像在动态变化一样。2.2 利用显示页和编辑页交替变化 将当前显示页和编辑页...
怎么用C语言编程实现一个简单的动画
1.可以考虑用Turbo C的绘图函数(附加graphic.h库)或者用opengl+glut等来实现。 2.前者一般就是纯粹的画点画线。网上也能找到教程。3.主要说一下后者。可以导入图片,并且二维、三维动画都可以做,甚至是用来开发游戏。后者可以用vc6.0或者vs2005来开发。跨平台。参考教程: http://www.owlei.com...
求一简单的C语言动画程序。
C语言动画程序#include <math.h> #include <stdio.h> #include <graphics.h> #include <dos.h> #define pi 3.1415926535 double ca3mm1(double m1,double m2); double ca3fm1(double cosine,double sine); double ca5fm2(double a6m,double a5m,double a4m,double a4f,int shang); double ...
用C++或C语言做一个动画。。。
1、下载个“习语言”,它是支持中文的C语言,符合老师的要求,它自带很方便的绘图函数,中文的,很方便你绘图实现。2、既然是物理过程,就要设计斜面角度,预设物体重量,计算物体下滑加速度,光滑的话应该无摩擦阻力。然后预设一个地面摩擦力,计算出滑行速度和距离。3、然后就是绘图了。 用习语言绘图很...
用C语言怎么做动画
清除屏幕重新从第一行开始画 还有tc环境画图下有graphics.h头文件有画图的函数,但是vc没有,如果想在控制台 下画图,给你一段代码,直接添加你用的api函数就行了 include <windows.h> include <stdlib.h> include <conio.h> include <stdio.h> include <tchar.h> extern "C"{ WINBASEAPI HWND ...