计算机图形学-裁减算法.doc

计算机图形学-裁减算法.doc

ID:58568534

大小:23.50 KB

页数:5页

时间:2020-10-19

计算机图形学-裁减算法.doc_第1页
计算机图形学-裁减算法.doc_第2页
计算机图形学-裁减算法.doc_第3页
计算机图形学-裁减算法.doc_第4页
计算机图形学-裁减算法.doc_第5页
资源描述:

《计算机图形学-裁减算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Cohen-Sutherland裁减算法#defineLEFT1#defineRIGHT2#defineBOTTOM4#defineTOP8intencode(floatx,floaty){intc=0; if(x

2、=LEFT; if(x>XR)c

3、=RIGHT; if(x

4、=BOTTOM; if(x

5、=TOP; retrunc;}void CS_LineClip(x1,y1,x2,y2,XL,XR,YB,YT)floatx1,y1,x2,y2,XL,XR,YB,YT;//(x1,

6、y1)(x2,y2)为线段的端点坐标,其他四个参数定义窗口的边界{intcode1,code2,code; code1=encode(x1,y1); code2=encode(x2,y2); while(code1!=0

7、

8、code2!=0)//都为0,在窗口内,则取,直接绘制此直线. {if(code1&code2!=0)return;//与运算不为0,在窗口外,则弃,不需处理   code=code1;   if(code1==0)code=code2;//选择窗口外的端点   if(LEFT&code!=

9、0)//该位编码不为0,与对应窗口边界求交   {x=XL;     y=y1+(y2-y1)*(XL-x1)/(x2-x1);}   elseif(RIGHT&code!=0)   {x=XR;     y=y1+(y2-y1)*(XR-x1)/(x2-x1);    }   elseif(BOTTOM&code!=0)   {y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);}elseif(TOP&code!=0){y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1);} 

10、   if(code==code1)//用交点替换窗口外的端点,继续处理余下的线段.{ x1=x;y1=y;code1=encode(x,y);}else{x2=x;y2=y;code2=encode(x,y);} } displayline(x1,y1,x2,y2);}动画演示:Cohen-Sutherland直线段裁剪算法动画演示:Cohen-Sutherland算法和中点分割算法的比较Liang-Barskey算法voidLB_LineClip(x1,y1,x2,y2,XL,XR,YB,YT)floatx

11、1,y1,x2,y2,XL,XR,YB,YT;{floatdx,dy,u1,u2;ul=0;u2=1;dx=x2-x1;dy=y2-y1;if(ClipT(-dx,x1-Xl,&u1,&u2)if(ClipT(dx,XR-x1,&u1,&u2)if(ClipT(-dy,y1-YB,&u1,&u2)if(ClipT(dy,YT-y1,&u1,&u2){displayline(x1+u1*dx,y1+u1*dy,x1+u2*dx,y1+u2*dy)return;}}boolClipT(p,q,u1,u2)float

12、p,q,*u1,*u2;{floatr;if(p<0){r=q/p;if(r>*u2)returnFALSE;elseif(r>*u1){*u1=r;returnTRUE;}}elseif(p>0){r=q/p;if(r<*u1)returnFALSE;elseif(r<*u2){*u2=r;returnTRUE;}}elseif(q<0)returnFALSE;returnTRUE;}

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

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

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