




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计策计算机器绘画形状学习参考手指实证书本学号:144901105名字:雪威实验1:图形的几何变换实验时间:4小时实验类型:验证实验要求:必需一、实验目的二维图形的平移、缩放、旋转和投影转换(投影转换可在实验3中完成)是计算机图形各种应用中广泛使用的最基本的图形转换,本实验通过算法分析和编程实验二维图形转换来理解转换的实现方法。如果可能,也可以裁剪设计。二、实验内容理解平移、缩放、旋转变换的基本原理,理解分段裁剪的算法原理,并通过编程实现这些变换。建议使用VC实现OpenGL编程。三、实验原理、方法和手段1.平移图形如果在屏幕上显示一个或另一个对象,并交互地在屏幕上水平和垂直移动Tx和Ty,如图
2、1所示X=x Tx y=y Ty其中x和y是转换前图形中点的坐标,x 和y 是转换后图形中点的坐标。定义关键值后,可以操作功能键来移动关键值。2.图形比例通过在屏幕上显示帆船(在右下角创建),相对于屏幕坐标原点缩小s倍(x和y方向都是s倍)。以下是:X=x*s y=y*s注意:有时,图形比例不一定基于原点,而是预先确定参照位置。参考点通常位于图形的左下角或中央。将参考点座标设定为xf,YF包含转换公式X=x*Sx xf*(1-Sx)=xf (x-xf)*SxY=y*Sy yf*(1-Sy)=yf (y-yf)*Sy型式中的x和y是转换前图面中点的座标,x 和y 是转换后图面中点的座标。Sx1和
3、Sy1的放大倍数,Sx1和Sy1的缩小倍数(Sx和Sy必须大于0)。3.旋转图形在屏幕上显示围绕用户确定的旋转角度和旋转中心旋转图形的汽车。旋转公式为x =xf(x-xf)* cos(angle)-(y-YF)* sin(angle)y =YF(y-YF)* cos(angle)(x-xf)* sin(angle)其中xf,yf是旋转中心点的坐标。x,y是旋转前图形中点的坐标,x 和y 是旋转后图形中点的坐标。4.裁剪裁剪的形状会裁剪必须是封闭图形的三角形。书中的段与点相交的公式允许保留可见段,而不在窗口中的段可以使用需要丢弃的段修剪方法。图1四、实验组织运行要求本实验采用集中教学形式,各同学
4、独立完成了上述实验要求。五、实验条件每人一台电脑独立完成实验。六、实验阶段(1)在初始位置显示图形。(2)将图形中的点转换为转换表达式,以在转换每个点后计算这些点的坐标。(3)擦掉原图形。(4)在新位置显示图形。七、程序代码平移缩放/test1.cpp3360定义控制台应用程序的入口点。/# include“stdafx . h”# #include gl/glut.h # include“math . h”#includeFloat width、highth、angleVoid init (void)/绘制矩形GlClearColor (1.0,1.0,1.0,0.0);/背景颜色GlMat
5、rixMode(GL _ PROJECTION);/投影GluOrtho2D (0.0,600.0,0.0,600.0);/参数分别表示(左下角x坐标、右上角x坐标、左下角y坐标、右上角y坐标)Void显示(void)GL clear(GL _ COLOR _ BUFFER _ BIT);GlColor3f (0.0,1.0,1.0);/矩形颜色GlBegin(GL _ POLYGON);GlTranslatef(0,0,0);Glaatef (angle,0,0,1);Glvertex 2f (100.0f width,100.0 f highth);/用于绘制点Glavertex 2f (
6、100.0f width,300.0 f highth);Glvertex 2f (300.0 f width,300.0 f highth);Glavertex 2f (300.0 f width,100.0 f highth);格伦();GL flush();void myspecial keyboard(int key,int x,int y)If (key=glaut _ key _ right)width=5;If (key=glaut _ key _ left)width-=5;If (key=glaut _ key _ up)highth=5;If (key=glaut _ ke
7、y _ down)highth-=5;GlutPostRedisplay();Void my keyboard (unsigned char key,int x,int y)If(key=c | key=C)exit(0);GlutPostRedisplay();Void my mouse (int button,int state,int x,int y)/鼠标控制缩放If (state=glaut _ down)If (button=glaut _ left _ button)GlScalef(0.5,0.5,0.0);display();else if(button=glaut _ ri
8、ght _ button)GlScalef(1.5,1.5,0.0);display();GlutPostRedisplay();/重新调用绘图函数ReturnVoid main (int argc,char* argv)GlutInit (argc、argv);glautitdisplaymode(glut _ single | glaut _ RGB);Glautitwindowsposition (50,50);Glautitwindowsize (600,600);GlutCreateWindow(“箭头键控制平移,鼠标控制缩放”);init();Glutdisplayfunc(显示屏
9、);glautspecalgfunc(myspecial keyboard);GlutMouseFunc(my mouse);GlutKeyboardFunc(my keyboard);glut main loop();旋转#includestdafx.h #include#include# include“stlib . h”# defineddeg _ to _ rad 0.017453/将角度转换为弧度的参数,即2*PI/360Float theta=30.0/直线和x轴正向之间的角度Float length=200.0/直线的长度Float x=300.0,y=200.0/直线的第一个
10、端点Void init (void)GlClearColor (1.0,1.0,1.0,0.0);GlMatrixMode(GL _ PROJECTION);GluOrtho2D (0.0,640.0,0.0,480.0);Void显示(void)GL clear(GL _ COLOR _ BUFFER _ BIT);GlColor3f (0.0,1.0,1.0);GlBegin(GL _ POLYGON);GlVertex2f (x,y);glver tex 2f(x length * cos(deg _ to _ rad * theta),y length * sin (deg _ to
11、_ rad * theta)glver tex 2f(x length * cos(deg _ to _ rad *(theta 30)y length * sin(deg _ to _ rad *()格伦();GlutSwapBuffers();/交换前后台缓存/*void idleFunc()theta=0.1;if(theta 360)theta-=360;GlutPostRedisplay();/重新调用绘图函数 */Void my keyboard (unsigned char key,int x,int y)If(key=a | key=A)theta=5.0;If(key=s |
12、 key=S)theta-=5.0;If(key=c | key=C)exit(0);if(theta 360)theta-=360;if(theta 0)theta=360;GlutPostRedisplay();/重新调用绘图函数Void main (int argc,char* argv)GlutInit (argc、argv);glautitdisplaymode(glut _ double | glaut _ RGB);GlutInitWindowPosition (100,100);GlutInitWindowSize (640,480);Glaut createwindow(向左
13、旋转a键,向右旋转s键);init();Glutdisplayfunc(显示屏);GlutKeyboardFunc(my keyboard);/glutIdleFunc(idle func);/指定空闲回调函数glut main loop();八、实验结果实验2:填充图形区域实验时间:4小时实验类型:验证实验要求:必需一、实验目的区域填充是首先将区域中的点(通常称为种子点)指定为给定颜色,然后将此颜色扩展到整个区域的过程。区域填充技术广泛应用于交互式图形、动画和美术绘画的计算机辅助制作。本实验使用递归填充算法或扫描线算法来填充光栅图形的区域。通过本实验,掌握了光栅图形编程的基本原理和方法。二、
14、实验内容确定光栅图形的表示方法,并实现种子算法或扫描线算法。通过编程实现上述算法。建议使用VC实现OpenGL编程。三、实验原理、方法和手段1.递归算法使用oldcolor记住要填充的区域中一点(x,y)的当前颜色,并用要填充的颜色newcolor替换该颜色。递归函数包括:Procedure flood-fill (x、y、oldcolor、new color : integer);BeginIf getpixel (framebuffer,x,y)=oldcolorThen beginSetpixel (framebuffer,x,y,new color);Flood-fill (x,y 1,oldcolor,new color);Flood-fill (x,y-1,oldcolor,new color);Flood-fill (x-1,y,oldcolor,new color);Flood-fill (x 1,y,oldcolor,new color);EndEnd2.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院VI管理课件
- 2024年净水絮凝剂项目项目投资需求报告代可行性研究报告
- 萍乡市人才档案管理办法
- 蒲城县建筑项目管理办法
- 蚌埠公司公积金管理办法
- 行政审批局专家管理办法
- 西安市夏季犬种管理办法
- 衢州市犬类管理暂行办法
- 西湖区小区门禁管理办法
- 许昌市学校食堂管理办法
- 电源适配器输出过压保护测试方法
- 强制执行的拘留申请书
- 搅拌站申请书
- 电瓶车抵押给个人合同(2篇)
- 塑料箱项目安全评估报告
- 图说工厂品质管理
- (一模)乌鲁木齐地区2025年高三年级第一次质量英语试卷(含答案)
- 五年级数学(小数乘法)计算题专项练习及答案
- 《高龄(≥75岁)急性冠脉综合征患者规范化诊疗》解读
- 社会调查研究与方法-001-国开机考复习资料
- 《个体防护装备安全管理规范AQ 6111-2023》知识培训
评论
0/150
提交评论