计算机图形学实习报告4

计算机图形学实习报告4

ID:42203199

大小:303.26 KB

页数:9页

时间:2019-09-10

计算机图形学实习报告4_第1页
计算机图形学实习报告4_第2页
计算机图形学实习报告4_第3页
计算机图形学实习报告4_第4页
计算机图形学实习报告4_第5页
资源描述:

《计算机图形学实习报告4》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、西北农林科技大学实验报告称名程名院学姓课:理学院:XX:计算机图形学专业年级:信息与计算科学111班学号:XX报告日期:2012/12/21二维图形的裁剪1.实验目的:1)加深直线段的剪裁算法的理解。2)熟练掌握一种裁剪•算法的编程方法。2・实验内容:1)在编码算法、中点分割算法、Liang-Barsky算法三种中任选一种作为编程模型。2)编写直线段裁剪的源程序。3)建议有能力的学生编写多边形裁剪程序。4)在计算机上编辑编译运行,实现宜线段的裁剪。1.直线和窗口的关系:宜线和窗口的关系如图1-23示,可以分为如下3类:图1-23直线与窗口

2、的关系对其余总线,逐条与窗松求交点,并将窗口(1)整条直线在窗口内。此时,不需剪裁,显示整条总线。(2)整条直线在窗口外,此时,不需剪裁,不显示整条直线。(3)部分直线在窗口內,部分直线在窗口外。此时,需要求出直线与窗框的交点,并将窗口外的直线部分剪裁掉,显示窗口内的直线部分。直线剪裁算法有两个主要步骤。首先将不需剪裁的直线挑岀,即删去在窗外的直线。然后,外的部分删去。2.Cohen-Sutherland直线剪裁算法:以区域编码为基础,将窗口及其周用的8个方向以4bit的二进制数进行编码。如图1-24所示的编码方法将窗口及其邻域分为5个区

3、域。(1)内域:区域(0000)。(2)上域:区域(1001,1000,1010)o(3)下域:区域(0101,0100,0110)。(4)左域:区域(1001,0001,0101)。1001100010100010、£/I0001000001010100OHO*图1・24窗口及其邻域的5个区域及与直线的关系(5)右域:区域(1010,0010,0110)。当线段的两个端点的编码的逻辑“与”非零时,线段显然为不可见的。对某线段的两各端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右。算法的主要思想是,对每条直线,如巴凡

4、利用以下步骤进行判断:①对肓线两端点Pl、P2编码分别记为CI(P1)={«I,b,5d

5、},C2(P2)={d2,加,C2,比}其屮,4、bi、c八么取值范围为{1,0},蛙{1,2}。②如果心刊*),则显示整条直线,収出下一条直线,返回步骤①;否则,进入步骤③。③如果匕51=1,则求宜线与窗上边(尸〉4唤)的交点,并删去交点以上部分。如果1伤-仇1=1,丨6-。21=1,1〃]-〃21=1,进行类似处理。④返回步骤①判断下一条直线。2源程序%计算机图形学直线裁剪CS编码算法functionr=CSCutLine(W#P)%resul

6、t%{闪=窗口坐标线两端点坐标y=x/2W=[xwlzxwr,ywb,ywt]W=[3,7,2,6];P=[xl,yl,x2,y2]P=[0,0,16,8];%}%clear;clc;W=[3,7,2,61;P=[0z0,16,8];r=CSCutLine(W,P)xwl=W(1);xwr=W(2);ywb=W(3);ywt=W(4);xl=P(l);yl=P(2);x2=P(3);y2=P(4);%Rec[xwl,xwr,ywb,ywt];k=0;Lines=[];%取出线段Pl=[xlzyl];P2=[x2fy2];PP=P1-P2;

7、咎计算斜率ifPP(1)==0k=inf;elsek=PP(2)/PP(1);endfinished=false;while(-finished)%对点P:L和行编码code=[Pl(1)Rectangle(2),Pl(2)Rectangle(4);P2(1)Rectangle(2),P2(2)Rectangle(4);];%Pl,P2,k,code%进行简取或简弃的判断test=

8、code(1,:)

9、code(2,:);%判断是否简取ifisempty(find(test>0,1))Lines=[Lines;[Pl,P2]];finished=true;end%若当前线段处理完成,则退岀iffinishedbreak;end%判断是否简弃test=code(1,:)&code(2,:);if〜isempty(find(test>0,1))finished=true;endiffinishedbreak;end%确保Pl在窗口之外ifisempty(find(code(1,:)>0,1))省交换PlzP2的坐标值和编

10、码PT=P1;P1=P2;P2=PT;PT=code(1,:);code(1,:)=code(2,:);code(2,:)=PT;end%从低位开始找编码值为1的地方D=find(code(1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。