計算機圖形學(xué)-圓的生成算法的實現(xiàn)_第1頁
計算機圖形學(xué)-圓的生成算法的實現(xiàn)_第2頁
計算機圖形學(xué)-圓的生成算法的實現(xiàn)_第3頁
計算機圖形學(xué)-圓的生成算法的實現(xiàn)_第4頁
計算機圖形學(xué)-圓的生成算法的實現(xiàn)_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機圖形學(xué)--圓的生成算法的實現(xiàn)PAGEPAGE2實驗三圓的生成算法的實現(xiàn)班級信計學(xué)號51姓名程芳超分?jǐn)?shù)一、實驗?zāi)康暮鸵螅?、掌握圓的生成算法的基本原理2、熟悉圓的生成算法,利用Turbor實現(xiàn)中點畫圓算法、圓的Bresenham算法。二、實驗內(nèi)容:1、熟悉圓上的8個對稱點的算法,利用中點畫圓算法畫圓并在屏幕上顯示出來;2、使用Bresenham畫圓法生成一個圓;3、利用line()函數(shù)畫圓:.圓的參數(shù)方程;圓心為o(x0,y0)。以下為各程序的實現(xiàn)代碼:1、中點畫圓算法:運行結(jié)果為:#include"Conio.h"#include"graphics.h"#include"stdio.h"#include"math.h"#defineclosegrclosegraph#definexo300#defineyo250#defineDELTA1.0#definemax100initgr();cleardevice();MidPointCircle1(150,4);getch();closegraph();}運行結(jié)果為:2圓的Bresenham算法:#include<graphics.h>#include<stdio.h>#include<conio.h>#include<math.h>voidBresenhamCircle(xc,yc,radius,color)intxc,yc,radius,color;{intx,y,d;x=0;y=radius;d=3-2*radius;while(x<y){plot_circle_points(xc,yc,x,y,color);if(d<0)d+=4*x+6;else{d+=4*(x-y)+10;y--;}x++;}if(x==y)plot_circle_points(xc,yc,x,y,color);}plot_circle_points(xc,yc,x,y,color)intxc,yc,x,y,color;{putpixel(xc+x,yc+y,color);putpixel(xc-x,yc+y,color);putpixel(xc+x,yc-y,color);putpixel(xc-x,yc-y,color);putpixel(xc+y,yc+x,color);putpixel(xc-y,yc+x,color);putpixel(xc+y,yc-x,color);putpixel(xc-y,yc-x,color);}main(){inta,b,c,e;intgraphdriver=DETECT;intgraphmode=0;initgraph(&graphdriver,&graphmode,"");cleardevice();a=300;b=300;c=150;e=3;BresenhamCircle(a,b,c,e);getch();closegraph();}運行結(jié)果為:3、利用line()函數(shù)畫圓#include<stdio.h>#include<stdlib.h>#include<math.h>#include<conio.h>#include<graphics.h>main(){inti,r,xx[46],yy[46],x0,y0;floatt=360/45*3.14/180;intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");cleardevice();setbkcolor(14);setcolor(4);x0=300;y0=250;r=200;for(i=0;i<46;i++){xx[i]=x0+r*cos(i*t);yy[i]=y0-r*sin(i*t);}for(i=0;i<45;i++)line(xx[i],yy[i],xx[i+1],yy[i+1]);settextstyle(1,0,5);outtextxy(300,200,"O");line(300,250,500,250);getch();closegraph();return0;}運行結(jié)果為:三、實驗結(jié)果分析1、顯示圓上的8個對稱點的算法如下:voidCirclePoints(intx,inty,intcolor){putpixel(x,y,color);putpixel(y,x,color);putpixel(-x,y,color);putpixel(y,-x,color);putpixel(x,-y,color);putpixel(-y,x,color);putpixel(-x,-y,color);putpixel(-y,-x,color);}若已知圓弧上一點(x,y),可以得到其關(guān)于4條對稱軸的其他七個點,因此要掃描轉(zhuǎn)換1/8圓弧就可以求出表示整個圓弧的像素集。2、圓的Bresenham算法:分析出來點(x,y),(x,-y),(-x,y),(-x,-y),(y,x),(y,-x),(-y,x),(-y,-x)的另外7個點。關(guān)于中心畫圓算法,通過計算x=0到x=y的1/8圓的范圍,然后通過對稱原理得到其他7/8個點的信息。這里和Bresenham算法有很多相似之處,同樣有一個決定下一個位置的關(guān)鍵值d來做權(quán)衡處理。在中點畫圓算法中,通過平移的方法將假設(shè)圓心在坐標(biāo)原點,然后計算,最后再平移到真實原心位置。3、在Bresenham算法中,只需做加法和乘4的乘法,因此遠(yuǎn)的Bresenham算法運行速度很快,適宜在硬件上實現(xiàn)。4、t的值不同,所畫圓的圓滑程度不同,圓心位置可隨坐標(biāo)改變。5、兩種算法生成一點所需的計算量比較每種循環(huán)中各種運算次數(shù)總和畫一個八分或四分圓的總運算次數(shù)畫每一點所需要的平均運算次數(shù)比較加法移位Bresenham法2(d<0)215(R-R/)6+(1)5=RR2(d>=0)316中點算法2(d<0)215(R-R/)7+(1)5=2R-3R/5(2R-3R/)/(R/)4.82(d>=0)327通過實際的程序運行進行比較,結(jié)論是中點畫圓法速度比較快,就算法本身而言,該算法仍可以在某些方面進行改進,如其中的浮點運算改為整數(shù)運算等,執(zhí)行速度將更快。生成直線和圓這類基礎(chǔ)算法在編程時要被無數(shù)次的調(diào)用,可能每

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論