計算機(jī)圖形學(xué)實驗CohenSutherland算法_第1頁
計算機(jī)圖形學(xué)實驗CohenSutherland算法_第2頁
計算機(jī)圖形學(xué)實驗CohenSutherland算法_第3頁
計算機(jī)圖形學(xué)實驗CohenSutherland算法_第4頁
計算機(jī)圖形學(xué)實驗CohenSutherland算法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實驗5-6一、實驗題目請按照圖5-32所示,使用對話框輸入直線段的起點(diǎn)和終點(diǎn)坐標(biāo)。在屏幕客戶區(qū)左側(cè)區(qū)域繪制輸入直線段和“窗口”,在屏幕客戶區(qū)右側(cè)區(qū)域繪制“視區(qū)”并輸出裁剪結(jié)果。這里需要用到窗視變換公式。請使用Cohen-Sutherland算法編程實現(xiàn)。二、實驗思想 Cohen-Sutherland直線裁剪算法是最早流行的編碼算法。每條直線的端點(diǎn)都被賦予一組四位二進(jìn)制代碼,稱為區(qū)域編碼(Region Code,RC),用來標(biāo)識直線端點(diǎn)相對于窗口邊界及其延長線的位置。假設(shè)窗口是標(biāo)準(zhǔn)矩形,由上(y=wyt)、下(y=wyb)、左(x=wxl)、右(x=wxr)四條邊組成,如圖5-23所示。延長窗口

2、四條邊形成9個區(qū)域,如圖5-24所示。這樣根據(jù)直線的任一端點(diǎn)P(x,y)所處的窗口區(qū)域位置,可以賦予一組4位二進(jìn)制區(qū)域碼RCC4C3C2C1。 為了保證窗口內(nèi)直線端點(diǎn)的編碼為零,編碼規(guī)則定義如下: 第一位:若端點(diǎn)位于窗口之左側(cè),即x<wxl ,則C1=1,否則C1=0。 第二位:若端點(diǎn)位于窗口之右側(cè),即x>wxr,則C2=1,否則C2=0。 第三位:若端點(diǎn)位于窗口之下側(cè),即y<wyb,則C3=1,否則C3=0。 第四位:若端點(diǎn)位于窗口之上側(cè),即y>wyt,則C4=1,否則C4=0。裁剪步驟如下:(1)若直線的兩個端點(diǎn)的區(qū)域編碼都為零,即RC1|RC2=0,說明直線兩端點(diǎn)

3、都在窗口內(nèi),應(yīng)“簡取”之。(2)若直線的兩個端點(diǎn)的區(qū)域編碼都不為零,即RC1&RC20,即直線位于窗外的同一側(cè),說明直線的兩個端點(diǎn)都在窗口外,應(yīng)“簡棄”之。(3)若直線既不滿足“簡取”也不滿足“簡棄”的條件,直線必然與窗口或窗口邊界的延長線相交,需要計算直線與窗口邊界的交點(diǎn)。交點(diǎn)將直線分為兩段,其中一段完全位于窗口外,可“簡棄”之。對另一段重復(fù)進(jìn)行上述處理,直至該直線段完全被舍棄或找到完全位于窗口內(nèi)的直線段為止。三、程序代碼void CTestView:clip(double xw1,double yw1,double xw2,double yw2)/裁剪函數(shù)double xv1,yv

4、1,xv2,yv2;double x,y;BOOL Change;CClientDC dc(this);RC1=EnCode(xw1,yw1);RC2=EnCode(xw2,yw2);while(TRUE)Change=FALSE;if( (RC1 | RC2)=0)/簡取之xv1=a*xw1+b;yv1=c*yw1+d;xv2=a*xw2+b;yv2=c*yw2+d;/計算視區(qū)坐標(biāo)dc.MoveTo(ROUND(xv1),ROUND(yv1);dc.LineTo(ROUND(xv2),ROUND(yv2);return;else if(RC1 & RC2)!=0)/簡棄之return

5、;elseif(RC1=0)/如果P1點(diǎn)在窗口內(nèi),交換P1和P2,保證p1點(diǎn)在窗口外/交換點(diǎn)的坐標(biāo)值double tx,ty;tx=xw1;ty=yw1;xw1=xw2;yw1=yw2;xw2=tx;yw2=ty;/交換點(diǎn)的編碼值unsigned int RC;RC=RC1;RC1=RC2;RC2=RC;if(RC1 & LEFT )/P1點(diǎn)位于窗口的左側(cè)x=wxl;y=yw1+(yw2-yw1)*(x-xw1)/(xw2-xw1);xw1=x;yw1=y;Change=TRUE;RC1=EnCode(xw1,yw1);RC2=EnCode(xw2,yw2);if(RC1 &

6、RIGHT )/P1點(diǎn)位于窗口的右側(cè)x=wxr;y=yw1+(yw2-yw1)*(x-xw1)/(xw2-xw1);xw1=x;yw1=y;Change=TRUE;RC1=EnCode(xw1,yw1);RC2=EnCode(xw2,yw2);if(RC1 & BOTTOM )/P1點(diǎn)位于窗口的下側(cè)y=wyb;x=xw1+(xw2-xw1)*(y-yw1)/(yw2-yw1);xw1=x;yw1=y;Change=TRUE;RC1=EnCode(xw1,yw1);RC2=EnCode(xw2,yw2);if(RC1 & TOP )/P1點(diǎn)位于窗口的上側(cè)y=wyt;x=xw1+(xw2-xw1)*(y-yw1)/(yw2-yw1);xw1=x;yw1=y;Change=TRUE;RC1=EnCode(xw1,yw1);RC2=EnCode(xw2,yw2);if(Change=FALSE)return;unsigned int CTestView:EnCode(double x,double y)/編碼函數(shù)/順序左右下上unsigned int RC=0;if(x<wxl)RC=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論