欢迎来到天天文库
浏览记录
ID:14389694
大小:78.39 KB
页数:10页
时间:2018-07-28
《计算机图形学实验四 :裁剪》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、贵州大学实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131姓名学号实验组实验时间指导教师黄初华成绩实验项目名称直线裁剪实验目的一、实验目的掌握常用的裁减及消隐算法:直线的裁剪实验要求实现一个直线裁减算法对于设计性实验,应根据“由学生自行设计实验方案并加以实现的实验”内涵要求,注意省略由学生自主设计的“实验方案”.根据本实验的特点、要求和具体条件,采用“以学生自主训练为主的开放模式组织教学,还是采用集中授课形式”,须加以明确。实验原理直线裁减Cohen-SutherLand算法(编码算法)算法原理(递归的裁剪过程):对于每
2、条线段P1P2分为三种情况处理:(1)若P1P2完全在窗口内,则显示该线段P1P2。(2)若P1P2明显在窗口外,则丢弃该线段。(3)若线段不满足(1)或(2)的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。100100010101100000000100101000100110为快速判断,采用如下编码方法:由窗口四条边所在直线把二维平面分成9个区域(右图),每个区域赋予一个四位编码:CtCbCrCl(上下右左);直线的端点都按其所处区域赋予相应的区域码,用来标识出端点相对于裁剪矩形边界的位置。各
3、位编码含义:-10-上:ify>ymax,Ct=1,else,0;下:ifyxmax,Cr=1,else,0;左:ifx4、done表示是否完成,draw表示是否可见)Unsignedcharcode1,code2;端点1,端点2的编码While(!done)beginif(判断code1,code2,若为第1种情况)begindone=TRUE;draw=TRUE;endelseif(为第2种情况)begindone=TRUE;draw=FALSE;endelseif(检查code1,若在窗口内)/*第3种情况*/begin交换端点及端点的编码;以左,上,右,下的次序对端点1进行判断及求交;将交点的值赋给端点1;endend算法分析:本算法的优点在于简单,易5、于实现。用编码方法可快速判断线段的完全可见和显然不可见,他可以简单的描述为将直线在窗口左边的部分删去,按左,右,下,上的顺序依次进行,处理之后,剩余部分就是可见的了。在这个算法中求交点是很重要的,他决定了算法的速度。本算法对于其他形状的窗口是否同样有效就值得讨论了,这也证明了在图形算法中,没有几个是对大多数情况有效的。-10-特别适用二种情形:大窗口场合;窗口特别小场合(光标拾取图形,光标看作小的裁剪窗口)。Cohen-Sutherland与中点法在区域码测试阶段能以位运算方式高效率地进行,因而当大多数线段能够简单的取舍时,效率较好。实验6、环境五、实验条件:硬件平台:PC软件(推荐):Windows平台,Visualstdio2013,opengl实验步骤六、实验步骤1.掌握算法原理;2.依据算法,编写源程序并进行调试;3.对运行结果进行保存与分析;4.把源程序以文件的形式提交;5.按格式书写实验报告。实验内容#include"stdafx.h"#include#include#include#pragmacomment(lib,"opengl32.lib")#pragmacomment(lib,"glu32.lib")7、#pragmacomment(lib,"glut32.lib")#defineLEFT_EDGE1#defineRIGHT_EDGE2#defineBOTTOM_EDGE4#defineTOP_EDGE8staticinttimes=1;//画从(x0,y0)到(x1,y1)的直线voidLineGL(intx0,inty0,intx1,inty1){glBegin(GL_LINES);glColor3f(1.0f,0.0f,0.0f);glVertex2f(x0,y0);-10-glColor3f(0.0f,1.0f,0.0f);glV8、ertex2f(x1,y1);glEnd();}//矩形的结构体typedefstructRectangle{floatxmin;floatxmax;floatymin;floatymax;}
4、done表示是否完成,draw表示是否可见)Unsignedcharcode1,code2;端点1,端点2的编码While(!done)beginif(判断code1,code2,若为第1种情况)begindone=TRUE;draw=TRUE;endelseif(为第2种情况)begindone=TRUE;draw=FALSE;endelseif(检查code1,若在窗口内)/*第3种情况*/begin交换端点及端点的编码;以左,上,右,下的次序对端点1进行判断及求交;将交点的值赋给端点1;endend算法分析:本算法的优点在于简单,易
5、于实现。用编码方法可快速判断线段的完全可见和显然不可见,他可以简单的描述为将直线在窗口左边的部分删去,按左,右,下,上的顺序依次进行,处理之后,剩余部分就是可见的了。在这个算法中求交点是很重要的,他决定了算法的速度。本算法对于其他形状的窗口是否同样有效就值得讨论了,这也证明了在图形算法中,没有几个是对大多数情况有效的。-10-特别适用二种情形:大窗口场合;窗口特别小场合(光标拾取图形,光标看作小的裁剪窗口)。Cohen-Sutherland与中点法在区域码测试阶段能以位运算方式高效率地进行,因而当大多数线段能够简单的取舍时,效率较好。实验
6、环境五、实验条件:硬件平台:PC软件(推荐):Windows平台,Visualstdio2013,opengl实验步骤六、实验步骤1.掌握算法原理;2.依据算法,编写源程序并进行调试;3.对运行结果进行保存与分析;4.把源程序以文件的形式提交;5.按格式书写实验报告。实验内容#include"stdafx.h"#include#include#include#pragmacomment(lib,"opengl32.lib")#pragmacomment(lib,"glu32.lib")
7、#pragmacomment(lib,"glut32.lib")#defineLEFT_EDGE1#defineRIGHT_EDGE2#defineBOTTOM_EDGE4#defineTOP_EDGE8staticinttimes=1;//画从(x0,y0)到(x1,y1)的直线voidLineGL(intx0,inty0,intx1,inty1){glBegin(GL_LINES);glColor3f(1.0f,0.0f,0.0f);glVertex2f(x0,y0);-10-glColor3f(0.0f,1.0f,0.0f);glV
8、ertex2f(x1,y1);glEnd();}//矩形的结构体typedefstructRectangle{floatxmin;floatxmax;floatymin;floatymax;}
此文档下载收益归作者所有