问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何利用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 &lt;graphics.h&gt;#include&lt;stdio.h&gt;#include &lt;conio.h&gt;#include#include&lt;math.h&gt;#include&lt;string.h&gt;#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("汉诺塔动画演示"), &amp;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 &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;graphics.h&gt; #include &lt;dos.h&gt; #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 &lt;windows.h&gt; include &lt;stdlib.h&gt; include &lt;conio.h&gt; include &lt;stdio.h&gt; include &lt;tchar.h&gt; extern "C"{ WINBASEAPI HWND ...

如何使用动画刷 C语言实现 c语言是一种什么样的语言 动画是利用人的 制作动画利用了什么原理 动画利用了人眼的 动画即利用人的视觉暂留特性 c语言?:怎么用 c语言有什么用
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果4序列号帮忙查一下,谢谢,坐等:C7GJF07YDP0N 我的苹果4的序列号是C7GJ20S7DP0N查一下是不是翻新机 苹果4系列号:C7GJGB89DP0N,是不是全新机?属于那个版本。谢谢 我的苹果4序列号是C7GJ95DJDP0N想知道是不是正版? 新买的iphone4怎么查激活时间 求助! 序列号C7GJ68D9DPON IMEI 0131320084... 爱疯4怎么查激活和正品序列号C7GJ52KLDP0N 怎样查询苹果4是否翻新机?序列号是C7GJ765GDP0N 样子,质好一点的耳机 铁三角ATH-ES700可以旋转多少度啊……是别人的耳机 说只能转90度 我... 思茅附近的linux培训机构? 电话手表200元可以买个到吗 滨州医学院院长死亡,致死的原因是什么? 如何让C语言中的字符动起来 微信小程序商城每日订单1000要买哪种云服务器? 苹果手机忘记手机密码了怎么办? 本人想买一块200元以内的手表,请行家推荐一下 滨州学院能转专业吗? wincc中的c动作是什么意思 200块的手表选哪个牌子好 滨州市住房和城乡建设局的内设机构 滨州撤地化市十周年征文 问个问题,微信小程序不选择云开发就需要买服务器才可以吗? 想买个200块左右的手表,要漂亮,质量要好,应该到哪里去买呢? 所有C开头的都是高速动车组吗? 200元可以买什么牌子的女士手表 滨州撤地建市征文 200到300左右的女生手表,哪个品牌值得入手? c开头的动车是啥? 滨州学院 转专业 手表推荐200元左右?想买200左右手表 市公安局里面都什么有什么科 [C]是什么动漫 200元左右的手表,哪个牌子的好 c语言向下动两行 滨州市那里有治疗腰椎间盘突出比较好的地方 200-500元可以买什么样的男士手表啊,最好是品牌的? 为什么动车组还有C打头的 滨州哪里有算命准的地方? 欧宝z6100指纹锁怎么重置密码? 怎样让c语言中的图像动 微信小程序的云服务器中怎样设置自增列 欧宝z6100指纹锁怎么设置管理员 想买一块手表,200左右的,有什么牌子可推荐?? 求助用C做一个会动的图形,无论什么样的,会动的即可!!! 手表200元是买天王表还是卡西欧啊 关于自考转考 请问A在C上滑动 C为什么也要动 B不是会给C一个摩擦力与A所给的相平衡吗? c软通动力c表示什么 求大神,微信小程序后台怎么安装到云服务器 有谁会制作证件照,2寸蓝底