计算机图形学实验-简单动画的实现、三维图形变换.docxVIP

  • 95
  • 0
  • 约3.61千字
  • 约 6页
  • 2019-08-11 发布于福建
  • 举报

计算机图形学实验-简单动画的实现、三维图形变换.docx

安徽大学计算机实验教学中心PAGE 安徽大学计算机实验教学中心 PAGE 1 学号 专业 姓名 实验日期 2018.12.11 教师签字 成绩 实验报告 【实验名称】 简单动画的实现、三维图形变换 【实验目的】 指定图形运动轨迹,实现物体的移动过程和移动速度控制; (2) 理解并掌握形体的投影变换的原理; 【实验原理】 1)简单动画的原理:显示一个对象,然后把它抹去,把这个图形进行变换后,再在新位置予以显示.当上述过程重复执行时,在视觉上便产生了运动;了解 getimage函数和 putimage函数、imagesize函数、malloc 函数、 cleardevice函数的使用。 2)绘制一点透视图的变换矩阵: 1 0 0 0 T= 0 1 0 0 0 0 0 1/d L m n 1+n/d 得变换后的点坐标为: x’=(x+l)/(d+(n+z)*d) y’=(y+m)/(d+(n+z)*d) z’=0 设计思想 图形的移动 分别画出一个六边形和一个三角形,用两个一维数组p和A来存放其各点坐标;运用putimage(x,y,p,op)函数将六边形不断地向三角形平移,直到到达三角形的边界位置为止。 用到的函数如下: getimage(x1,y1,x2,y2,p); 将屏幕左上角(x1,y1),右下角(x2,y2)的矩形区域内的图象存到指针P所指向的内存区域中。 putimage(x,y,p,op); 将p所指向的内存区域的内容在屏幕上显示,左上角坐标(x,y)。 一点透视 基本步骤如下: 将三维物体平移到适当位置(l,m,n); 令视点在z轴,进行透视变换,变换矩阵如下: 最后,向xOy面作正投影变换,将结果变换到xOy面上。如此构造的一点透视变换矩阵为: 则三维形体中任意一点(x,y,z)的一点透视变换的齐次坐标计算形式为: [x’,y’,z’,1]=; 【实验内容】 1.图形的移动 显示两个图形,然后移动其中一个图形.当被移动的图形超出屏幕范围时,输 出错误信息“Coordinate out of range”并结束。 #define SHOW_CONSOLE #includegraphics.h #includetime.h #includestdio.h const int size_x=640,size_y=480; int main() { PIMAGE w; initgraph(size_x, size_y);//打开一个长640像素,宽480像素的窗口 w = newimage(); circle(100,100,50); getimage(w,50,50,150,150); for(int i=0;i=1000;delay_fps(60),i += 1){ if(i size_x){ outtextxy(210, 210, Coordinate out of range); break; } cleardevice(); putimage(i,200,w); circle(100,100,50); } getch();//让屏幕暂停一下 closegraph();//关闭绘图窗口 return 0; } 2.显示一个立方体的一点透视投影图;(用数组存放正方体的各顶点坐标)。 (选)显示一个立方体的两点透视投影图、斜二测图;(用数组存放正方体的各顶点坐标)。 #define SHOW_CONSOLE #include graphics.h // 引用ege图形库 #includeiostream #includestdio.h #includemath.h #includealgorithm #includevector const int size_x=640,size_y=480; const double eps = 1e-6; struct Node{ int x,y,z; //Node(int a,int b,int c){x=a,b=y,c=z;} }; std::vectorNode co; void input() { int n,x,y,z; std::cinn; for(int i

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档