好文档 - 专业文书写作范文服务资料分享网站

计算机图形学 实验四 二维图形的裁剪

天下 分享 时间: 加入收藏 我要投稿 点赞

西北农林科技大学实习报告

学 院名称:理 学 院 专业班级: 姓名: 学 号:

课程:计算机图形学实验 报告日期:

第十五周 实验四 二维图形的裁剪

一、实验目的

1)加深直线段的剪裁算法的理解。 2)熟练掌握一种裁剪算法的编程方法。 二、实验步骤

1)分析直线段和矩形窗口的位置关系,选定比较合理算法流程。 2)画出程序流程图。 3)编写程序的源程序。 4)编辑源程序并进行调试。

5)进行特殊模式的运行测试,并结合情况进行调整。 三、实验内容

1)在编码算法、中点分割算法、Liang-Barsky算法三种中任选一种作为编程模型。

2)编写直线段裁剪的源程序。

3)建议有能力的学生编写多边形裁剪程序。 4)在计算机上编辑编译运行,实现直线段的裁剪。 原理

1.直线和窗口的关系:

直线和窗口的关系可以分为如下3类:

(1)整条直线在窗口内。此时,不需剪裁,显示整条直线。 (2)整条直线在窗口外,此时,不需剪裁,不显示整条直线。

(3)部分直线在窗口内,部分直线在窗口外。此时,需要求出直线与窗框的交点,并将窗口外的直线部分剪裁掉,显示窗口内的直线部分。

直线剪裁算法有两个主要步骤。首先将不需剪裁的直线挑出,即删去在窗外的直线。然后,对其余直线,逐条与窗框求交点,并将窗口外的部分删去。

2.Cohen-Sutherland直线剪裁算法:

(1)输入直线段的两端点坐标p1(x1,y1),p2(x2,y2),以及窗口的4条边界坐标,ywt,ywb,ywl,ywr.

(2)对p1,p2进行编码,点p1的编码为code1,点p2的编码为code2. (3)若code1| code2=0,对直线p1p2“简取”之,转(6);否则,若code1& code2≠0,对直线段“简弃”之,转(7);当上述两条均不满足时,进行步骤(4)。

(4)确保p1在窗口外部。若p1在窗口内,则交换p1和p2的坐标值和编码。

(5)根据p1编码从低位开始寻找值为1的地方 ,从而确定p1在窗口外的哪一侧,然后求出直线段与相应窗口边界的交点S,并用交点S的坐标值替换p1的坐标值,即在交点S处把线段一分为二,因此可以去掉p1S。转(2)。

(6)用直线扫描算法转换算法画出当前的直线段p1p2。 (7)算法结束。 图形描述: 在MATLAB中输入: >> W=[3,7,2,5] W =

3 7 2 5 >> P=[0,0,16,16] P =

0 0 16 16 >> r=CSCutLine(W,P) r = 1

程序的源程序:

M文件,命名为CSCutLine

% 计算机图形学 直线裁剪 CS编码算法

function r=CSCutLine(W,P) %result %{

W=窗口坐标 P=直线两端点坐标 y=x/2 W=[xwl,xwr,ywb,ywt] W=[3,7,2,6]; P=[x1,y1,x2,y2] P=[0,0,16,8]; %}

% clear;clc;W=[3,7,2,6];P=[0,0,16,8];r=CSCutLine(W,P) xwl=W(1); xwr=W(2); ywb=W(3); ywt=W(4); x1=P(1); y1=P(2); x2=P(3); y2=P(4); Rectangle=[xwl,xwr,ywb,ywt]; k=0; Lines=[]; %取出线段 P1=[x1,y1]; P2=[x2,y2]; PP=P1-P2; %计算斜率 if PP(1)==0 k=inf; else

k=PP(2)/PP(1);

end

finished=false; while (~finished) %对点P1和P2进行编码 code=[

P1(1)Rectangle(2),P1(2)Rectangle(4);

P2(1)Rectangle(2),P2(2)Rectangle(4); ];

% P1,P2,k,code

%进行简取或简弃的判断

test=code(1,:)|code(2,:);

%判断是否简取

if isempty(find(test>0,1)) Lines=[Lines;[P1,P2]]; finished=true; end

%若当前线段处理完成,则退出 if finished break; end

%判断是否简弃

test=code(1,:)&code(2,:); if ~isempty(find(test>0,1)) finished=true; end

if finished break; end

%确保P1在窗口之外

if isempty(find(code(1,:)>0,1)) %交换P1,P2的坐标值和编码 PT=P1; P1=P2; P2=PT;

PT=code(1,:); code(1,:)=code(2,:); code(2,:)=PT; end

%从低位开始找编码值为1的地方 D=find(code(1,:)>0,1); if D<=2

计算机图形学 实验四 二维图形的裁剪

西北农林科技大学实习报告学院名称:理学院专业班级:姓名:学号:课程:计算机图形学实验报告日期:第十五周实验四二维图形的裁剪一、实验目的1)加深直线段的剪裁算法的理解。2)熟练掌握一种裁剪算法的编程方法。二、实验步骤<
推荐度:
点击下载文档文档为doc格式
8s5jw161vh7u3cm9b9nu86wqu5roq700367
领取福利

微信扫码领取福利

微信扫码分享