橢圓中點(diǎn)Bresenham算法_第1頁(yè)
橢圓中點(diǎn)Bresenham算法_第2頁(yè)
橢圓中點(diǎn)Bresenham算法_第3頁(yè)
橢圓中點(diǎn)Bresenham算法_第4頁(yè)
橢圓中點(diǎn)Bresenham算法_第5頁(yè)
已閱讀5頁(yè),還剩12頁(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)介

1、目錄一、設(shè)計(jì)題目2二、設(shè)計(jì)要求2三、設(shè)計(jì)方案2四、程序流程圖6五、程序清單7六、程序運(yùn)行結(jié)果分析15七、系統(tǒng)不足及改進(jìn)方案15八、設(shè)計(jì)總結(jié)16一、設(shè)計(jì)題目:橢圓中點(diǎn)Bresenham算法二、設(shè)計(jì)要求:1、要求有兩種輸入方式:(1)輸入橢圓的長(zhǎng)短軸來(lái)生成橢圓;(2)根據(jù)輸入點(diǎn)來(lái)生成橢圓并輸出橢圓的長(zhǎng)短軸;2、橢圓的顏色為紅色;三、設(shè)計(jì)方案:1、橢圓對(duì)稱性質(zhì):橢圓分別關(guān)于X軸、Y軸對(duì)稱。因此在計(jì)算橢圓生成的時(shí)候,只需要計(jì)算1/4個(gè)橢圓,經(jīng)過(guò)對(duì)稱原理就可以實(shí)現(xiàn)其他3/4個(gè)橢圓的生成了,即:計(jì)算出目標(biāo)點(diǎn)(x,y)的坐標(biāo),必然存在(x,-y)、(-x,y)(-x,-y)。此方案中采用計(jì)算第一象限中橢圓的

2、生成,即:計(jì)算x=0到y(tǒng)=0的1/4的橢圓。先通過(guò)平移的方法將假設(shè)橢圓中心在坐標(biāo)原點(diǎn),然后計(jì)算,最后再平移到真實(shí)中心位置。2、對(duì)于第一象限的橢圓,斜率k=-(b*b)*x/ (a*a)*y ,當(dāng)xy時(shí),斜率k的絕對(duì)值大于1,計(jì)算時(shí)在y方向上取單位量。記:xy的區(qū)域?yàn)榈诙^(qū)域。3、輸入方式一:輸入橢圓的長(zhǎng)短軸來(lái)生成橢圓。 已知:長(zhǎng)短半軸分別為a、b,計(jì)算的初始位置為(0,b)。橢圓的方程為:。令F(x,y)=b*b*x*x+a*a*y*y- a*a* b*b=0(1)對(duì)于第一區(qū)域,如圖1所示,P點(diǎn)坐標(biāo)為(,)、P1(+1, )為P點(diǎn)正右邊的點(diǎn)、P2(+1, -1)為P點(diǎn)右下方的點(diǎn),M(+1,-0

3、.5)為P1、P2的中點(diǎn)。令d=F(M)=F(+1,-0.5)=b*b+a*a*(b-0.5)*(b-0.5)-a*a*b*b當(dāng)=0、=b時(shí),d的初始值為:d= b*b-a*a*b+1/4a*ad=0時(shí),應(yīng)取P2作為下一個(gè)像素點(diǎn),則其正右方的點(diǎn)的坐標(biāo)為(+2,-1),右下方的點(diǎn)的坐標(biāo)為(+2,-2),中點(diǎn)坐標(biāo)為(+2,-1.5)。此時(shí),d=F(M)=F(+2,-1.5)=d+b*b*(2*+3)-2a*a*(-1)d=0時(shí),應(yīng)取P1作為下一個(gè)像素點(diǎn),則其正下方的點(diǎn)的坐標(biāo)為(,-2),右下方的點(diǎn)的坐標(biāo)為(+1,-2),中點(diǎn)坐標(biāo)為(+0.5,-2)。此時(shí),d=F(M)=F(+0.5,-2)=d+

4、a*a*(3-2 *)d0時(shí),應(yīng)取P2作為下一個(gè)像素點(diǎn),則其正下方的點(diǎn)的坐標(biāo)為(+1,-2),右下方的點(diǎn)的坐標(biāo)為(+2,-2),中點(diǎn)坐標(biāo)為(+1.5,-2)。此時(shí),d=F(M)=F(+1.5,-2)=d+2*b*b*(+1)+ a*a*(3-2*)(3)根據(jù)對(duì)稱性原理計(jì)算其他3個(gè)象限的坐標(biāo)。輸入方式二:根據(jù)輸入點(diǎn)來(lái)生成橢圓并輸出橢圓的長(zhǎng)短軸。已知:兩點(diǎn)坐標(biāo)(,)、(,)設(shè)橢圓的方程為:將兩點(diǎn)坐標(biāo)(,)、(,)代人橢圓方程中,得出a、b的值分別為:=(*-*)/(-)=(*-*)/(-)然后按照方式一生成所求橢圓。四、程序流程圖輸入方式一的流程圖如圖3所示:輸入方式二的流程圖如圖4所示: 五、程

5、序清單/ zhongdiansuanfa.cpp : Defines the entry point for the console application.#include stdafx.h#include #include #include #include int a;int b;/*定義長(zhǎng)短半軸分別為a、b*/void GetValue()int input=0;int x1,x2,y1,y2;printf(請(qǐng)輸入中點(diǎn)算法產(chǎn)生的方式:n);printf(1.輸入橢圓長(zhǎng)短半徑n);printf(2.輸入橢圓坐標(biāo)n);/*輸出兩種輸入方式*/scanf(%d,&input);if(inpu

6、t=1)printf(請(qǐng)輸入a的值:n);scanf(%d,&a);printf(請(qǐng)輸入b的值:n);scanf(%d,&b);if(input=2)printf(請(qǐng)輸入第一個(gè)坐標(biāo)的值:n);scanf(%d,%d,&x1,&y1);printf(請(qǐng)輸入第二個(gè)坐標(biāo)的值:n);scanf(%d,%d,&x2,&y2); a=sqrt (y1*y1*x2*x2-x1*x1*y2*y2)/(y1*y1-y2*y2);b=sqrt (x1*x1*y2*y2-x2*x2*y1*y1)/(x1*x1-x2*x2);/*根據(jù)輸入的兩個(gè)坐標(biāo)計(jì)算橢圓長(zhǎng)短半軸a、b的值*/ printf(a=%d,a);prin

7、tf(b=%d,b);/*輸出長(zhǎng)短半軸a、b的值*/void PointsEllipse(int x,int y) glColor3f (1.0f, 0.0f, 0.0f); /*生成的橢圓的顏色為紅色*/ glPointSize(1); glBegin (GL_POINTS); glVertex2i(x+200,y+200); glVertex2i(-x+200,y+200); glVertex2i(x+200,-y+200); glVertex2i(-x+200,-y+200);/*根據(jù)對(duì)稱原理求出橢圓上各個(gè)點(diǎn)的坐標(biāo)*/ glEnd (); void myDisplay() glClear

8、(GL_COLOR_BUFFER_BIT); glColor3f (1.0f, 0.0f, 0.0f); glBegin (GL_POINTS); /int a=200,b=100; float x,y,d1,d2; x=0; y=b;/*第一區(qū)域的起始坐標(biāo)*/ d1=b*b+a*a*(-b+0.25); PointsEllipse(x,y); /*計(jì)算第一區(qū)域橢圓上各個(gè)點(diǎn)的坐標(biāo)*/while(b*b*(x+1)a*a*(y-0.5) if (d10) if (d20) d2+=2*b*b*(x+1)-a*a*(2*y-3); x+; y-; else d2+=a*a*(-2*y+3); y-

9、; PointsEllipse(x,y); glEnd (); glFlush();/*保證前面的OpenGL命令立即執(zhí)行*/ void Init() GetValue(); glClearColor(0.0, 0.0, 0.0, 0.0);/*定義清空顏色設(shè)計(jì)為黑色*/ glShadeModel(GL_FLAT); void Reshape(int w, int h) glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdou

10、ble) w, 0.0, (GLdouble) h);int main(int argc, char *argv) glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100);/*定義窗口在屏幕中的位置*/ glutInitWindowSize(600, 600);/*定義窗口的大小*/ glutCreateWindow(zhongdiansuanfa!);/*根據(jù)前述設(shè)置的信息創(chuàng)建窗口*/ Init(); glutDisplayFunc(myDispl

11、ay); glutReshapeFunc(Reshape); glutMainLoop(); return 0;六、程序運(yùn)行結(jié)果分析運(yùn)行該程序,窗口中顯示:請(qǐng)輸入中點(diǎn)算法產(chǎn)生的方式:1、輸入橢圓長(zhǎng)短半徑。2、輸入橢圓坐標(biāo)。輸入1,并單擊回車,顯示請(qǐng)輸入a的值,輸入a的值,并單擊回車,將顯示請(qǐng)輸入b的值,輸入b的值,并單擊回車,屏幕上將顯示一個(gè)以a、b為長(zhǎng)短半軸的紅色橢圓;輸入2,并單擊回車,將顯示請(qǐng)輸入第一個(gè)坐標(biāo)的值,輸入第一個(gè)坐標(biāo)的值,并單擊回車,將顯示請(qǐng)輸入第二個(gè)坐標(biāo)的值,輸入第二個(gè)坐標(biāo)的值,并單擊回車,屏幕上將顯示一個(gè)以原點(diǎn)為中心,經(jīng)過(guò)兩個(gè)坐標(biāo)的紅色橢圓。七、系統(tǒng)不足及改進(jìn)方案 該算法生

12、成的橢圓以原點(diǎn)為中心,如果要想實(shí)現(xiàn)橢圓的中心可放在任何位置,則在上述算法中通過(guò)平移的方法將假設(shè)圓心在坐標(biāo)原點(diǎn),然后計(jì)算,最后再平移到真實(shí)的中心位置。假設(shè)橢圓的中心坐標(biāo)為(x-center,y-center),則 = 其中,為平移后的齊次坐標(biāo),為平移前的齊次坐標(biāo), 為平移向量。八、設(shè)計(jì)總結(jié)回顧起此次計(jì)算機(jī)圖形學(xué)課程設(shè)計(jì),我仍感慨頗多,做這次課程設(shè)計(jì)之前我還自認(rèn)為圖形學(xué)這門(mén)課我學(xué)的還不錯(cuò),但是當(dāng)做設(shè)計(jì)時(shí)才發(fā)現(xiàn)原來(lái)還有這么多東西沒(méi)有弄懂。做完設(shè)計(jì)之后,感覺(jué)自己學(xué)到了很多很多的東西,同時(shí)不僅鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是重要性,只有理論知識(shí)沒(méi)有實(shí)踐,一切都等于虛設(shè),相當(dāng)于紙上談兵。只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)過(guò)程中遇到的問(wèn)題,可以說(shuō)得是困難重重

溫馨提示

  • 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)論