




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一小车模型及其动态效果的实现1 实验目的及意义(1) 加深对教学内容的理解,巩固所学理论知识(2) 掌握一些基本的画图函数的用法(3) 熟悉TURBO C下图形编译环境(4) 熟练在TC下图形的实现,以及图形函数的处理二实验性质 验证性实验三实验设计思想首先,通过用rectangle(),circle()两个画图函数分别实现车身和车轮,然后用malloc()函数检测图形区所占内存区域,并用getimage()函数将图像存入内存,最后用putimage()函数显示图像。并利用while()循环random()随机函数来实现小车模型的动态展示。4 实验源程序#includestdlib.h#include graphics.h#include conio.h#include stdlib.h#include dos.h#include stdio.h#includeiostream.hvoid main()int gdriver=DETECT,gmode;/*自启动搜寻显示器类型和显示模式*/static int startx=100;static int starty=50;int maxx,maxy;int x,y,ulx,uly,lrx,lry,size,i,width,height,step;void *image;initgraph(&gdriver,&gmode,); /*图形系统初始化*/setcolor(CYAN); /*设置当前画笔的颜色为青色*/rectangle(startx,starty,startx+20,starty+10); /*画一个矩形,长20 宽10,即小车的上半部分*/rectangle(startx-5,starty+10,startx+25,starty+16); /*画一个矩形,长30 宽6,即小车的下半部分*/circle(startx,starty+19,3); /*画小车的轮子*/circle(startx+20,starty+19,3); /*画小车的轮子*/maxx=getmaxx(); /*读取X轴的最大值*/maxy=getmaxy(); /*读取Y轴的最大值*/setfillstyle(SOLID_FILL,GREEN);/*定填充模式和填充颜色,实填充,绿色*/floodfill(startx+1,starty+11,CYAN); /*漫延填充 用青色填充小车的下半身*/setfillstyle(SOLID_FILL,RED); /*定填充模式和填充颜色,实填充,红色*/floodfill(startx,starty+19,CYAN); /*漫延填充 用青色填充小车的左车轮*/floodfill(startx+20,starty+19,CYAN); /*漫延填充 用青色填充小车的右车轮*/ulx=startx-5; uly=starty; lrx=startx+25;lry=starty+22;width=lrx-ulx+1;height=lry-uly+1;size=imagesize(ulx,uly,lrx,lry); /*检测存储图形所需内存*/image=(unsigned char*)malloc(size); /*取得指向左上角(ulx,uly),右下角(lrx,lry)矩形区域的指针*/getimage(ulx,uly,lrx,lry,image); /*将该矩形区域的图形从屏幕拷贝到内存区域*/putimage(ulx,uly,image,COPY_PUT); /*将内存中的图形原样复制到屏幕(ulx,uly)处*/delay(500);cleardevice();x=maxx/2;y=maxy/2;while(!kbhit() /*按任意键结束循环*/putimage(x,y,image,COPY_PUT);delay(500);cleardevice();step=300+rand()%100;if(step/2)%2!=0)step=-1*step;x+=step;step=100+rand()%100;if(step/2)%2!=0)step=-1*step;y+=step;if(x+width-1)maxx)x=maxx-width+1;elseif(xmaxy)y=maxy-height+1;elseif(y0)y=0;free(image);getch();closegraph(); 5 实验结果实验二画人跑步1 实验目的与意义(1) 加深对教学内容的理解,巩固所学理论知识(2) 掌握一些基本的画图函数的用法(3) 熟悉TURBO C下图形编译环境(4) 熟练在TC下图形的实现,以及图形函数的处理二实验性质 验证性实验三实验设计思想因为要展现人跑步的动画过程,而人可用圆、折线组合而成。首先,利用line()函数画出一条路,利用circle()函数画人头,然后再重复利用line()函数画出人的身体、胳膊和腿。并用getimage()函数将图像存入内存,最后用putimage()函数显示图像。最后用while()循环实现人跑步的动画过程。4 实验程序源代码#includegraphics.h#includeconio.h#includestdio.h#includestdlib.h#includedos.hvoid main(void)int gdriver=DETECT,gmode,errorcode;/自启动搜寻显示器类型和显示模式int x,y,x1=100;int buf13000,buf24000;initgraph(&gdriver,&gmode, );/图形系统初始化errorcode=graphresult();if(errorcode!=grOk)/一个错误代码printf(Graphics error:%sn,grapherrormsg(errorcode);printf(press any to halt:);getch();return;/由于错误返回x=getmaxx();y=getmaxy();line(0,y/2+72,x,y/2+72);/画路circle(x/20,y/2,10);/画第一个人的人头line(x/20,y/2+10,x/20-5,y/2+38);/画第一个人的身体line(x/20-5,y/2+38,x/20+5,y/2+52);/画第一个人前面的大腿line(x/20+5,y/2+52,x/20-12,y/2+65);/画第一个人前面的小腿line(x/20-5,y/2+38,x/20,y/2+54);/画第一个人后面的大腿line(x/20,y/2+54,x/20-8,y/2+70);/画第一个人后面的小腿line(x/20-1,y/2+11,x/20-8,y/2+30);/画第一个人后面胳膊的上臂line(x/20-8,y/2+30,x/20+2,y/2+36);/画第一个人后面胳膊的小臂line(x/20+1,y/2+11,x/20+1,y/2+30);/画第一个人前面胳膊的上臂line(x/20+1,y/2+30,x/20+10,y/2+35);/画第一个人前面胳膊的小臂getimage(x/20-12,y/2-10,x/20+10,y/2+70,buf1);/将指定区域的图形从屏幕拷贝到内存区域delay(500);circle(x/20+40,y/2,10);/画第二个人的人头line(x/20+40,y/2+10,x/20+28,y/2+52);/画第二个人的身体及后面的大腿line(x/20+28,y/2+52,x/20+11,y/2+47);/画第二个人后面的小腿line(x/20+32,y/2+38,x/20+52,y/2+50);/画第二个人前面的大腿line(x/20+52,y/2+50,x/20+45,y/2+70);/画第二个人前面的小腿line(x/20+39,y/2+11,x/20+24,y/2+22);/画第二个人后面胳膊的上臂line(x/20+24,y/2+22,x/20+32,y/2+32);/画第二个人后面胳膊的小臂line(x/20+41,y/2+11,x/20+45,y/2+30);/画第二个人前面胳膊的上臂line(x/20+45,y/2+30,x/20+58,y/2+24);/画第二个人前面胳膊的小臂delay(500);getimage(x/20+11,y/2-10,x/20+58,y/2+70,buf2);while(!kbhit()/按任意键结束循环if(x1bP=p;m_maxIndex=len-1;void Bezier:draw() /通过公有函数调用私有函数drawFrame();drawCurve();void Bezier:drawFrame() /其功能是绘制出多边形和各个端点setcolor(12);for(int i=0;im_maxIndex;i+)line( bPi.x, bPi.y, bPi+1.x, bPi+1.y ); /绘制多边形circle(bPi.x, bPi.y,5); /绘制各个端点circle(bPm_maxIndex.x,bPm_maxIndex.y,5);void Bezier:drawCurve(int p0,int p1,int p2,int p3) /实现绘制三次Bezier曲线的功能double tmpx=0.0;double tmpy=0.0;double t=0.0;for(;tbP=p;m_maxIndex=len;void B_Spline:draw() /通过公有函数调用私有函数drawFrame();drawCurve();void B_Spline:drawFrame() /其功能是绘制出多边形和各个端点setcolor(12);for(int i=0;im_maxIndex-1;i+)line( bPi.x, bPi.y, bPi+1.x, bPi+1.y ); /绘制多边形circle(bPi.x, bPi.y,5); /绘制多边形各个端点circle(bPm_maxIndex-1.x,bPm_maxIndex-1.y,5);void B_Spline:drawCurve() /实现多段B样条曲线绘制的功能for(int i=0;im_maxIndex-2;i+)drawCurve(i,i+1,i+2);void B_Spline:drawCurve(int p0,int p1,int p2) /实现绘制某一B样条曲线段的功能double tmpx=0.0;double tmpy=0.0;double t=0.0;for(;t=1.0;t+=0.001)tmpx=(0.5*bPp0.x-bPp1.x+0.5*bPp2.x)*t*t+(-bPp0.x+bPp1.x)*t+0.5*bPp0.x+0.5*bPp1.x;tmpy=(0.5*bPp0.y-bPp1.y+0.5*bPp2.y)*t*t+(-bPp0.y+bPp1.y)*t+0.5*bPp0.y+0.5*bPp1.y;putpixel(tmpx,tmpy,3);void main() /主函数的实现int graphdriver=DETECT,graphmode;initgraph(&graphdriver,&graphmode,); /图形初始化setbkcolor(15);DPOINT* p;p=new DPOINT4; p0.x=5.0;p0.y=5.0;p1.x=10.0;p1.y=15.0;p2.x=15.0;p2.y=10.0;p3.x=10.0;p3.y=5.0;B_Spline b_sp(p,4);b_sp.draw();delete p;getch();closegraph();5 实验结果Bezier 曲线的升阶与降阶1 Bezier曲线的升阶 所谓Bezier曲线的升阶是指保持Bezier曲线的形状与方向不变,增加定义它的控制顶点数,也即是提高该Bezier曲线的次数。增加了控制顶点数,不仅能增加了对曲线进行形状控制的灵活性,还在构造曲面方面有着重要的应用。对于一些由曲线生成曲面的算法,要求那些曲线必须是同次的,应用升阶的方法,我们可以把低于最高次数的的曲线提升到最高次数,使得各条曲线具有相同的次数。同时升阶也是曲线进行连接的前提,两条或多条曲线进行拼接时,必须通过升阶使曲线达到同样阶数才可进行。1.1Bezier曲线的定义 曲线的伯恩斯坦基表示为:称为控制顶点或贝塞尔点,。基函数:称为伯恩斯坦基函数。1.2 伯恩斯坦基函数的升阶公式1.3 Bezier曲线的升阶公式 利用基函数的升阶公式,可以得到曲线的升阶公式。设给定原控制顶点定义一条n次贝塞尔曲线增加一个顶点后,仍定义同一条曲线的新控制顶点可由如下的升阶公式决定其中 可见,新控制顶点是由参数值按分段线性插值丛原控制多边形得出的。由此得出新的控制多边形是在原控制多边形的凸包内,新控制多边形比原控制多边形更靠近曲线。对于Bezier曲线的升阶可以无止境地进行下去,从而得到一个控制多边形序列,它们都定义同一条Bezier曲线。三次Bezier曲线的升阶实例如下图所示:2. Bezier曲线的降阶 降阶是升阶的逆过程。给定一条由原始控制顶点Pi(i=0,1,.,n)定义的n次Bezier曲线,要求找到一条由新控制顶点Pi*(i=0,1,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境经理年终工作总结
- 公司火灾安全培训内容课件
- 2025年全国成人高校招生考试数学(理)复习题库及答案
- 全运会足球运动员代表资格协议书5篇
- 公司法课件收费
- 公司母亲节课件
- 月度工作汇报排版
- 2025租赁续租合同模板
- 公司旺季员工安全培训课件
- 新课标数学低学段案例解读
- 矿山承包法律合同范本
- 时文语法填空-电影篇 《731》 《长安的荔枝》 《戏台》
- 主题一 2. 设计节电方案(课件) 综合实践活动教科版五年级上册
- 2025年家庭健康管理师考试模拟题及答案
- 浙江省浙南名校联盟2025-2026学年高二上学期开学返校联考英语试卷(含音频)
- 砂石骨料加工管理办法
- 西师大版数学六年级上册 第一单元测试卷(A)(含解析)
- 人形机器人-价值5万亿美元的全球市场 Humanoids A $5 Trillion Global Market
- 好好说话暖人心课件
- 部队新闻培训课件
- 船员技能评估体系-洞察及研究
评论
0/150
提交评论