12-直线裁剪算法_第1页
12-直线裁剪算法_第2页
12-直线裁剪算法_第3页
12-直线裁剪算法_第4页
12-直线裁剪算法_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1线段的编码裁剪算法内容大纲1图形裁剪简介2线段与裁剪框的关系3编码规则4编码裁剪算法5编码裁剪程序设计1图形裁剪简介裁剪三种情况②整个线段全在裁剪框外

①整个线段全在裁剪框内③线段部分在裁剪框外,

部分在裁剪框内。

(一个端点在内,一个端点在外,或两个端点全在窗口外)需要裁剪2线段与裁剪框的关系?将裁剪框的边界延长分为九个区域1

110

000001110

00000000000111111000000上四位二进制编码XXXX下右左3编码规则问题:上下?右左2)若两端点的编码按位与不为0000:

?1)若两端点的编码均为0000:

线段在裁剪框内。3)否则计算线段与裁剪框(或延长线)的交点及编码,以交点作为裁剪后线段的新端点,重复1)、2)、3)。4编码裁剪算法

直线段在裁剪框外。【例1】用编码法裁剪如下直线段010100100100001000000010000000004编码裁剪算法00100010001001004编码裁剪算法【例2】用编码法裁剪如下直线段(1)端点编码函数设计已知点(x,y),编码??elseif(x>裁剪框右边)code=2;code=0;if(x<裁剪框左边)code=1;if(y<裁剪框底边)code=code+4;else

if(y>裁剪框顶边)code=code+8;0001(1)

0010(2)0100(4)

1000(8)

5编码裁剪程序设计intCode(RECTr,intx,inty){intcode=0;if(x<r.left)code=1;elseif(x>r.right)code=2;if(y<r.bottom)code=code+4;elseif(y>r.top)code=code+8;returncode;}5编码裁剪程序设计(1)端点编码函数设计11

求线段终点(x2,y2)编码c2

(2)线段裁剪函数设计while(1)//起点可能要裁多次5编码裁剪程序设计

{求线段起点(x1,y1)编码c1if(c1==0&&c2==0)(x1,y1)到(x2,y2)画线

,结束;

elseif((c1&c2)!=0)结束;

elseif(c1==0)交换起点与终点的坐标和编码

根据编码值判断,并计算交点作为新起点}

voidClippingLine(CDC*pDC,RECTr,intx1,inty1,intx2,inty2,COLORREFcolor){intt,c1,c2;c2=Code(r,x2,y2); //计算(x2,y2)的区域编码码

while(true){c1=Code(r,x1,y1); //计算(x1,y1)的编码区域码

if(c1==0&&c2==0)

{Line_DDA(pDC,x1,y1,x2,y2,color);return;}//(x1,y1)(x2,y2)在窗口内绘制直线段elseif((c1&c2)!=0)return; //直线不可见

elseif(c1==0){t=x1,x1=x2,x2=t;t=y1,y1=y2,y2=t;t=c1,c1=c2,c2=t;}//交换坐标及编码

if((c1&1)!=0)y1=y1+(y2-y1)*(r.left-x1)/(x2-x1),x1=r.left;//(x1,y1)在裁剪框左边

elseif((c1&2)!=0)y1=y1+(y2-y1)*(r.right-x1)/(x2-x1),x1=r.right;//在;//在裁剪框下边

elseif((c1&8)!=0)x1=x1+(x2-x1)*(r.top-y1)/(y2-y1),y1=r.top;//在裁裁剪框右边

elseif((c1&4)!=0)x1=x1+(x2-x1)*(r.bottom-y1)/(y2-y1),y1=r.bottom剪框上边

}}5编码裁剪程序设计【应用案例】水平滚动的矢量字1)矢

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论