計(jì)算機(jī)圖形學(xué)(第3版)課件:圖形變換_第1頁(yè)
計(jì)算機(jī)圖形學(xué)(第3版)課件:圖形變換_第2頁(yè)
計(jì)算機(jī)圖形學(xué)(第3版)課件:圖形變換_第3頁(yè)
計(jì)算機(jī)圖形學(xué)(第3版)課件:圖形變換_第4頁(yè)
計(jì)算機(jī)圖形學(xué)(第3版)課件:圖形變換_第5頁(yè)
已閱讀5頁(yè),還剩132頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2024/12/141計(jì)算機(jī)圖形學(xué)

圖形變換第一節(jié)齊次坐標(biāo)第二節(jié)二維圖形變換第三節(jié)二維視見(jiàn)變換第四節(jié)三維圖形變換第五節(jié)投影變換第六節(jié)裁剪3D

觀察坐標(biāo)系3D本體坐標(biāo)系(模型坐標(biāo)系)3D用戶坐標(biāo)系(世界坐標(biāo)系)本體坐標(biāo)系 也稱模型坐標(biāo)系,是為規(guī)定基本形體而引入的便于描述的坐標(biāo)系。用戶坐標(biāo)系 也稱世界坐標(biāo)系,是用戶引入描述整個(gè)形體的坐標(biāo)系。觀察坐標(biāo)系 也稱視坐標(biāo)系或目坐標(biāo)系,為說(shuō)明觀察的姿態(tài)而引入,也就是觀察者所處的位置。3D

觀察坐標(biāo)系3D本體坐標(biāo)系(模型坐標(biāo)系)3D用戶坐標(biāo)系(世界坐標(biāo)系)設(shè)備坐標(biāo)系 也稱顯示器坐標(biāo)系或屏坐標(biāo)系,是各種圖形設(shè)備自身規(guī)定的在顯示表面上采用的坐標(biāo)系。要顯示的景物最終要在這個(gè)坐標(biāo)系中顯示出來(lái)。規(guī)范化設(shè)備坐標(biāo)系 不同圖形設(shè)備的設(shè)備坐標(biāo)系一般不同,圖形系統(tǒng)為了使繪制與具體設(shè)備無(wú)關(guān)而引入的坐標(biāo)系,約定它是二維正方形,即各坐標(biāo)范圍規(guī)定為從0至1。右手系左手系左手系:在計(jì)算機(jī)圖形學(xué)中,通常約定為假想眼睛位于原點(diǎn),x軸方向是水平向右,y軸方向豎直向上,z軸方向離開(kāi)眼睛射向前方,這樣形成的觀察坐標(biāo)系是左手系。(本書(shū)采用左手系)右手系:如果讓z軸的方向面向眼睛方向,這樣得到的觀察坐標(biāo)系就是右手系。坐標(biāo)系圖形(幾何)變換:為了從不同方向去觀察對(duì)象,而對(duì)對(duì)象所作的旋轉(zhuǎn)、放大、縮小和平移等變換。將景物在本體坐標(biāo)系中的描述轉(zhuǎn)變?yōu)樵谟脩糇鴺?biāo)系中的描述。投影變換:三維圖形投影在二維投影平面上的變換。將景物在用戶坐標(biāo)系中的描述轉(zhuǎn)變?yōu)樵谟^察坐標(biāo)系中的描述。視見(jiàn)變換:繪圖過(guò)程中要用窗口來(lái)規(guī)定要顯示的內(nèi)容,用視區(qū)來(lái)規(guī)定在屏幕上顯示的位置所應(yīng)用的變換。將景物在觀察坐標(biāo)系中的描述轉(zhuǎn)變?yōu)樵谠O(shè)備坐標(biāo)系中的描述。圖形顯示的坐標(biāo)變換過(guò)程圖形(幾何)變換投影變換視見(jiàn)變換齊次坐標(biāo)表示法就是用n+1維向量表示一個(gè)n維向量。

n維空間中的點(diǎn)的位置向量用非齊次坐標(biāo)表示時(shí),(P1,P2,…,Pn)具有n個(gè)坐標(biāo)分量,并且是唯一的。如果用齊次坐標(biāo)表示時(shí),該向量有n+1個(gè)坐標(biāo)分量,(hP1,hP2,…,hPn,h)并且是不唯一的。 通常都使h=1。如果h≠0,就可以用除齊次坐標(biāo)的各分量,這一方法稱之為齊次坐標(biāo)的規(guī)范化。經(jīng)過(guò)規(guī)范化后的齊次坐標(biāo)就是唯一的。第一節(jié)、齊次坐標(biāo) 如二維點(diǎn)(x,y)的齊次坐標(biāo)表示為(hx,hy,h),則(h1x,h1y,h1),(h2x,h2y,h2),…,(hmx,hmy,hm)都是表示二維空間中的同一個(gè)點(diǎn)三維空間中的坐標(biāo)點(diǎn)的齊次坐標(biāo)可表示為(x,y,1)。 應(yīng)用齊次坐標(biāo)可以有效地用矩陣運(yùn)算把二維、三維甚至更高維空間中點(diǎn)集從一個(gè)坐標(biāo)系轉(zhuǎn)換到另一個(gè)坐標(biāo)系中。第一節(jié)、齊次坐標(biāo)二維齊次坐標(biāo)變換矩陣的形式為三維齊次坐標(biāo)變換矩陣的形式為第二節(jié)二維圖形變換

對(duì)一個(gè)圖形作幾何變換就是對(duì)該圖形上的每一個(gè)點(diǎn)作相應(yīng)的幾何變換。

常見(jiàn)的基本二維圖形幾何變換有平移變換、比例變換和旋轉(zhuǎn)變換。

平移變換比例變換旋轉(zhuǎn)變換1.平移變換2.比例變換3.旋轉(zhuǎn)變換

可以用、、來(lái)表示平移、比例、旋轉(zhuǎn)這三種基本的幾何變換。多數(shù)常見(jiàn)的二維幾何變換都可以通過(guò)這三種基本幾何變換的組合來(lái)達(dá)到。

比例變換和旋轉(zhuǎn)變換都是相對(duì)于坐標(biāo)原點(diǎn)進(jìn)行的,如果希望相對(duì)于任意一點(diǎn)作變換,可以先平移到原點(diǎn),相對(duì)于原點(diǎn)作變換后,在平移回去。例一:求圖形繞平面上任意一點(diǎn)(x0,y0)的旋轉(zhuǎn)變換矩陣,設(shè)旋轉(zhuǎn)角度為(1)平移T(-x0,-y0),使旋轉(zhuǎn)中心與原點(diǎn)重合(2)繞原點(diǎn)逆時(shí)針旋轉(zhuǎn)R()(3)平移T(x0,y0),使旋轉(zhuǎn)中心移回原處

例二:相對(duì)于平面上任意一點(diǎn)的比例變換如下:(1)平移T(-x0,-y0),使比例中心與原點(diǎn)重合(2)相對(duì)于原點(diǎn)的比例變換(3)平移T(x0,y0),比例中心移回原處常見(jiàn)的變換1.對(duì)稱變換(反射、鏡像變換)

2.錯(cuò)切變換(錯(cuò)移變換)(1)沿X軸方向關(guān)于Y的錯(cuò)切(Y不變)(2)沿Y軸方向關(guān)于X的錯(cuò)切(X不變)(3)沿X軸Y軸兩個(gè)方向的錯(cuò)切二維圖形變換總結(jié)平移變換:只改變圖形的位置,不改變圖形的大小和幾何形狀;旋轉(zhuǎn)變換:保持圖形的大小和幾何形狀;比例變換:改變圖形的大小和幾何形狀;錯(cuò)切變換:引起圖形各部分之間角度關(guān)系的變化,會(huì)導(dǎo)致圖形發(fā)生畸變;拓?fù)洳蛔兊膸缀巫儞Q不改變圖形的連接關(guān)系和平行關(guān)系。平移、旋轉(zhuǎn)、比例、錯(cuò)切變換都屬于拓?fù)洳蛔兊膸缀巫儞Q。二維圖形變換總結(jié):第三節(jié)二維視見(jiàn)變換視見(jiàn)變換:就是將觀察坐標(biāo)系窗口中指定的圖形轉(zhuǎn)換至設(shè)備坐標(biāo)系視區(qū)中顯示的過(guò)程。(DonaldHearn)窗口就是在觀察坐標(biāo)系中指出的要顯示出來(lái)的區(qū)域,這一區(qū)域通常為矩形區(qū)域。視見(jiàn)區(qū)是屏幕域中的一個(gè)子區(qū)域,通常為矩形區(qū)域,它最大與屏幕域等同。投影平面屏幕Viewport窗口到視見(jiàn)區(qū)窗口與視見(jiàn)區(qū)的差別:窗口:在觀察坐標(biāo)系中確定,它指出了要顯示的圖形;視見(jiàn)區(qū):在設(shè)備坐標(biāo)系中確定,它指出了實(shí)際顯示的圖形處于顯示屏幕的哪一部分。視見(jiàn)區(qū)用于顯示窗口中的圖形。設(shè)窗口中圖形上的某一點(diǎn)坐標(biāo)為,該點(diǎn)顯示在視見(jiàn)區(qū)中的坐標(biāo)為,利用視見(jiàn)變換矩陣可得出以下計(jì)算公式:第四節(jié)三維圖形變換

設(shè)三維空間中任意一點(diǎn)P的齊次坐標(biāo)為P=(x,y,z,1),做了三維圖形幾何變換后得到的點(diǎn)P’的齊次坐標(biāo)為P’=(x’,y’,z’,1),可得下面的三維圖形幾何變換矩陣。1.平移變換2.比例變換3.旋轉(zhuǎn)變換①繞Z軸旋轉(zhuǎn)

②繞X軸旋轉(zhuǎn)③繞Y軸旋轉(zhuǎn)例:設(shè)三維空間中有一條任意直線,它由直線上一點(diǎn)Q和沿直線方向的單位方向向量n確定。Q點(diǎn)坐標(biāo)為,直線向量

求繞這條直線旋轉(zhuǎn)角的旋轉(zhuǎn)變換矩陣。1.實(shí)現(xiàn)該變換可以先做平移變換,使旋轉(zhuǎn)軸成為通過(guò)坐標(biāo)原點(diǎn)的一條直線,然后做繞通過(guò)坐標(biāo)原點(diǎn)的旋轉(zhuǎn)軸旋轉(zhuǎn)角的旋轉(zhuǎn)變換,最后再做平移變換,即開(kāi)始所作平移變換的逆變換,使旋轉(zhuǎn)軸平移回到原來(lái)的位置。2.過(guò)坐標(biāo)原點(diǎn)的任意直線為旋轉(zhuǎn)軸的旋轉(zhuǎn)變換可分為五步實(shí)現(xiàn):(1)做繞X軸旋轉(zhuǎn)角的變換,使旋轉(zhuǎn)軸落在Y=0上。(2)做繞Y軸旋轉(zhuǎn)角的變換,使旋轉(zhuǎn)軸與Z軸重合。(3)做繞Z軸旋轉(zhuǎn)角的旋轉(zhuǎn)變換。(4)做第2步的逆變換,即做繞Y軸-旋轉(zhuǎn)變換。(5)做第1步的逆變換,即做繞X軸-旋轉(zhuǎn)變換。三維圖形變換旋轉(zhuǎn),比例,對(duì)稱,錯(cuò)切變換平移變換投影變換整體比例變換第五節(jié)投影變換三維觀察過(guò)程:用戶(世界)坐標(biāo)系→觀察坐標(biāo)系(投影平面)投影:把n維空間中的點(diǎn)投射到小于n維的空間中去投影的形成:1.在三維空間中確定一個(gè)投影中心和一個(gè)投影平面,2.形體上的每一點(diǎn)與投影中心相連,這些連線稱為投射直線,它們與投影平面相交,在投影平面上就形成了形體的投影。投影中心投影平面投射直線投影中心與投影平面之間距離為dd無(wú)限平行投影,當(dāng)投影中心與投影平面的距離為無(wú)窮遠(yuǎn)時(shí),投射直線成為一組平行線.投射線平行,立體感差,能保持比例關(guān)系投影平面投影平面投影方向投影中心與投影平面之間距離為dd有限透視投影,當(dāng)投影中心與投影平面的距離是有限數(shù)值時(shí),投射直線交于一點(diǎn),形成滅點(diǎn).立體感強(qiáng),更真實(shí),但不能保持原來(lái)的比例關(guān)系投影平面投影中心投影平面投影中心投影投影平面正投影投影平面斜投影正投影垂直于投影平面斜投影傾斜于投影平面一.平行投影(正投影和斜投影)一.平行投影(正投影和斜投影)1.正投影投影方向與投影平面的法向相同常見(jiàn)的正投影是正視投影、頂視投影和側(cè)視投影

如果投影平面Z=0,投影方向是沿Z軸,設(shè)三維空間中有普通坐標(biāo)為(x,y,z)的一點(diǎn)P,投影后,成為點(diǎn)P’,普通坐標(biāo)為(x’,y’,z’)可知:正視圖頂視圖側(cè)視圖垂直于投影平面的投影方向正投影xyz正投影:投影平面垂直于坐標(biāo)軸的正交投影。等軸投影:投影平面的法線方向,即投影方向與三個(gè)坐標(biāo)軸的夾角都相等。這種投影能使在三個(gè)坐標(biāo)軸方向上有相等的透視縮短。

投影平面斜投影

2.斜投影

當(dāng)平行投影中投影平面的法線方向與投影方向不同時(shí)就得到斜交投影。在斜交投影中,投影平面一般取坐標(biāo)平面。XYZ

設(shè)三維空間中有普通坐標(biāo)為的任意一點(diǎn),經(jīng)斜交投影后所得投影點(diǎn)普通坐標(biāo)為。顯然,有:

設(shè)三維空間中有普通坐標(biāo)為的任意一點(diǎn),經(jīng)斜交投影后所得投影點(diǎn)普通坐標(biāo)為。顯然,有:OzxP(0,1)Q(lcosα,0)(x’,0)(x,z)(x,0)

設(shè)三維空間中有普通坐標(biāo)為的任意一點(diǎn),經(jīng)斜交投影后所得投影點(diǎn)普通坐標(biāo)為。顯然,有:yzOP(0,1)R(lsinα,0)(y’,0)(y,z)(y,0)斜二測(cè)投影:垂直于投影平面的線段長(zhǎng)度縮短為原來(lái)的一半;斜交投影中兩個(gè)比較重要的情形是斜二測(cè)投影和斜等軸投影。斜二測(cè)投影:垂直于投影平面的線段長(zhǎng)度縮短為原來(lái)的一半;斜等軸投影:使垂直于投影平面的線段仍保持長(zhǎng)度.

斜等軸投影投影方向(45)斜二測(cè)投影投影方向(63.4)二.透視投影性質(zhì):任意一組平行直線,如果平行于投影平面,則經(jīng)透視投影后所得到的直線或者重合,或者仍保持平行;如果不平行于投影平面,將不再保持平行,并且必會(huì)匯聚于同一點(diǎn),這個(gè)點(diǎn)稱為消失點(diǎn),也稱為滅點(diǎn)??臻g中可以取得任意多組不平行于投影平面的平行直線,所以消失點(diǎn)也可以取得任意多個(gè)。

主消失點(diǎn):平行于一個(gè)坐標(biāo)軸中的一組平行線對(duì)應(yīng)的消失點(diǎn)稱為主消失點(diǎn)。因?yàn)橹挥腥齻€(gè)坐標(biāo)軸,所以最多只有三個(gè)主消失點(diǎn)。根據(jù)主消失點(diǎn)的數(shù)目,透視投影可以分為一點(diǎn)透視、二點(diǎn)透視、三點(diǎn)透視。如果投影平面截Z軸并與它垂直,這時(shí)就只能在Z軸方向上有主消失點(diǎn)。

單消失點(diǎn)的透視投影計(jì)算左手坐標(biāo)系投影中心是坐標(biāo)原點(diǎn)投影平面垂直于Z軸 設(shè)投影平面位于處Z=d,可設(shè)d>0。對(duì)空間中任意一點(diǎn)P,其普通坐標(biāo)為(x,y,z),它在投影平面上的投影點(diǎn)P’的普通坐標(biāo)為(xp,yp,zp)

利用后兩個(gè)圖中三角形的相似關(guān)系,可以得出:使用齊次坐標(biāo)可以得出:對(duì)齊次坐標(biāo)進(jìn)行規(guī)范化后得:透視投影變換矩陣為:同理易求當(dāng)投影平面是平面x=d和y=d時(shí),此時(shí)的透視投影變換矩陣分別為:實(shí)用中,常取z=0為投影平面,這時(shí)投影中心可取空間中任意一點(diǎn)(x0,y0,z0)。假定z0是一個(gè)負(fù)數(shù),即z0=-d,d>0。用前面相同的方法,可以得出:實(shí)用中,常取z=0為投影平面,這時(shí)投影中心可取空間中任意一點(diǎn)(x0,y0,z0)。假定z0是一個(gè)負(fù)數(shù),即z0=-d,d>0。用前面相同的方法,可以得出:可以用齊次坐標(biāo)驗(yàn)證,有:

將結(jié)果規(guī)范化后得到齊次坐標(biāo)為:兩點(diǎn)透視

假設(shè)投影中心仍然在原點(diǎn),而投影平面與y軸平行,而與x軸和z軸相交三點(diǎn)透視

設(shè)投影中心在原點(diǎn)

假設(shè)投影中心為,則三點(diǎn)透視投影的投影變換矩陣為投影總結(jié):

1平行投影

1)正交:正投影,等軸

2)斜交:斜二測(cè),斜等軸

2透視投影

1)一點(diǎn)透視

2)二點(diǎn)透視

3)三點(diǎn)透視第六節(jié)裁剪

裁剪就是去掉窗口外的不可見(jiàn)部分,保留窗口內(nèi)的可見(jiàn)部分的過(guò)程。裁剪區(qū)域:矩形、任意圖形裁剪對(duì)象:點(diǎn)、線段、多邊形、二維或三維形體

假設(shè)窗口的兩個(gè)對(duì)角頂點(diǎn)分別是、,則同時(shí)滿足下列不等式的點(diǎn)是要保留的點(diǎn),否則就要被舍棄:一、直線段裁剪算法

1.Cohen-Sutherland算法對(duì)象的可見(jiàn)性問(wèn)題:①判斷直線段完全可見(jiàn),若是,則繪制,結(jié)束,保留②判定完全不可見(jiàn),若是,則不繪制,結(jié)束,舍棄③若①②都不滿足,部分可見(jiàn),則求線段與窗口邊界線的交點(diǎn)(分割),對(duì)子線段繼續(xù)①~③,直至所有直線段和由直線段分割出來(lái)的子線段都已經(jīng)確定了是保留還是舍棄為止。Cohen-Sutherland算法算法步驟如下:第一步:編碼第二步:判別第三步:求交第四步:對(duì)剩下的線段重復(fù)以上各步1.編碼: 每個(gè)區(qū)域用一個(gè)4位二進(jìn)制編碼來(lái)標(biāo)識(shí),代碼確定如下: 若區(qū)域在窗口上方:則第1位為1; 若區(qū)域在窗口下方:則第2位為1; 若區(qū)域在窗口右側(cè),則第3位為1; 若區(qū)域在窗口左側(cè),則第4位為1。設(shè)線段的兩個(gè)端點(diǎn)p1(x1,y1),p2(x2,y2),求出p1,p2所處區(qū)域的代碼c1和c2

2.判別:⑴c1=c2=0,完全可見(jiàn),保留,AB⑵c1&c2!=0完全不可見(jiàn),舍棄CD

⑶不滿足⑴⑵可分為三種情況①一個(gè)端點(diǎn)在內(nèi)另一個(gè)端點(diǎn)在外EF②兩個(gè)端點(diǎn)都在外,且直線段在外JK③兩個(gè)端點(diǎn)都在外,但直線中部跨越窗口HI

3.求交。求線段與窗口邊界及其延長(zhǎng)線的交點(diǎn)4.對(duì)剩下的子線段重復(fù)以上各步,從而完成對(duì)直線段的裁剪將 ,代入上式,求出左右邊界交點(diǎn)坐標(biāo)將 ,代入上式,求出上下邊界交點(diǎn)坐標(biāo)Cohen-Sutherland算法算法的程序?qū)崿F(xiàn)如下函數(shù)Cohen_Sutherland用來(lái)實(shí)現(xiàn)算法函數(shù)makecode用來(lái)編碼,利用數(shù)值位運(yùn)算doublexl,xr,yt,yb;(事先給出窗口的位置,四個(gè)數(shù)值是已知的)Cohen-Sutherland算法端點(diǎn)P0編碼端點(diǎn)P2編碼while(P0P2不完全可見(jiàn)){ if(P0P2完全不可見(jiàn))return;

求交點(diǎn)P; if(P0在裁剪區(qū)域外) P0=P; else P2=P;}繪制P0P2;intmakecode(doublex,doubley){ intc=0;

if(x<xl)c=1; elseif(x>xr)c=2; if(y<yb)c=c+4; elseif(y>yt)c=c+8; returnc;}voidCohen_Sutherland(doublex0,doubley0,doublex2,doubley2){ intc,c0,c1; doublex,y;

c0=makecode(x0,y0);c1=makecode(x2,y2); while(c0!=0||c1!=0) { if(c0&c1!=0)return;

c=c0;if(c==0)c=c1; if(c&1==1){y=y0+(y2-y0)*(xl-x0)/(x2-x0);x=xl;} elseif(c&2==2){y=y0+(y2-y0)*(xr-x0)/(x2-x0);x=xr;} elseif(c&4==4){x=x0+(x2-x0)*(yb-y0)/(y2-y0);y=yb;} elseif(c&8==8){x=x0+(x2-x0)*(yt-y0)/(y2-y0);y=yt;} if(c==c0){x0=x;y0=y;c0=makecode(x,y);} else{x2=x;y2=y;c1=makecode(x,y);} } showline(x0,y0,x2,y2);//顯示可見(jiàn)線段}2、中點(diǎn)分割裁剪算法基本思想:與前一種Cohen-Sutherland算法一樣首先對(duì)線段端點(diǎn)進(jìn)行編碼,并把線段與窗口的關(guān)系分為三種情況:1)完全可見(jiàn),繪制線段2)完全不可見(jiàn),線段不繪制,舍棄3)求中點(diǎn)pm,分割成p0pm,pmp1,再分別進(jìn)行判斷,直到會(huì)不會(huì)無(wú)限循環(huán)、不斷二分?中點(diǎn)分割算法可分成兩個(gè)過(guò)程平行進(jìn)行,從p0點(diǎn)出發(fā)找出離點(diǎn)p0最近的可見(jiàn)點(diǎn),從p1點(diǎn)出發(fā)找出離點(diǎn)p1最近的可見(jiàn)點(diǎn)。這兩個(gè)最近可見(jiàn)點(diǎn)的連線就是原直線段的可見(jiàn)部分。從P0出發(fā)找最近可見(jiàn)點(diǎn)的方法梁友棟-Barsky算法設(shè)要裁剪的直線段為。P0P1和窗口邊界交于A、B、C和D四個(gè)點(diǎn)?;舅枷耄簭腁、B(始邊交點(diǎn))和P0三點(diǎn)中找出最靠近P1的點(diǎn),該點(diǎn)是P0。從C、D(終邊交點(diǎn))和P1點(diǎn)中找出最靠近P0的點(diǎn),該點(diǎn)是點(diǎn)C。那么P0C就是線段上的可見(jiàn)部分。ABP0P1CD在具體計(jì)算時(shí),可以把寫(xiě)成參數(shù)方程:把窗口邊界的四條邊分成兩類,一類稱為始邊,另一類稱為終邊。當(dāng)時(shí),稱為始邊,為終邊。當(dāng)時(shí),稱為始邊,為終邊。ABP0P1CD求出P0P1和兩條始邊的交點(diǎn)的參數(shù)和,令:求出P0P1和兩條終邊的交點(diǎn)的參數(shù)和,令:ABP0P1CDABP0P1CDABP0P1CDABP0P1CD當(dāng)t1>t0時(shí),參數(shù)方程中參數(shù)的線段就是的可見(jiàn)部分。當(dāng)t1<t0

時(shí),整個(gè)直線段為不可見(jiàn)ABP0P1CDABP0P1CD求出P0P1和兩條始邊的交點(diǎn)的參數(shù)和,令:求出P0P1和兩條終邊的交點(diǎn)的參數(shù)和,令:交點(diǎn)的參數(shù)為:ABP0P1CDtl是P0P1與左邊界的交點(diǎn)參數(shù)tr是P0P1與右邊界的交點(diǎn)參數(shù)tb是P0P1與下邊界的交點(diǎn)參數(shù)tt是P0P1與上邊界的交點(diǎn)參數(shù)令:則ABP0P1CD當(dāng)時(shí),則p0p1是完全不可見(jiàn)的(如圖3.30中的直線段AB,使)。當(dāng)時(shí),如CD,當(dāng)時(shí),是和始邊的交點(diǎn)的參數(shù)。當(dāng)時(shí),是和終邊的交點(diǎn)的參數(shù)。

boolcansee(doubleq,doubled,double&t0,double&t1)//

函數(shù)cansee用于判斷直線段是否可見(jiàn)。{ doubler; if(q<0){//計(jì)算與始邊的交點(diǎn)參數(shù)

r=d/q; if(r>t1){returnfalse;} elseif(r>t0)t0=r;// }elseif(q>0){//計(jì)算與終邊的交點(diǎn)參數(shù)

r=d/q; if(r<t0){returnfalse;} elseif(r<t1)t1=r;// }elseif(d<0){returnfalse;} returntrue;}

函數(shù)L_Barsky實(shí)現(xiàn)算法voidL_Barsky(doublex0,doubley0,doublex1,doubley1)//doublexl,xr,yt,yb;(窗口位置){ doublet0,t1,deltax,deltay; t0=0.0;t1=1.0; deltax=x1-x0; if(!cansee(-deltax,x0-xl,t0,t1))return; if(!cansee(deltax,xr-x0,t0,t1))return; deltay=y1-y0; if(!cansee(-deltay,y0-yb,t0,t1))return; if(!cansee(deltay,yt-y0,t0,t1))return; x1=x0+t1*deltax;y1=y0+t1*deltay; x0=x0+t0*deltax;y0=y0+t0*deltay; showline(x0,y0,x1,y1);//顯示可見(jiàn)線段}二、其它圖形的裁剪1、字符的裁剪2、多邊形的裁剪3、圓弧的裁剪4、裁剪區(qū)域?yàn)橥苟噙呅螀^(qū)域的直線段裁剪

字符裁剪如果把字符的每一筆看成是由一條直線段或幾條直線段組成的,那么就可以用直線段裁剪的方法去處理每一筆劃;或者把包含一個(gè)字符的最小矩形在窗口外的字符認(rèn)為不可見(jiàn)。字符串裁剪如果包含字符串的最小矩形在窗口外,則認(rèn)為整個(gè)字符串為不可見(jiàn)。1、字符裁剪字符裁剪串精度:將包圍字串的外接矩形對(duì)窗口作裁剪字符精度:將包圍字的外接矩形對(duì)窗口作裁剪筆畫(huà)\象素精度:將筆劃分解成直線段對(duì)窗口作裁剪待裁剪字符串 串精度裁剪 字符精度裁剪象素精度裁剪STRINGSTRING2STRING2RINGSTRING2STRINGSTRING22、多邊形的裁剪多邊形裁剪后,一部分窗口的邊界有可能成為裁剪后多邊形的邊界,而一個(gè)凹多邊形裁剪后可能成為幾個(gè)多邊形

對(duì)多邊形的裁剪可以采用Sutherland-Hodgman算法,只要對(duì)多邊形用窗口的四條邊裁剪四次就可得到裁剪后的多邊形多邊形裁剪多邊形裁剪基本思想:一次用窗口的一條邊裁剪多邊形。窗口的一條邊以及延長(zhǎng)線構(gòu)成的裁剪線把平面分成兩個(gè)部分:可見(jiàn)一側(cè);不可見(jiàn)一側(cè)多邊形的各條邊的兩端點(diǎn)S、P。它們與裁剪線的位置關(guān)系只有四種對(duì)于情況(1)僅輸出頂點(diǎn)P;情況(2)輸出0個(gè)頂點(diǎn);情況(3)輸出線段SP與裁剪線的交點(diǎn)I;情況(4)輸出線段SP與裁剪線的交點(diǎn)I和終點(diǎn)PSP與裁剪線同側(cè)不同側(cè)同在可見(jiàn)一側(cè)(1)同在不可見(jiàn)一側(cè)(2)S可見(jiàn),P不可見(jiàn)(3)S不可見(jiàn),P可見(jiàn)(4)開(kāi)始輸入第一個(gè)頂點(diǎn)→S第一個(gè)頂點(diǎn)→F輸入下一個(gè)頂點(diǎn)P處理線段SPP→SF→P處理線段SP結(jié)束頂點(diǎn)輸入完畢YN(1)主框圖

該算法僅用一條裁剪邊對(duì)多邊形進(jìn)行裁剪,得到一個(gè)頂點(diǎn)序列,作為下一條裁剪邊處理過(guò)程的輸入。SP與裁剪線相交求SP與裁剪線的交點(diǎn)I輸出IP位于可見(jiàn)一側(cè)輸出頂點(diǎn)PYNYN(2)處理線段SP過(guò)程子框圖可見(jiàn)一側(cè)可見(jiàn)一側(cè)可見(jiàn)一側(cè)可見(jiàn)一側(cè)SpSSSppp(1)(2)(3)(4)開(kāi)始輸入第一個(gè)頂點(diǎn)→S第一個(gè)頂點(diǎn)→F輸入下一個(gè)頂點(diǎn)P處理線段SPP→SF→P處理線段SP結(jié)束頂點(diǎn)輸入完畢YNSP與裁剪線相交求SP與裁剪線的交點(diǎn)I輸出IP位于可見(jiàn)一側(cè)輸出頂點(diǎn)PYNYN(1)主框圖(2)處理線段SP過(guò)程子框圖3、圓弧裁剪可把圓弧和窗口四條邊的交點(diǎn)求出來(lái),再按交點(diǎn)對(duì)圓心幅角的大小排序,排序后,相鄰的兩個(gè)交點(diǎn)決定了圓弧上一段可見(jiàn)或不可見(jiàn)的弧。3、圓弧裁剪(1)計(jì)算圓弧與裁剪邊的交點(diǎn)

相切交點(diǎn)不計(jì)在內(nèi)

在延長(zhǎng)線上的交點(diǎn)不計(jì)在內(nèi)(2)交點(diǎn)與圓心連線夾角按逆時(shí)針排序(3)可見(jiàn)圓弧與不可見(jiàn)圓弧交替出現(xiàn)

第一段圓弧的可見(jiàn)性根據(jù)(x0+R,y)是否在裁剪區(qū)域內(nèi)判斷歸納為:(1)圓弧端點(diǎn)在一條裁剪邊上,不可見(jiàn);(2)圓弧端點(diǎn)在相鄰裁剪邊或?qū)ΨQ裁剪邊上,可見(jiàn)。4、裁剪區(qū)域?yàn)橥苟噙呅螀^(qū)域的直線段裁剪1.計(jì)算所要裁剪的直線段所在直線與凸多邊形區(qū)域的邊界直線段的交點(diǎn)。2.當(dāng)交點(diǎn)的個(gè)數(shù)為0或1時(shí),該直線段處于凸多邊形區(qū)域外

3.當(dāng)交點(diǎn)的個(gè)數(shù)為2時(shí),通過(guò)判斷這兩個(gè)交點(diǎn)與被裁剪的直線段的端點(diǎn)在直線段所處的直線上的關(guān)系來(lái)進(jìn)行裁剪。1)

如果直線段的兩個(gè)端點(diǎn)和兩個(gè)交點(diǎn)剛好全部重合,則顯而易見(jiàn)該直線段完全可見(jiàn)。

2)

如果直線段的兩個(gè)端點(diǎn)和兩個(gè)交點(diǎn)中有一個(gè)重合,則將重合的點(diǎn)視為一點(diǎn),則將重合點(diǎn)與另外的一個(gè)端點(diǎn)、一個(gè)交點(diǎn)按在直線上的順序排列。根據(jù)排列的順序有如下三種情況:①重合點(diǎn)和交點(diǎn)不相鄰,則直線段完全可見(jiàn);②如果重合點(diǎn)與交點(diǎn)相鄰,且該交點(diǎn)與另一個(gè)端點(diǎn)相鄰,則直線段部分可見(jiàn),且可見(jiàn)部分為重合點(diǎn)與另一個(gè)交點(diǎn)確定的直線段,它的可見(jiàn)部分為直線段;③如果重合點(diǎn)與交點(diǎn)相鄰,且該交點(diǎn)與另一個(gè)端點(diǎn)不相鄰,則直線段完全不可見(jiàn)。KL①TV②PTVIJ③3)如果直線段的兩個(gè)端點(diǎn)和兩個(gè)交點(diǎn)都不重合。將這四個(gè)點(diǎn)按在直線上的順序排列,根據(jù)排列的順序有如下四種情況:①如果兩個(gè)端點(diǎn)和兩個(gè)交點(diǎn)分別相鄰,則直線段完全不可見(jiàn);②如果兩個(gè)端點(diǎn)在兩個(gè)交點(diǎn)之間,則直線段完全可見(jiàn);

③如果兩個(gè)交點(diǎn)在兩個(gè)端點(diǎn)之間,則直線段部分可見(jiàn),且可見(jiàn)部分為兩個(gè)交點(diǎn)決定的直線段,它的可見(jiàn)部分為直線段;④如果交點(diǎn)和端點(diǎn)的排列順序是交錯(cuò)的,則直線段部分可見(jiàn),且可見(jiàn)部分為中間的一個(gè)交點(diǎn)和一個(gè)端點(diǎn)決定的直線段,它的可見(jiàn)部分為直線段。MN①OQ②AB③PAB1PAB2RS④PRS1裁剪區(qū)域?yàn)槿我馔苟噙呅螀^(qū)域時(shí)的直線段的裁剪算法1.計(jì)算所要裁剪的直線段所在直線與凸多邊形區(qū)域的邊界直線段的交點(diǎn)。MN⑦OQ⑧AB⑨PAB1PAB2RS⑩PRS1KL④TV⑤PTVIJ⑥CD①EF②GH③三、三維圖形的裁剪Cohen-Sutherland算法推廣至三維時(shí),用于判斷顯然不可見(jiàn)的線段的編碼應(yīng)為六位,這六位的安排是:第—位為1——端點(diǎn)在裁剪體左側(cè)第二位為1——端點(diǎn)在裁剪體右側(cè)第三位為1——端點(diǎn)在裁剪體下側(cè)第四位為1——端點(diǎn)在裁剪體上側(cè)第五位為1——端點(diǎn)在裁剪體前面第六位為1——端點(diǎn)在裁剪體后面當(dāng)端點(diǎn)在裁剪體內(nèi)時(shí)六位全置零。

對(duì)于透視裁剪體來(lái)說(shuō),此時(shí)需要采用判別函數(shù)來(lái)確定。其中,為投影中心,為裁剪體后面在Z軸上的截距,,,,

將要確定端點(diǎn)編碼的點(diǎn)的x和y坐標(biāo)代入,如果點(diǎn)在裁剪體右側(cè)面右方

點(diǎn)在裁剪體右側(cè)面上

點(diǎn)在裁剪體右

溫馨提示

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

評(píng)論

0/150

提交評(píng)論