版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、-PAGE . z.計算機科學與通信工程學院實驗報告課程計算機圖形學實驗題目曲線擬合學生*專業(yè)班級指導教師日期成績評定表評價容具體容權重得分論證分析方案論證與綜合分析的正確、合理性20%算法設計算法描述的正確性與可讀性20%編碼實現(xiàn)源代碼正確性與可讀性30%程序書寫規(guī)標識符定義規(guī),程序書寫風格規(guī)20%報告質量報告清晰,提交準時10%總 分指導教師簽名曲線擬合1. 實驗容 1. 繪制三次Bezier曲線 1給定四個點P1P4,以此作為控制頂點繪制一段三次Bezier曲線。 2給定四個點P1P4,以此作為曲線上的點繪制一段三次Bezier曲線。 2. 繪制三次B樣條曲線 給定六個點P1P6,以此作
2、為控制頂點繪制一條三次B樣條曲線。2. 實驗環(huán)境軟硬件運行環(huán)境:Windows *P開發(fā)工具:visual studio 20083. 問題分析 1. 繪制三次Bezier曲線Bezier曲線是用N+1個頂點控制點所構成的N根折線來 定義一根N階曲線。本次實驗中的三次Bezier曲線有4個頂點,設它們分別為P0,P1,P2,P3,則對于曲線上各個點Pi*,y滿足以下關系: P(t)=(-P0+3P1-3P2+3P3)t3+(3P0-6P1+3P2)t2+(-3P0+3P2)t+(P0+4P1+P2)/6 *(t)=(-*0+3*1-3*2+3*3)t3+(3*0-6*1+3*2)t2+(-3*
3、0+3*2)t+(*0+4*1+*2)/6 Y(t)=(-Y0+3Y1-3Y2+3Y3)t3+(3Y0-6Y1+3Y2)t2+(-3Y0+3Y2)t+(Y0+4Y1+Y2)/6 其中P0、P1、P2、P3為四個的點,坐標分別為(*0、Y0)、(*1、Y1)、(*1、Y2) 、(*3、Y3)。所以只要確定控制點的坐標,該曲線可通過編程即可繪制出來。 2. 繪制三次B樣條曲線 三次B樣條函數(shù)繪制曲線的光滑連接條件為:對于6個頂點,取P1、P2、P3、 P4 4個頂點繪制在第一段三次樣條曲線,再取P2、P3、P4、P5 這4個頂點繪制在第二段三次樣條曲線,總計可繪制3段光滑連接的三次樣條曲線。4.
4、算法設計程序框架/DiamondView.hclass CDiamondView : public CView CDlgBezier dlgBezier;/Bezier曲線繪制中的參數(shù)輸入對話框CDlgB dlgB;/B樣條曲線繪制中的參數(shù)輸入對話框 /繪圖函數(shù),需要實現(xiàn) void DrawBezier1(POINT p4);/點作為控制點繪制Bezier曲線 void DrawBezier2(POINT p4);/點作為曲線上的點繪制Bezier曲線 void DrawBCurve(POINT p6);/繪制B樣條曲線/DiamondView.cppvoid CDiamondView:OnM
5、enuDiamond() IsCutting = FALSE;if(dlgDiamond.DoModal()=IDOK) DrawDiamond(dlgDiamond.m_nVerte*,dlgDiamond. m_nRadius,100);/調用繪制金剛石的函數(shù) void CDiamondView:OnMenuBezier1() IsCutting = FALSE;if(dlgBezier.DoModal() = IDOK)DrawBezier1(dlgBezier.m_nPoint);/調用點作為控制點繪制Bezier曲線的函數(shù)/以的四個點為控制點繪制Bezier曲線/p:的四個控制點vo
6、id CDiamondView:DrawBezier1(POINT p4) void CDiamondView:OnMenuBezier2() IsCutting = FALSE;if(dlgBezier.DoModal() = IDOK)DrawBezier2(dlgBezier.m_nPoint);/調用點作為曲線上的點繪制Bezier曲線的函數(shù)/以的四個點為Bezier曲線上的點來繪制Bezier曲線/p:的四個點void CDiamondView:DrawBezier2(POINT p4) void CDiamondView:OnMenuB() IsCutting = FALSE;if
7、(dlgB.DoModal() = IDOK)DrawBCurve(dlgB.m_nPoint);/調用繪制B樣條曲線的函數(shù)/以的六個點為控制點來繪制B樣條曲線/p:的六個控制點void CDiamondView:DrawBCurve(POINT p6) 5. 源代碼/以的四個點為控制點繪制Bezier曲線/p:的四個控制點void CDiamondView:DrawBezier1(POINT p4)CDC *pDC = GetDC(); CPen newPen,*oldPen; newPen.CreatePen(PS_SOLID,2,RGB(255,0,0);oldPen = pDC-Sel
8、ectObject(&newPen);pDC-Polyline(p, 4);pDC-SelectObject(oldPen);newPen.DeleteObject();newPen.CreatePen(PS_SOLID,2,RGB(0,0,255); oldPen = pDC-SelectObject(&newPen); int *0=p0.*;int y0=p0.y; int *1=p1.*;int y1=p1.y; int *2=p2.*;int y2=p2.y; int *3=p3.*;int y3=p3.y; double *,y; int a*,ay,b*,by,c*,cy,d*,
9、dy; int rate=1000;a*=-*0+3*1-3*2+*3;ay=-y0+3*y1-3*y2+y3; b*=3*0-6*1+3*2;by=3*y0-6*y1+3*y2; c*=-3*0+3*1;cy=-3*y0+3*y1; d*=*0;dy=y0; pDC-MoveTo(*0,y0); for(double t=0;tLineTo(Round(*),Round(y); Sleep(10); pDC-SelectObject(oldPen);/以的四個點為Bezier曲線上的點來繪制Bezier曲線/p:的四個點void CDiamondView:DrawBezier2(POINT
10、p4) InvalidateRgn(NULL); UpdateWindow();CDC *pDC = GetDC();CPen newPen,*oldPen;newPen.CreatePen(PS_DASH,1,RGB(0,0,0);oldPen=pDC-SelectObject(&newPen); CBrush newBrush,*oldBrush;newBrush.CreateSolidBrush(RGB(0,0,0);oldBrush=pDC-SelectObject(&newBrush);for(int i=0;iEllipse(pi.*-3,pi.y-3,pi.*+3,pi.y+3)
11、;pDC-SelectObject(oldPen);pDC-SelectObject(oldBrush);Sleep(50);POINT q4; q0.*=p0.*; q0.y=p0.y;q1.*=(-5*p0.*+18*p1.*-9*p2.*+2*p3.*)/6;q1.y=(-5*p0.y+18*p1.y-9*p2.y+2*p3.y)/6;q2.*=(2*p0.*-9*p1.*+18*p2.*-5*p3.*)/6;q2.y=(2*p0.y-9*p1.y+18*p2.y-5*p3.y)/6;q3.*=p3.*;q3.y=p3.y;DrawBezier1(q);/以的六個點為控制點來繪制B樣條曲
12、線/p:的六個控制點void CDiamondView:DrawBCurve(POINT p6) InvalidateRgn(NULL); UpdateWindow(); CDC *pDC = GetDC(); CPen newPen,*oldPen; newPen.CreatePen(PS_SOLID,2,RGB(255,0,0); oldPen = pDC-SelectObject(&newPen); int rate=1000; int a*,ay,b*,by,c*,cy,d*,dy; double *,y; pDC-Polyline(p, 6); pDC-SelectObject(ol
13、dPen); newPen.DeleteObject(); newPen.CreatePen(PS_SOLID,3,RGB(0,0,255); oldPen = pDC-SelectObject(&newPen); for(int i=0;i3;i+) a*=-(pi.*-3*pi+1.*+3*pi+2.*-pi+3.*)/6; b*=(pi.*-2*pi+1.*+pi+2.*)/2; c*=-(pi.*-pi+2.*)/2; d*=(pi.*+4*pi+1.*+pi+2.*)/6; ay=-(pi.y-3*pi+1.y+3*pi+2.y-pi+3.y)/6; by=(pi.y-2*pi+1.y+pi+2.y)/2; cy=-(pi.y-pi+2.y)/2; dy=(pi.y+4*pi+1.y+pi+2.y)/6; for(double t=0;tMoveTo(Round(*),Round(y); pDC-LineTo(Round(*),Round(y); Sleep(2); pDC-SelectO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 英漢交互口譯課程設計
- 體育行業(yè)助理的日常工作內容和能力要求
- 內科護士工作心得
- 情境教學法在班級中的應用計劃
- 建筑行業(yè)客服工作思考
- 酒店管理技術要點概述
- 旅游景區(qū)衛(wèi)生凈化
- 2024年甜甜的秘密教案
- 2024年認識數(shù)學的教案
- 2024年認識空氣教案
- 房屋無償使用協(xié)議書(8篇)
- 中央銀行理論與實務期末復習題
- 國家開放大學電大本科《國際私法》案例題題庫及答案(b試卷號:1020)
- 喜慶中國節(jié)春節(jié)習俗文化PPT模板
- 測井儀器設計規(guī)范--電子設計
- 北師大版小學五年級上冊數(shù)學第六單元《組合圖形的面積》單元測評培優(yōu)試卷
- 用特征方程求數(shù)列的通項
- 四年級奧數(shù)題(一)找規(guī)律
- 素材庫管理系統(tǒng)架構(共13頁)
- 監(jiān)理平行檢驗記錄表
- 縣領導在新錄用公務員培訓班開班典禮上的講話
評論
0/150
提交評論