计算机图形学编码裁剪实例,计算机图形学(编码裁剪).doc

西北师范大学计算机科学与工程学院学生实验报告

学号专业计算机科学与技术班级师范(1)班姓名课程名称图形学课程类型实验名称实验三 编码裁剪实验目的:(1)掌握区域编码裁剪的基本算法原理;

(2)实践与巩固编码裁剪的基本生成算法;

(3)掌握这些算法的原理及实现;

(4)编程实现编码裁剪算法,得出相应的输出图形。实验内容:

编码裁剪也叫Cohen-sutherland算法,该算法基于下述考虑:每一线段或者整个位于窗口内部,或者能够被窗口分割而使其中一部分能很快地舍弃。因此,该算法分为两步:第一步先确定一条线段是否是整个位于窗口内,若是,则取之;第二步确定是否整个位于窗口外,若是,则弃之;第三步如果第一,第二步的判断都不成立,那么就通过窗口边界所在的直线将线段分为两部分,再对每一部分进行第一,第二步的测试;、

在实际实现该算法是把窗口平面划分为9个区,如下图所示:

实验代码

#include

#include

#include

#define LEFT 1

#define RIGHT 2

#define BOTTOM 4

#define TOP 8

float XL, XR, YB, YT;

void encode(float x, float y, int *code)

{

int c=0;

if(x

{

c=c|LEFT;

}

else if(x>XR)

{

c=c|RIGHT;

}

if(y

{

c=c|BOTTOM;

}

else if(y>YT)

{

c=c|TOP;

}

*code=c;

}

void C_S_LineClip(float x1,float y1,float x2,float y2,float xl,float xr,float yb,float yt)

{

int code1,code2,code;

float x,y;

XL=xl;

XR=xr;

YB=yb;

YT=yt;

encode(x1,y1,&code1);

encode(x2,y2,&code2);

while(code1!=0||code2!=0)

{

if((code1&code2)!=0)

{

return;

}

code=code1;

if(code1==0)

{

code=code2;

}

if((LEFT&code)!=0)

{

x=XL;

y=y1+(y2-y1)*(XL-x1)/(x2-x1);

}

else if((RIGHT&code)!=0)

{

x=XR;

y=y1+(y2-y1)*(XR-x1)/(x2-x1);

}

else if((BOTTOM&code)!=0)

{

y=YB;

x=x1+(x2-x1)*(YB-y1)/(y2-y1);

}

else if((TOP&code)!=0)

{

y=YT;

x=x1+(x2-x1)*(YT-y1)/(y2-y1);

}

if(code==code1)

{

x1=x;

y1=y;

encode(x1,y1,&code1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值