二維圖形裁剪的課程設(shè)計_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  圖形學(xué)課程設(shè)計 </b></p><p>  課程設(shè)計名稱:各種二維圖形裁剪技術(shù)研究</p><p>  姓名: </p><p><b>  學(xué)號:</b></p><p><b>  學(xué)院:基礎(chǔ)學(xué)院</b></p>

2、<p>  班級:信息與計算科學(xué)2010-1</p><p><b>  指導(dǎo)老師:</b></p><p><b>  小組成員: </b></p><p><b>  目錄</b></p><p>  摘要 ……………………………………………………………2<

3、/p><p>  二維圖形裁剪……………………………………………………2</p><p>  2.1 裁剪的原理 …………………………………………………2</p><p>  2.2 裁剪的分類…………………………………………………3</p><p>  2.2.1.線段的裁剪………………………………………………3</p><

4、p>  2.2.2多邊形的裁剪……………………………………………5</p><p>  2.2.3.圓和曲線的裁剪…………………………………………6</p><p>  算法 ……………………………………………………………6</p><p>  3.1 裁剪算法………………………………………………………7</p><p>  3.2 裁

5、剪圓算法…………………………………………………9</p><p>  3.3 裁剪窗口是圓算法…………………………………………… 11</p><p>  4、心得體會…………………………………………………………12</p><p>  5、參考文獻(xiàn)…………………………………………………………12</p><p>  6、功能實(shí)現(xiàn)效果的圖片展

6、示……………………………………13</p><p><b>  1、摘要</b></p><p>  近幾十年來,計算機(jī)圖形學(xué)有了引人矚目的發(fā)展,它已廣泛應(yīng)用于計算機(jī)輔助設(shè)計、電視廣告、動畫和仿真等許多領(lǐng)域并發(fā)揮著重要作用??梢哉f計算機(jī)圖形學(xué)已經(jīng)發(fā)展成為一門成熟的學(xué)科。在各種實(shí)踐應(yīng)用中,計算機(jī)圖形學(xué)的許多基礎(chǔ)算法發(fā)揮著不可替代的重要作用,因此不斷提高和完善圖形學(xué)的基礎(chǔ)

7、算法至關(guān)重要。</p><p>  計算機(jī)圖形學(xué)是研究在計算機(jī)中如何構(gòu)造圖形,并把圖形的描述數(shù)據(jù)(數(shù)學(xué)模型)通過指定的算法轉(zhuǎn)化為圖形顯示的學(xué)科。目前,計算機(jī)圖形學(xué)的主要研究對象包括:點(diǎn)、線、面——二維圖形學(xué):體——三維圖形學(xué)以及場等的數(shù)學(xué)構(gòu)造方法與其圖形顯示以及它們的變化情況。</p><p><b>  2、二維圖形裁剪</b></p><p&g

8、t;  在使用計算機(jī)處理圖形信息時,計算機(jī)內(nèi)部存儲的圖形往往比較大,而屏幕顯示的只是圖的一部分。因此需要確定圖形中哪些部分落在顯示區(qū)之內(nèi),哪些落在顯示區(qū)之外,以便只顯示落在顯示區(qū)內(nèi)的那部分圖形。</p><p>  從數(shù)據(jù)集合中抽取所需信息即識別指定區(qū)域內(nèi)或區(qū)域外的圖形部分的過程稱為裁剪算法,簡稱裁剪。它是計算機(jī)圖形學(xué)中許多重要問題的基礎(chǔ)。裁剪典型的用途是確定場景或畫面中位于給定區(qū)域之內(nèi)的部分。這一區(qū)域稱為裁剪窗

9、口。</p><p>  最簡單的裁剪方法是把各種圖形掃描轉(zhuǎn)換為點(diǎn)之后,再判斷各點(diǎn)是否在窗口內(nèi)。但那樣太費(fèi)時,一般不可取。這是因?yàn)橛行﹫D形組成部分全部在窗口外,可以完全排除,不必進(jìn)行掃描轉(zhuǎn)換。</p><p>  所以,一般采用先裁剪再掃描轉(zhuǎn)換的方法。</p><p>  裁剪的應(yīng)用包括:從定義的場景中抽取出用于觀察的部分;在三維視圖中標(biāo)識出可見面:防止線段或?qū)ο蟮?/p>

10、邊界混淆;使用實(shí)體造型來創(chuàng)建對象;顯示多窗口的環(huán)境;允許選擇圖形一部分進(jìn)行復(fù)制、移動或刪除等繪圖操作。對于不同的應(yīng)用,裁剪窗口可以是多邊形或包含有曲線邊界。 </p><p><b>  2.1裁剪的原理</b></p><p>  裁剪的基本目的是判斷圖形元素是否部分或全部落在窗口區(qū)域之內(nèi),如果是,則進(jìn)一步求出位于窗口內(nèi)的部分。裁剪處理包括兩個方面:判斷圖形元素是否

11、在窗口內(nèi)以及求圖形元素與窗口的交。</p><p>  一般把窗口定義為矩形,由上、下、左、右四條邊圍成,即:(xL,yB),(xR,yT)。裁剪的實(shí)質(zhì)就是決定圖形中哪些點(diǎn)、線段、文字以及多邊形在窗口之內(nèi)。</p><p>  對于點(diǎn)(x,y),只要判斷兩對不等式:</p><p>  xL≤x≤xR,yB≤y≤yT</p><p>  若四

12、個不等式均成立。則點(diǎn)在矩形窗口之內(nèi);否則,點(diǎn)在矩形窗口之外。</p><p><b>  裁剪的分類</b></p><p>  裁剪算法大致包括對以下圖形的裁剪:</p><p>  ●線段的裁剪(線段)</p><p>  ●區(qū)域的裁剪(多邊形)</p><p>  ●區(qū)域的裁剪(圓和曲線)&

13、lt;/p><p>  2.2.1線段的裁剪</p><p>  線段與窗口的關(guān)系有如下三種:</p><p> ?。?)線段在窗口內(nèi),線段不需剪裁,完全可見;</p><p> ?。?)線段在窗口外,即線段不需剪裁,完全不可見;</p><p> ?。?)線段部分在窗口內(nèi),部分在窗口外,即需要求出線段與窗框的交點(diǎn),并將窗

14、口外的線段部分剪裁掉,只可見窗口內(nèi)的直線部分。</p><p>  線段的裁剪算法就是要找出位于窗口內(nèi)部的起始點(diǎn)和終止點(diǎn)的坐標(biāo)。因矢量裁剪法對尋找起點(diǎn)和終點(diǎn)坐標(biāo)的處理方法相同,下面以求始點(diǎn)坐標(biāo)為例來說明線段矢量裁剪方法。</p><p>  在右圖中,窗口的四條邊界把XOY平面分成九個區(qū)域,分別用1到9對這九個窗口編號,設(shè)5號區(qū)域?yàn)橄鄳?yīng)的可見窗口區(qū),窗口的左下角點(diǎn)坐標(biāo)(minX,minY)

15、,右上角點(diǎn)坐標(biāo)為(maxX,maxY)。有一條矢量線段S,其起、終點(diǎn)的坐標(biāo)分別為(Xs,Ys)和(Xe,Ye),則對線段S按矢量裁剪的算法步驟如下:</p><p>  1、若線段完全位于區(qū)域5以外的任意區(qū)域內(nèi)或落在(1,2,3)(3,6,9)(7,8,9)(1,4,7)中任意一區(qū)域組內(nèi),即滿足下述條件之一:</p><p>  則線段S不在窗口內(nèi),不必作進(jìn)一步的求交點(diǎn)處理,否則轉(zhuǎn)下一步。

16、    2、若線段S滿足minX≤Xs≤maxX且minX≤Ys≤maxY ,則線段的起點(diǎn)在窗口內(nèi),新的起點(diǎn)坐標(biāo)(X,Y)即為(Xs,Ys);否則,按以下各步判斷S與窗口的關(guān)系以及解算其新起點(diǎn)坐標(biāo)(X,Y)。    3、若Xs<minX,即起點(diǎn)(Xs,Ys)位于窗口左邊界的左邊,則:</p><p>  此時要作以下判斷: 

17、;     (1) 若起點(diǎn)(minY≤Y≤maxY),則(X,Y)求解有效;      (2) 若起點(diǎn)(Xs,Ys)位于4區(qū),且Xs>minY或Y>maxY,則線段S與窗口無交點(diǎn);      (3) 若Y>maxY且Ys>maxY或者Y>

18、;minY且Ys<minY,則線段起點(diǎn)位于1或7區(qū)內(nèi),這時還有兩種情況:        (a)當(dāng)起點(diǎn)在1區(qū)且Ye>maxY或當(dāng)起點(diǎn)位于7區(qū)且Ye< minY時,線段與窗口沒有交點(diǎn);否則還需作下面的判別;        (b)若Ys<minY,則:<

19、;/p><p>  若Ys>maxY,則:</p><p>  用(4-2-2)和(4-2-3)式求出的X若滿足minX≤X≤maxX,則(X,Y)的求解有效,否則線段與窗口仍無交點(diǎn)。   4、當(dāng)Xs>maxX ,即線段起點(diǎn)位于窗口右界的右邊,可仿照上述過程求出線段與右邊界的交點(diǎn)。   5、若起點(diǎn)(Xs,Ys)位于2或

20、8區(qū)時,求解線段與窗口邊界的交點(diǎn)公式為(4-2-4)和(4-2-5)式。</p><p>  用式(4-2-4)和(4-2-5)求解得X在滿足minX≤X≤maxX時才有效,否則線段不在窗口內(nèi)。    同理,可求解出線段在窗口內(nèi)新的終點(diǎn)坐標(biāo)。 2.2.2 多邊形的裁剪     多邊形是計算機(jī)制圖中常用的圖形元素,大到行政區(qū)域,

21、小到各種地物圖塊,都是多邊形元素。     多邊形的裁剪比直線要復(fù)雜得多。因?yàn)榻?jīng)過裁剪后,多邊形的輪廓線仍要閉合,而裁剪后的邊數(shù)可能增加,也可能減少,或者被裁剪成幾個多邊形,這樣必須適當(dāng)?shù)夭迦氪翱谶吔绮拍鼙3侄噙呅蔚姆忾]性。這就使得多邊形的裁剪不能簡單地用裁剪直線的方法來實(shí)現(xiàn)。     對于多邊形的裁剪,人們研究出了多種算法,其中薩瑟蘭德-霍奇曼(S

22、utherland-Hodgman)算法是根據(jù)相對于一條邊界線裁剪多邊形比較容易這一點(diǎn),把整個多邊形先相對于窗口的第一條邊界裁剪,然后再把形成的新多邊形相對于窗口的第二條裁剪,如此進(jìn)行到窗口的最后一條邊界,從而把多邊形相對于窗口的全部邊界進(jìn)行了裁剪。</p><p>  其算法描述為:    1.取多邊形頂點(diǎn)Pi(i=1,2,…,n) ,將其相對于窗口的第一條邊界進(jìn)行判別

23、,若點(diǎn)Pi位于邊界的靠窗口一側(cè),則把Pi記錄到要輸出的多邊形頂點(diǎn)中,否則不作記錄。    2.檢查Pi點(diǎn)與Pi-1點(diǎn)(i=1時,檢查Pi與Pn點(diǎn))是否位于窗口邊界的同一側(cè)。若是,Pi點(diǎn)記錄與否,隨Pi-1點(diǎn)是否記錄而定;否則計算出PiPi-1與窗口邊界的交點(diǎn),并將它記錄到要輸出的多邊形的頂點(diǎn)中去。    3.如此而已判別所有的頂點(diǎn)P1P2…Pn后,得到一

24、個新的多邊形Q11,Q12,…,Qm,然后用新的多邊形重復(fù)上述步驟1、2,依次對窗口的第二、第三和第四條邊界進(jìn)行判別,判別完后得到的多邊形Q14,Q24,…,Qm4即為裁剪的最后結(jié)果。</p><p>  如上圖所示,演示了多邊形的裁剪過程:</p><p> ?。?)首先對窗口的右邊界進(jìn)行判別,從多邊形的頂點(diǎn)P1開始依次判斷。P1在右邊界不可見一側(cè),故不記錄P1點(diǎn),且P1和P6在右邊界同

25、側(cè),則也不與右邊界求交點(diǎn)。      P2點(diǎn)在右邊界可見一側(cè),且P2和P1在右邊界異側(cè),因此求出P2P1與右邊界交點(diǎn)記作Q1,同時把P2點(diǎn)記錄下來作為(Q2)。      P3點(diǎn)在右邊界不可見一側(cè),但P3和P2在右邊界異側(cè),因此求出P3P2與右邊界交點(diǎn)記作Q3。    &#

26、160; P4點(diǎn)在右邊界可見一側(cè),且P4和P3在右邊界異側(cè),因此求出P4P3與右邊界交點(diǎn)記作Q4,同時把P4點(diǎn)記錄下來作為(Q5)。      P5點(diǎn)在右邊界不可見一側(cè),但P5和P4在右邊界異側(cè),因此求出P5P4的右邊界交占記作Q6。      P6點(diǎn)在右邊界不可見一側(cè),且P6和P5在右邊界同側(cè),因此不求

27、交點(diǎn)也不記錄P6點(diǎn)。      這樣就得到了新多邊形Q1,(Q2),Q3,Q4,(Q5),Q6    (2)把新得到的多邊形Q1,(Q2),Q3,Q4,(Q5),Q6對窗口的下邊界進(jìn)行判斷,同理可得到新的多邊形Q1,(Q2),Q3,Q4,Q5,Q6    (3)新得到的多邊形與窗口左邊<

28、/p><p><b>  3、算法</b></p><p><b>  3.1裁剪算法</b></p><p>  procedure TComputerGrapicsMainForm.Clip1Click(Sender: TObject);</p><p><b>  var</b&g

29、t;</p><p>  i,j,Outside,Clip:Integer;</p><p>  xystring:string;</p><p>  Label tryagain;</p><p>  Label NextLine;</p><p><b>  begin</b></p&

30、gt;<p>  //Window's coordinates</p><p>  W1:=90;W2:=270;w3:=40;w4:=160;</p><p>  //x coordinates y coordinates</p><p>  XY_Lines[1,1,1]:=110; XY_Lines[1,1,2]:

31、=10;</p><p>  XY_Lines[1,2,1]:=290; XY_Lines[1,2,2]:=70;</p><p>  XY_Lines[2,1,1]:=290; XY_Lines[2,1,2]:=70;</p><p>  XY_Lines[2,2,1]:=250; XY_Lines[2,2,2]:=190;</p><p

32、>  XY_Lines[3,1,1]:=250; XY_Lines[3,1,2]:=190;</p><p>  XY_Lines[3,2,1]:=70; XY_Lines[3,2,2]:=130;</p><p>  XY_Lines[4,1,1]:=70; XY_Lines[4,1,2]:=130;</p><p>  XY_Lines[4,2,

33、1]:=110; XY_Lines[4,2,2]:=10;</p><p>  XY_Lines[5,1,1]:=160; XY_Lines[5,1,2]:=10;</p><p>  XY_Lines[5,2,1]:=160; XY_Lines[5,2,2]:=180;</p><p>  XY_Lines[6,1,1]:=10; XY_Lines[6,

34、1,2]:=100;</p><p>  XY_Lines[6,2,1]:=300; XY_Lines[6,2,2]:=100;</p><p>  XY_Lines[7,1,1]:=10; XY_Lines[7,1,2]:=10;</p><p>  XY_Lines[7,2,1]:=30; XY_Lines[7,2,2]:=70;</p>&

35、lt;p>  XY_Lines[8,1,1]:=120; XY_Lines[8,1,2]:=70;</p><p>  XY_Lines[8,2,1]:=250; XY_Lines[8,2,2]:=150;</p><p>  Canvas.Pen.Color := clRed;//Draw 6 lines in red color</p><p>  F

36、or i:=1 to 8 do</p><p><b>  begin</b></p><p>  Canvas.MoveTo(10+XY_Lines[i,1,1],400-XY_Lines[i,1,2]);</p><p>  Canvas.LineTo(10+XY_Lines[i,2,1],400-XY_Lines[i,2,2]);<

37、/p><p>  end; //Draw clipping retangle window in yellow</p><p>  Canvas.Pen.Color := clYellow;//Draw window in yellow color</p><p>  Canvas.MoveTo(10+90,400-40);</p><p>  

38、Canvas.LineTo(10+270,400-40);</p><p>  Canvas.MoveTo(10+270,400-40);</p><p>  Canvas.LineTo(10+270,400-160);</p><p>  Canvas.MoveTo(10+270,400-160);</p><p>  Canvas.Lin

39、eTo(10+90,400-160);</p><p>  Canvas.MoveTo(10+90,400-160);</p><p>  Canvas.LineTo(10+90,400-40);</p><p>  for i:=1 to 8 do</p><p><b>  begin</b></p>

40、<p>  for j:=1 to 2 do</p><p><b>  begin</b></p><p>  X[j]:=XY_Lines[i,j,1];Y[j]:=XY_Lines[i,j,2];</p><p>  GetCodes(Sender,X[j],Y[j],j);//check points of lines is

41、outside the window?</p><p>  XYString:=IntToStr(L[j])</p><p>  +','+IntToStr(R[J])+</p><p>  ','+IntToStr(B[J])+</p><p>  ','+IntToStr(T[j]);<

42、;/p><p>  Memo1.Lines.add(XYString);//Show x,y coordinates to have a check</p><p><b>  end;</b></p><p>  for j:=1 to 2 do</p><p><b>  begin</b><

43、/p><p><b>  tryagain:</b></p><p>  Outside:=L[1]*L[2]+R[1]*R[2]+B[1]*B[2]+T[1]*T[2];</p><p>  if outside<>0 then goto NextLine;</p><p>  if Outside=0 the

44、n //the lines is inside the window</p><p><b>  begin</b></p><p>  Clip:=L[j]+R[j]+B[j]+T[j];</p><p>  if Clip<>0 then //Get new cliped coordinates of lines&l

45、t;/p><p><b>  begin</b></p><p>  ClipSubProgram(sender,j);goto tryagain;</p><p><b>  end;</b></p><p><b>  end;</b></p><p>

46、<b>  end;</b></p><p>  //Draw Cliped lines in blue color</p><p>  Canvas.Pen.Color:=clBlue;</p><p>  Canvas.MoveTo(10+trunc(X[1]),400-trunc(Y[1]));</p><p> 

47、 Canvas.LineTo(10+trunc(X[2]),400-trunc(Y[2]));</p><p><b>  NextLine:</b></p><p><b>  end;</b></p><p><b>  end;</b></p><p><b>

48、  3.2裁剪圓算法</b></p><p>  Procedure TComputerGrapicsMainForm.ClipCircle1Click(Sender: TObject);</p><p><b>  var</b></p><p>  i,j,x0,y0,RADIUS,Outside,Clip:Integer;&l

49、t;/p><p>  xystring:string;</p><p>  Label tryagain;</p><p>  Label NextLine;</p><p><b>  begin</b></p><p>  //Window's coordinates</p>

50、<p>  W1:=90;W2:=270;w3:=40;w4:=160;</p><p>  x0:=120;y0:=70; RADIUS:=120;</p><p>  //x coordinates y coordinates</p><p>  XY_Lines[1,1,1]:=110; XY_Lines[1,1,2]:=

51、10;</p><p>  XY_Lines[1,2,1]:=290; XY_Lines[1,2,2]:=70;</p><p>  XY_Lines[2,1,1]:=290; XY_Lines[2,1,2]:=70;</p><p>  XY_Lines[2,2,1]:=250; XY_Lines[2,2,2]:=190;</p><p&

52、gt;  XY_Lines[3,1,1]:=250; XY_Lines[3,1,2]:=190;</p><p>  XY_Lines[3,2,1]:=70; XY_Lines[3,2,2]:=130;</p><p>  XY_Lines[4,1,1]:=70; XY_Lines[4,1,2]:=130;</p><p>  XY_Lines[4,2,1

53、]:=110; XY_Lines[4,2,2]:=10;</p><p>  XY_Lines[5,1,1]:=160; XY_Lines[5,1,2]:=10;</p><p>  XY_Lines[5,2,1]:=160; XY_Lines[5,2,2]:=180;</p><p>  XY_Lines[6,1,1]:=10; XY_Lines[6,1

54、,2]:=100;</p><p>  XY_Lines[6,2,1]:=300; XY_Lines[6,2,2]:=100;</p><p>  XY_Lines[7,1,1]:=10; XY_Lines[7,1,2]:=10;</p><p>  XY_Lines[7,2,1]:=30; XY_Lines[7,2,2]:=70;</p>&l

55、t;p>  XY_Lines[8,1,1]:=120; XY_Lines[8,1,2]:=70;</p><p>  XY_Lines[8,2,1]:=250; XY_Lines[8,2,2]:=150;</p><p>  Canvas.Pen.Color := clRed;//Draw 6 lines in red color</p><p>  Fo

56、r i:=1 to 8 do</p><p><b>  begin</b></p><p>  Canvas.MoveTo(10+XY_Lines[i,1,1],400-XY_Lines[i,1,2]);</p><p>  Canvas.LineTo(10+XY_Lines[i,2,1],400-XY_Lines[i,2,2]);</

57、p><p>  end; //Draw clipping retangle window in yellow</p><p>  Canvas.Pen.Color := clYellow;//Draw window in yellow color</p><p>  Canvas.MoveTo(10+90,400-40);</p><p>  C

58、anvas.LineTo(10+270,400-40);</p><p>  Canvas.MoveTo(10+270,400-40);</p><p>  Canvas.LineTo(10+270,400-160);</p><p>  Canvas.MoveTo(10+270,400-160);</p><p>  Canvas.Line

59、To(10+90,400-160);</p><p>  Canvas.MoveTo(10+90,400-160);</p><p>  Canvas.LineTo(10+90,400-40);</p><p>  for i:=1 to 360 do</p><p><b>  begin</b></p>

60、<p>  XY_Lines[i,1,1]:=x0+TRUNC(RADIUS*cos(i*3.14159/180));</p><p>  XY_Lines[i,1,2]:=y0+TRUNC(RADIUS*sin(i*3.14159/180));</p><p>  XY_Lines[i,2,1]:=x0+TRUNC(RADIUS*cos((i-1)*3.14159/180))

61、;</p><p>  XY_Lines[i,2,2]:=y0+TRUNC(RADIUS*sin((i-1)*3.14159/180));</p><p>  for j:=1 to 2 do</p><p><b>  begin</b></p><p>  X[j]:=XY_Lines[i,j,1];Y[j]:=XY

62、_Lines[i,j,2];</p><p>  GetCodes(Sender,X[j],Y[j],j);//check points of lines is outside the window?</p><p>  XYString:=IntToStr(L[j])</p><p>  +','+IntToStr(R[J])+</p>

63、<p>  ','+IntToStr(B[J])+</p><p>  ','+IntToStr(T[j]);</p><p>  Memo1.Lines.add(XYString);//Show x,y coordinates to have a check</p><p><b>  end;</b&

64、gt;</p><p>  for j:=1 to 2 do</p><p><b>  begin</b></p><p><b>  tryagain:</b></p><p>  Outside:=L[1]*L[2]+R[1]*R[2]+B[1]*B[2]+T[1]*T[2];</p&g

65、t;<p>  if outside<>0 then goto NextLine;</p><p>  if Outside=0 then //the lines is inside the window</p><p><b>  begin</b></p><p>  Clip:=L[j]+R[j]+B[j]

66、+T[j];</p><p>  if Clip<>0 then //Get new cliped coordinates of lines</p><p><b>  begin</b></p><p>  ClipSubProgram(sender,j);goto tryagain;</p><p>

67、;<b>  end;</b></p><p><b>  end;</b></p><p><b>  end;</b></p><p>  //Draw Cliped lines in blue color</p><p>  Canvas.Pen.Color:=clBlu

68、e;</p><p>  Canvas.MoveTo(10+trunc(X[1]),400-trunc(Y[1]));</p><p>  Canvas.LineTo(10+trunc(X[2]),400-trunc(Y[2]));</p><p><b>  NextLine:</b></p><p><b>

69、;  end;</b></p><p><b>  end;</b></p><p>  3.3裁剪窗口是圓算法</p><p>  Procedure TComputerGrapicsMainForm.CircleWindow1Click(Sender: TObject);</p><p><b>

70、;  var</b></p><p>  x0,y0,Radius:integer;</p><p>  x1,y1,x2,y2,length:integer;</p><p>  i:integer;</p><p>  X,Y,dx,dy,Distance:Single;</p><p><b&g

71、t;  begin</b></p><p>  x0:=120;y0:=70; Radius:=120;</p><p>  canvas.Brush.Style:=bsClear;</p><p>  canvas.Ellipse(x0-Radius,y0-Radius,x0+Radius,y0+Radius);</p><p>

72、;  x1:=0;y1:=0;x2:=250;y2:=350;</p><p>  if (abs(x2-x1)>=abs(y2-y1)) then</p><p>  length:=abs(x2-x1)</p><p>  else length:=abs(y2-y1);</p><p>  dx:=(x2-x1)/length;&

73、lt;/p><p>  dy:=(y2-y1)/length;</p><p>  x:=x1+0.5; //here still can be discussed</p><p>  y:=y1+0.5; //here still can be discussed</p><p>  for i:=1 to length do</p>

74、;<p><b>  begin</b></p><p>  Distance:=sqrt((x0-x)*(x0-x)+(y0-y)*(y0-y));</p><p>  if (Distance<Radius) then</p><p>  canvas.Pixels [trunc(x),trunc(y)]:= clRed

75、;//Draw line in red color</p><p><b>  y:=y+dy;</b></p><p><b>  x:=x+dx;</b></p><p><b>  end;</b></p><p><b>  end;</b><

76、;/p><p><b>  end.</b></p><p><b>  4、心得體會</b></p><p>  學(xué)習(xí)圖形學(xué)已經(jīng)一個學(xué)期了,但是感覺沒有學(xué)到真正的知識。但是最近一星期的課程學(xué)習(xí)讓我受益匪淺,,使我更加扎實(shí)的掌握了有關(guān)計算機(jī)圖形學(xué)方面的知識,學(xué)會了一些簡單的delphi程序語言設(shè)計,并且感覺這是一種樂趣,開始喜

77、歡這門課程了。</p><p>  雖然在課程設(shè)計過程中雖然遇到了一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識欠缺和經(jīng)驗(yàn)不足。實(shí)踐出真知,通過親自動手制作,不斷改正,不斷領(lǐng)悟,不斷獲取,使我們掌握的知識不再是紙上談兵?! ∥疑羁腆w會到這門課程并不是輕而易舉就可也學(xué)好的,學(xué)習(xí)這門課程不僅需要細(xì)心嚴(yán)謹(jǐn)?shù)膽B(tài)度,還需要充分發(fā)揮我們的想象力,讓理論和實(shí)踐充分的結(jié)合在

78、一起,才能達(dá)到事半功倍的效果。細(xì)節(jié)決定成敗這句話在程序設(shè)計中最恰當(dāng)不過了,因?yàn)橐粋€小小的錯誤就可以使你的整個的程序無法進(jìn)行,有時候絞盡腦汁也沒能找出錯誤所在,只好老老實(shí)實(shí)的從新進(jìn)行編寫工作。所以課程不僅理論性強(qiáng),實(shí)際操作性更強(qiáng),沒有一個好的心態(tài)很難學(xué)好這門課程。我們學(xué)習(xí)的不僅是科學(xué)的方法,還包括用什么樣的態(tài)度去對待這門課程,并且讓自理論性和實(shí)踐性在自身得到充分的發(fā)揮,用細(xì)心嚴(yán)謹(jǐn)?shù)膽B(tài)度去認(rèn)識事物,且希望通過這次的實(shí)踐操作可以讓我更好地學(xué)習(xí)

79、。</p><p><b>  5、參考文獻(xiàn)</b></p><p>  1、Delphi實(shí)用程序100例 段興主編 唐一丁等編著 人民郵電出版社;</p><p>  2、Delphi開發(fā)答疑300問 張增強(qiáng)編著 人民郵電出版社;</p><p>  3、Delphi數(shù)字圖像處理及高級運(yùn)用 劉俊主編 科學(xué)出版社;

80、</p><p>  4、計算機(jī)圖形學(xué)算法基礎(chǔ) David F.Rogers著 機(jī)械工業(yè)出版社</p><p>  5、計算機(jī)圖形學(xué)的二維裁剪算法研究 單會秋</p><p>  6、功能實(shí)現(xiàn)效果的圖片展示</p><p><b>  基本界面</b></p><p>  1

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論