江蘇大學-計算機圖形學第二次實驗報告-曲線擬合_第1頁
江蘇大學-計算機圖形學第二次實驗報告-曲線擬合_第2頁
江蘇大學-計算機圖形學第二次實驗報告-曲線擬合_第3頁
江蘇大學-計算機圖形學第二次實驗報告-曲線擬合_第4頁
江蘇大學-計算機圖形學第二次實驗報告-曲線擬合_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上計算機科學與通信工程學院實驗報告課程計算機圖形學實驗題目實驗二:曲線擬合學生姓名學號專業(yè)班級指導教師日期成績評定表評價內容具體內容權重得分論證分析方案論證與綜合分析的正確、合理性20%算法設計算法描述的正確性與可讀性20%編碼實現(xiàn)源代碼正確性與可讀性30%程序書寫規(guī)范標識符定義規(guī)范,程序書寫風格規(guī)范20%報告質量報告清晰,提交準時10%總 分指導教師簽名1. 實驗內容1. 繪制三次Bezier曲線(1)給定四個已知點P1P4,以此作為控制頂點繪制一段三次Bezier曲線。(2)給定四個已知點P1P4,以此作為曲線上的點繪制一段三次Bezier曲線。2. 繪制三次B樣條

2、曲線給定六個已知點P1P6,以此作為控制頂點繪制一條三次B樣條曲線。2. 實驗環(huán)境Windows xpVs 20083. 問題分析Bezier曲線通過一組多邊折線的各頂點唯一的定義出來。 在多邊折線的各頂點中,只有第一點和最后一點在曲線上,其余的頂點則用來定義曲線的導數,階次和形狀。三次Bezieer曲線經過首、末兩個控制點,且與特征多邊形的首、末兩條邊相切。因此在給定四個控制點的情況下,可以根據線性貝塞爾曲線描述的中介點 Q0、Q1、Q2,和由二次曲線描述的點 R0、R1 所建構。也可以在給定四個線上點的情況下根據公式計算出曲線??傊灰@得了四個控制點的坐標,便可以通過編程來繪制出曲線。

3、對于給出了四個曲線上點的曲線,由于控制點的坐標位于曲線上,而且在相交處兩曲線的切平面重合,曲率相等。可以據此來繪制圖形。B樣條曲線是Bezier曲線的拓廣,它是用B樣條基函數代替了Bezier曲線表達式中的Bernstain基函數。在空間給定n1個點的位置向量Pi (i=0,1,2,n, n>=k),則稱參數曲線 (0t1)為k階(或k1次)的B樣條曲線。其中Ni,k(t)為B樣條基函數。其中Ni,k(t)為B樣條基函數。給定的n1個點為B樣條曲線的控制頂點,由其構成的多邊折線稱B特征多邊形。三次B樣條曲線的端點特性:圖 1 b給定4個點繪制的b樣條曲線三次B樣條曲線的連續(xù)性:在已有的三

4、次B樣條曲線的基礎上,增加一個控制點,就可相應地增加一段B樣條曲線,并自然地達到 C2連續(xù)。圖 2給定五個點所繪制的b樣條曲線4. 算法設計下圖3為給定四個已知點,以此作為控制頂點繪制一段三次Bezier曲線的流程圖。圖4為給定四個曲線上點,繪制三次Bezier曲線的流程圖。圖5為給定六個控制點所繪制三次b樣條曲線的流程圖。圖 3圖 4 圖 55. 源代碼/以已知的四個點為控制點繪制Bezier曲線void CDiamondView:DrawBezier1(POINT p4)CDC *pDC = GetDC(); InvalidateRect(NULL); UpdateWindow(); CP

5、en newPen,*oldPen; newPen.CreatePen(PS_SOLID,2,RGB(0,0,0); oldPen = pDC->SelectObject(&newPen);pDC->Polyline(p,4); pDC->SelectObject(oldPen);newPen.DeleteObject(); newPen.CreatePen(PS_SOLID, 1, RGB(255,0,0); oldPen = pDC->SelectObject(&newPen);double ax,bx,cx,dx,ay,by,cy,dy,x,y,t

6、;ax=(-p0.x)+(3*p1.x)-(3*p2.x)+(p3.x); bx=(3*p0.x)-(6*p1.x)+(3*p2.x); cx=(-3*p0.x)+(3*p1.x); dx=p0.x; ay=(-p0.y)+(3*p1.y)-(3*p2.y)+(p3.y); by=(3*p0.y)-(6*p1.y)+(3*p2.y); cy=(-3*p0.y)+(3*p1.y); dy=p0.y; pDC->MoveTo(p0.x,p0.y); for(t=0;t<=1;t+=0.01) x=ax*t*t*t+bx*t*t+cx*t+dx; y=ay*t*t*t+by*t*t+cy

7、*t+dy; pDC->LineTo(x,y); Sleep(1); pDC->SelectObject(oldPen);/以已知的四個點為Bezier曲線上的點來繪制Bezier曲線void CDiamondView:DrawBezier2(POINT p4)POINT a3,b3;POINT a11,b11;for(int i=0;i<=2;i+)if(i=0)a10=pi;b10=pi+2;else if(i=2)a10=pi-1;b10=pi+1;elsea10=pi-1;b10=pi+2;bi.y=pi+1.y+(pi.y)-(b10.y)/4;bi.x=pi+1.

8、x+(pi.x)-(b10.x)/4;ai.y=pi.y+(pi+1.y)-(a10.y)/4;ai.x=pi.x+(pi+1.x)-(a10.x)/4;CDC *pDC = GetDC();CPen newPen,*oldPen; newPen.CreatePen(PS_SOLID,2,RGB(0,255,0); oldPen = pDC->SelectObject(&newPen);for(int i=0;i<=2;i+)POINT p14=pi.x,pi.y,ai.x,ai.y,bi.x,bi.y,pi+1.x,pi+1.y; pDC->PolyBezier(p

9、1,4); pDC->SelectObject(oldPen);/以已知的六個點為控制點來繪制B樣條曲線/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 ax,ay,bx,by,

10、cx,cy,dx,dy; double x,y; pDC->Polyline(p, 6); pDC->SelectObject(oldPen); newPen.DeleteObject(); newPen.CreatePen(PS_SOLID,3,RGB(0,0,255); oldPen = pDC->SelectObject(&newPen); for(int i=0;i<3;i+) ax=-(pi.x-3*pi+1.x+3*pi+2.x-pi+3.x)/6; bx=(pi.x-2*pi+1.x+pi+2.x)/2; cx=-(pi.x-pi+2.x)/2;

11、dx=(pi.x+4*pi+1.x+pi+2.x)/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;t<=1;t+=1.0/rate) x=ax*pow(t,3)+bx*pow(t,2)+cx*t+dx; y=ay*pow(t,3)+by*pow(t,2)+cy*t+dy; pDC->MoveTo(Round(x),Round(y); pDC->LineTo(Round(x),Round(y); Sleep(2); pDC->SelectObject(oldPen);6. 程序運行結果下圖6為給定四個已知點,以此作為控制頂點繪制的一段三次Bezier曲線。圖8為給定四個曲線上點所繪制的三次B

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論