版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、電腦科學(xué)與通信工程學(xué)院實(shí)驗(yàn)報(bào)告課程電腦圖形學(xué)實(shí)驗(yàn)題目二維圖形繪制學(xué)號(hào)專業(yè)班級(jí) 指導(dǎo)教師 日期成績(jī)?cè)u(píng)定表評(píng)價(jià)內(nèi)容具體內(nèi)容權(quán)重得分論證分析方案論證與綜合分析的正確、合理性20%算法設(shè)計(jì)算法描述的正確性與可讀性20%編碼實(shí)現(xiàn)源代碼正確性與可讀性30%程序書與標(biāo)準(zhǔn)標(biāo)識(shí)符定義標(biāo)準(zhǔn),程序書寫風(fēng)格標(biāo)準(zhǔn)20%報(bào)告質(zhì)量報(bào)告清晰,提父準(zhǔn)時(shí)10%總分指導(dǎo)教師簽名二維圖形的繪制1. 實(shí)驗(yàn)內(nèi)容1繪制金剛石圖案金剛石圖案的成圖規(guī)那么是:把一個(gè)圓周等分成n份,然后每?jī)牲c(diǎn)之間連線。當(dāng)n取奇數(shù)時(shí), 該圖案可一筆連續(xù)繪成,即用MoveTo函數(shù)確定一個(gè)當(dāng)前點(diǎn),然后連續(xù)用LineTo函數(shù)連點(diǎn)成 線。請(qǐng)?jiān)O(shè)計(jì)連線規(guī)那么并編程實(shí)現(xiàn)。2繪制
2、魔術(shù)三角形繪制以下圖所示的魔術(shù)三角形圖案,采用三種可明顯區(qū)分的顏色填充。3繪制遞歸圓應(yīng)用遞歸的方法繪制如下所示的圖案。2. 實(shí)驗(yàn)環(huán)境軟硬件運(yùn)行環(huán)境:Windows XP開發(fā)工具:visual studio 20223問題分析根據(jù)實(shí)驗(yàn)需求,需要在 MFC環(huán)境中建立一個(gè)由“文件、“繪圖和“幫助這 3 個(gè)菜單工程組成的菜單,其中“文件的子菜單為“退出,完成退出應(yīng)用程序的工作, “繪圖,的子菜單為“ Diamond',用于繪制金剛石圖案等,“幫助的子菜單為“關(guān) 于,用于顯示開發(fā)人員信息;定義一個(gè)輸人對(duì)話框類,提供個(gè)兩個(gè)參數(shù)的輸入界面。 最后在客戶區(qū)輸出圖案。1. 金剛石圖案:為把一個(gè)半徑為30
3、0的圓,等分繪制金剛石圖案;設(shè)計(jì)該算法為防止直線段的重復(fù)連接,需設(shè)計(jì)一個(gè)二重循環(huán),代表起點(diǎn)索引號(hào)的外層整型變量i從i=0循環(huán)到i=n-2, 代表終點(diǎn)索引號(hào)的內(nèi)層整型變量j從j=i+1循環(huán)到j(luò)=n-1。以pi.x,pi.y為起點(diǎn),以Pj.x,pj.y為終點(diǎn)依次連接各線段形成金剛石圖案。金剛石有兩種畫法:1每隔兩個(gè)頂點(diǎn)連線直至回到原起點(diǎn),再將下一個(gè)點(diǎn)作為新的原起點(diǎn)。2每個(gè)點(diǎn)與其余點(diǎn)都連線直至全部連玩,再將隔一個(gè)點(diǎn)之后的點(diǎn)作為新的原起點(diǎn)。2. 魔術(shù)三角形:先繪制三角形圖形,再隨機(jī)在三個(gè)圖形中填色。3. 遞歸圓:先確定首個(gè)圓的中心點(diǎn)坐標(biāo)和半徑與其周圍八個(gè)小圓的中心點(diǎn)坐標(biāo)和半徑,再根據(jù)遞歸的深 度再算出
4、遞歸后圓的半徑,并計(jì)算出它們的圓中心點(diǎn)坐標(biāo)。設(shè)計(jì)一個(gè)二重循環(huán),代表起點(diǎn)的外層循環(huán)從i = 0循環(huán)到i = n-2,代表終點(diǎn)的內(nèi)層循環(huán)從j = i+1循環(huán)到j(luò)=n-1。以pi.x ,pi.y 作為起點(diǎn),以pj.x,pj.y 作為終 點(diǎn)繪制連接線。4. 算法設(shè)計(jì)class CDiam on dView : public CViewpublic:參數(shù)輸入和提示對(duì)話框CDlgDiam ond dlgDiamo nd;金剛石繪制中的參數(shù)輸入對(duì)話框CDIgCircle dlgCircle;/遞歸圓繪制中的參數(shù)輸入對(duì)話框CDIgBezier dlgBezier;/Bezie曲線繪制中的參數(shù)輸入對(duì)話框CDlg
5、B dlgB;/B樣條曲線繪制中的參數(shù)輸入對(duì)話框CDlgHi nt dlgHi nt;裁剪中的提示對(duì)話框用于裁剪時(shí)的裁剪窗口繪制的控制BOOL IsCutti ng;BOOL IsDrawi ng;裁剪窗口的左上角和右下角坐標(biāo)POINT RectP1;/左上角坐標(biāo)POINT RectP2;/右 下角坐標(biāo)繪圖函數(shù),需要實(shí)現(xiàn)void DrawDiamo nd(in t,i nt,i nt);/繪制金剛石void DrawTria ngle();/繪制魔術(shù)三角void DrawRecursio nCircle(i nt);繪制遞歸圓void Polaris();/北 極星void DrawBezie
6、r1(POINT p4);/E知點(diǎn)作為控制點(diǎn)繪制 Bezier曲線void DrawBezier2(POINT p4);/E知點(diǎn)作為曲線上的點(diǎn)繪制Bezier曲線void DrawBCurve(POINT p6);/繪制 B 樣條曲線void Cut();/裁剪;void CDiam on dView:O nMen uDiam on d() IsCutti ng = FALSE;if(dlgDiamo nd.DoModal()=IDOK)DrawDiam on d(dlgDiam on d.m _nV ertex,dlgDiam ond.m_nRadius,100);調(diào)用繪制金剛石的函數(shù)繪制金
7、剛石圖案/nVertex:頂點(diǎn)數(shù),radius圓半徑,millisecond筆畫之間的延遲時(shí)間void CDiam on dView:DrawDiam on d(i nt nV ertex, int radius,i nt milliseco nd)void CDiam on dView:O nMenu Tria ngle() IsCutti ng = FALSE;DrawTriangle();/調(diào)用繪制魔術(shù)三角的函數(shù)繪制魔術(shù)三角void CDiam on dView:DrawTria ngle()void CDiam on dView:O nMen uCircle() IsCutti ng
8、= FALSE;if(dlgCircle.DoModal()=IDOK)DrawRecursio nCircle(dlgCircle.m_nDepth )調(diào)用繪制遞歸圓的函數(shù)繪制遞歸圓/nDepth遞歸深度void CDiam on dView:DrawRecursio nCircle(i nt n Depth)5. 源代碼繪制金剛石圖案/nVertex:頂點(diǎn)數(shù),radius圓半徑,millisecond筆畫之間的延遲時(shí)間int CDiam on dView:MaxX()CRect Rect;GetClie ntRect(& Rect);return Rect.right;int CD
9、iamo ndView:MaxY() CRect Rect;GetClie ntRect(& Rect);return Rect.bottom;void CDiam on dView:DrawDiam on d(i nt nV ertex, int radius,i nt milliseco nd)Inv alidateRg n(NULL);UpdateWi ndow();Sleep(100);CDC *pDC=GetDC();CRect rect;GetClie ntRect(& rect);CBrush br(RGB(0,0,0);pDC->FillRect(&
10、;rect,&br);CPe n n ewPe n(PS_S0LID,1,RGB(255,0,0);CPe n *OldPe n=pDC->SelectObject(&n ewPe n);double Thta = 2*PI/nVertex;double *x = new double nV ertex;double *y = new double nV ertex;for(int i=0;i<nVertex;i+) xi=radius*cos(i*Thta)+MaxX()/2;yi=radius*si n( i*Thta)+MaxY()/2;if(nV ertex
11、%2=0)for(int i=0;i<=nVertex-2;i+)for(i nt j=i+1;j<=nV ertex-1;j+)pDC->MoveTo(Rou nd(xi),Rou nd(yi);pDC->Li neTo(Rou nd(xj),Rou nd(yj);Sleep(millisec on d);else int j = 0;int k;for (i nt i = 0; i < nV ertex; i+) k = 0;while (k < nV ertex / 2)k+;j=j+k;pDC->MoveTo(Rou nd(x(j-k)% nV
12、 ertex),Rou nd(y(j-k)% nV ertex); pDC->Li neTo(Rou nd(xj% nV ertex),Rou nd(yj% nV ertex); Sleep(milliseco nd);pDC->SelectObject(OldPe n);繪制魔術(shù)三角void CDiam on dView:DrawTria ngle()Inv alidateRg n(NULL);UpdateWi ndow();CDC *pDC = GetDC();int colour3=RGB(255,0,0),RGB(0,0,255),RGB(0,255,0);for(int
13、n=0;n<20;n+)CBrush newBrush,*oldBrush;n ewBrush.CreateSolidBrush(colour n%3);POINT vertex16 = 610,66,355,505,762,505,714,420,508,420,710,66;CRgn Rgn 1,Rg n2,Rg n3;Rgn 1.CreatePolygo nRgn (vertex1,6, WINDING); oldBrush = pDC->SelectObject(&n ewBrush); pDC->FillRg n(&Rgn 1,&n ewBr
14、ush);Sleep(100); pDC->SelectObject(oldBrush);n ewBrush.DeleteObject();n ewBrush.CreateSolidBrush(colour( n+1)%3);POINT vertex36= 355,505,405,594,916,595,710,240,660,330,762,505;Rgn 3.CreatePolygo nRgn (vertex3, 6, WINDING); oldBrush = pDC->SelectObject(&n ewBrush); pDC->FillRg n(&Rg
15、 n3,&n ewBrush);Sleep(100); pDC->SelectObject(oldBrush);n ewBrush.DeleteObject(); pDC->SelectObject(oldBrush); newBrush.CreateSolidBrush(colour( n+2)%3);POINT vertex26= 710,66,508,420,612,420,710,240,916,594,968,505;Rgn 2.CreatePolygo nRgn (vertex2, 6, WINDING); oldBrush = pDC->SelectOb
16、ject(&n ewBrush); pDC->FillRg n(&Rg n2,&n ewBrush);Sleep(100);繪制遞歸圓/nDepth遞歸深度void CDiam on dView:DrawRecursio nCircle(i nt n Depth)Inv alidateRg n(NULL);UpdateWi ndow();double r=100;CDC *pDC = GetDC();CPen newPe n,*oldPe n;n ewPe n.CreatePe n(PS_SOLID,1,RGB(255,0,0);oldPen = pDC->
17、SelectObject(&n ewPe n);CRectrect(Rou nd(MaxX()/2-r),Rou nd(MaxY()/2-r),Rou nd(MaxX()/2+r),Rou nd(MaxY()/2+r);pDC->Ellipse(& rect);int x0=MaxX()/2;int y0=MaxY()/2;DrawRecursio nCircle1(x0,y0,r, nDepth);void CDiam on dView:DrawRecursio nCircle1(i nt x,i nt y,double r,i nt n Depth)int x18,y
18、18;double t=2*PI/8;CDC *pDC = GetDC();CPen newPe n,*oldPe n;n ewPe n.CreatePe n(PS_SOLID,1,RGB(255,0,0);oldPen = pDC->SelectObject(&n ewPe n);if(n Depth>0)n Depth-;for(int i=0;i<8;i+)x1i=Rou nd(x+2*r*cos(i*t);y1i=Rou nd(y+2*r*si n( i*t);for(int i=0;i<8;i+)CRectrect(Rou nd(x1i-0.3*r),Rou nd(y1i-0.3*r),Rou nd(x1i+0.3*r),Rou nd(y1i+0.3*r);pDC->Ellipse(&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 園林古建筑防火措施方案
- 民辦高校教師人工智能素養(yǎng)的提升機(jī)制與培訓(xùn)體系
- 2026年寶石花(天津)國(guó)際醫(yī)療健康有限公司招聘?jìng)淇碱}庫及參考答案詳解
- 2026年三亞鐵路投資建設(shè)有限公司招聘?jìng)淇碱}庫及一套參考答案詳解
- 2026年安徽皖信人力資源管理有限公司招聘某銀行項(xiàng)目經(jīng)理崗位備考題庫及一套參考答案詳解
- 2026年哈爾濱市平房區(qū)平房鎮(zhèn)衛(wèi)生院招聘醫(yī)療技術(shù)工作人員的備考題庫含答案詳解
- 2026年樂東黎族自治縣人民醫(yī)院醫(yī)共體(萬沖分院)公開招聘編外人員備考題庫及一套完整答案詳解
- 2026年中國(guó)中金財(cái)富證券有限公司海南分公司招聘?jìng)淇碱}庫完整參考答案詳解
- 2026年關(guān)于為山東省人民檢察院公開招聘聘用制書記員的備考題庫及答案詳解一套
- 2025年度青島市衛(wèi)生健康委員會(huì)直屬事業(yè)單位公開招聘第二批衛(wèi)生類工作人員備考題庫帶答案詳解
- DB31∕T 1450-2023 旅游碼頭服務(wù)基本要求
- 2024-2025學(xué)年人教版數(shù)學(xué)七年級(jí)上學(xué)期期末考試測(cè)試卷
- 南寧陳教練2026年版考試大綱廣西專升本與職教高考(財(cái)經(jīng)商貿(mào)大類)考試大綱對(duì)比分析及備考攻略
- 滅菌物品裝載課件
- 2025至2030中國(guó)電力設(shè)備檢測(cè)行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 2025上半年軟考系統(tǒng)架構(gòu)設(shè)計(jì)師考試真題及答案
- 尾礦綜合利用技術(shù)在生態(tài)環(huán)境保護(hù)中的應(yīng)用與經(jīng)濟(jì)效益分析報(bào)告
- 政務(wù)信息化統(tǒng)一建設(shè)項(xiàng)目監(jiān)理服務(wù)方案投標(biāo)文件(技術(shù)方案)
- 2025年蘇州市事業(yè)單位招聘考試教師招聘體育學(xué)科專業(yè)知識(shí)試卷
- 加油站投訴處理培訓(xùn)課件
- 畢業(yè)設(shè)計(jì)(論文)-基于PLC的醫(yī)院病房呼叫系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論