版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第五章 曲線曲面工業(yè)設(shè)計(jì)中經(jīng)常繪制各種曲線曲面,曲線分為規(guī)則曲線與不規(guī)則曲線,曲面也相應(yīng)分為規(guī)則曲面和不規(guī)則曲面。規(guī)則曲線有圓錐曲線、圓柱曲線、漸開(kāi)線等,這些曲線都可以用函數(shù)或參數(shù)方程表示;不規(guī)則曲線則是根據(jù)給定的離散數(shù)據(jù)點(diǎn)用曲線擬合逼近得到,常見(jiàn)的有參數(shù)樣條曲線、Bezier曲線、B樣條曲線等,這些曲線一般采用分段的參數(shù)方程表示。規(guī)則的曲面有柱面、錐面、球面等,可以用函數(shù)或參數(shù)方程表示;常見(jiàn)的不規(guī)則曲面有Bezier曲面、B樣條曲面等,這些曲面采用分片的參數(shù)方程表示。本章包含了三次樣條曲線,Bezier曲線和B樣條曲線。實(shí)驗(yàn)一 二次插值樣條曲線實(shí)驗(yàn)?zāi)康模赫莆斩尾逯禈訔l曲線的生成算法,掌握對(duì)
2、數(shù)學(xué)曲線采樣,用折線近似顯示曲線的原理。 實(shí)驗(yàn)要求:要求在給定插值點(diǎn)個(gè)數(shù)的情況下。采用二次拋物線插值方式生成曲線,為保證曲線的光滑性,采用加權(quán)合成方法。對(duì)于第一段和最后一段曲線舍棄。要求插值點(diǎn)用鼠標(biāo)交互輸入。實(shí)驗(yàn)原理:二次插值樣條曲線主要采用拋物線插值方法生成二次樣條曲線,即由給定的3個(gè)點(diǎn)定義一條拋物線。采樣矢量表達(dá)式表示該參數(shù)化二次曲線,可以表示為: P(t)=A1+A2·t +A3·t2要確定該系數(shù),需要三個(gè)獨(dú)立的條件。設(shè)三個(gè)條件為:(1) 當(dāng)參數(shù)變量t=0時(shí),曲線經(jīng)過(guò)p1點(diǎn)(2) 當(dāng)t=1時(shí),曲線經(jīng)過(guò)p3點(diǎn)(3) 當(dāng)t=0.5時(shí),曲線經(jīng)過(guò)p2點(diǎn)考慮到曲線的光滑性,可以
3、按上述條件每相鄰三個(gè)點(diǎn)生成一段拋物線,則n個(gè)插值點(diǎn)可以生成n1段拋物線,對(duì)相鄰兩段拋物線,例如,Pi 、Pi+1 、Pi+2 、Pi+3, 由Pi 、Pi+1 、Pi+2生成的曲線段Si和由Pi+1 、Pi+2 、Pi+3生成的曲線段Si+1在Pi+1 、Pi+2 共有區(qū)間, 而兩段拋物線是不可能重合的,所以要將這個(gè)區(qū)間的兩段曲線進(jìn)行加權(quán)合成。采用以下方程 Pi+1(t) = f(T)·Si (ti)+g(T)·Si+1 (ti+1) 其中f(T)=1-T,g(T)=T,T=2t,得到二次插值樣條曲線公式: Pi+1(t)=(-4t3+4t2-t) Pi +(13t3-10
4、t2+1) Pi+1 +(-12t3+8t2+t) Pi+2 +(4t3-2t2) Pi+3實(shí)驗(yàn)步驟:(1) 設(shè)置插值點(diǎn)個(gè)數(shù),設(shè)置采樣精度(2) 鼠標(biāo)交互輸入插值點(diǎn),并顯示由插值點(diǎn)構(gòu)成的折線(3) 根據(jù)插值點(diǎn)個(gè)數(shù)n生成n-3段曲線,對(duì)每一段曲線,根據(jù)采樣精度對(duì)t進(jìn)行離散化,計(jì)算出相應(yīng)的離散點(diǎn),連接相鄰的離散點(diǎn),用折線近似顯示曲線。實(shí)驗(yàn)效果:程序?qū)崿F(xiàn):1)定義變量int m_ptN, inputN; /插值點(diǎn)個(gè)數(shù)和輸入點(diǎn)個(gè)數(shù)POINT *pts; /插值點(diǎn)指針2)對(duì)變量進(jìn)行初始化m_ptN=6; /設(shè)置插值點(diǎn)個(gè)數(shù)inputN=0; /初始化輸入點(diǎn)個(gè)數(shù)pts=new POINTm_ptN; /給插
5、值點(diǎn)分別內(nèi)存3)輸入并繪制插值點(diǎn)折線/鼠標(biāo)左鍵按下事件函數(shù)void CChaZhi2QuXianView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCClientDC dc(this);if(inputN<m_ptN) /獲取插值點(diǎn)并繪制插值點(diǎn)折線ptsinputN=point;if(inputN>0)dc.MoveTo (ptsinputN-1); dc.LineTo(ptsinputN);inputN+;elseDr
6、awMyLine(); /調(diào)用插值曲線生成函數(shù)CView:OnLButtonDown(nFlags, point);4)生成二次插值曲線/生成二次插值曲線void CChaZhi2QuXianView:DrawMyLine()CClientDC dc(this);CPen *pOld,pen(PS_SOLID,2,RGB(255,0,0);pOld=dc.SelectObject (&pen);int x,y,i,j,k=10;double dt,t1,t2,t3 ,a,b,c,d;dt=0.5/k; dc.MoveTo (pts1);for(i=1;i<m_ptN-2;i+)
7、/處理每一段插值曲線t1=0;for(j=1;j<=k;j+)/處理每一個(gè)采樣點(diǎn)t1=t1+dt; t2=t1*t1; t3=t2*t1;a=-4*t3+4*t2-t1; b=12*t3-10*t2+1; c=-12*t3+8*t2+t1; d=4*t3-2*t2;x=a*ptsi-1.x+b*ptsi.x+c*ptsi+1.x+d*ptsi+2.x;y=a*ptsi-1.y+b*ptsi.y+c*ptsi+1.y+d*ptsi+2.y ;dc.LineTo(x,y);dc.SelectObject (pOld);實(shí)驗(yàn)二Bezier曲線實(shí)驗(yàn)?zāi)康模赫莆誃ezier曲線的生成算法,掌握應(yīng)用調(diào)
8、和函數(shù)生成曲線的方法,掌握3次Bezier曲線的性質(zhì)。 實(shí)驗(yàn)要求:用鼠標(biāo)交互輸入控制點(diǎn),繪制控制折線,生成并顯示3次Bezier曲線。實(shí)驗(yàn)原理:Bezier曲線的形狀是通過(guò)一組多邊折線的各項(xiàng)唯一定義出來(lái)的。在該多邊折線的各頂點(diǎn)中,只有第一點(diǎn)和最后一點(diǎn)是在曲線上,其余的頂點(diǎn)則用來(lái)定義曲線的導(dǎo)數(shù)、階次和形狀。第一條邊和最后一條邊則表示了曲線在起點(diǎn)處和終點(diǎn)處的切線方向,即第一條邊和最后一條邊分別和曲線的起點(diǎn)和終點(diǎn)相切。曲線的形狀趨于控制折線的形狀,改變控制點(diǎn)的位置和曲線的形狀變化有著直觀的聯(lián)系。Bezier曲線是由多項(xiàng)式調(diào)和函數(shù)推導(dǎo)出來(lái)的,通常n+1個(gè)頂點(diǎn)定義一個(gè)n次多項(xiàng)式,三次Bezier曲線需要
9、四個(gè)頂點(diǎn)來(lái)定義。此時(shí),調(diào)和函數(shù)分別為: B0,3(t)=-t3+3t2-3t+1B1,3(t)=3t3-6t2+3tB2,3(t)=-3t3+3t2B3,3(t)=t3實(shí)驗(yàn)步驟:(1) 鼠標(biāo)交互輸入控制點(diǎn),并繪制控制折線(2) 根據(jù)采樣精度對(duì)t進(jìn)行離散化,根據(jù)三次Bezier曲線公式,計(jì)算出相應(yīng)的離散點(diǎn),連接相鄰的離散點(diǎn),用折線近似顯示曲線。實(shí)驗(yàn)效果:程序?qū)崿F(xiàn):1)定義變量int inputN; /輸入點(diǎn)個(gè)數(shù)POINT *pts; /控制點(diǎn)指針2)對(duì)變量進(jìn)行初始化inputN=0; /初始化輸入點(diǎn)個(gè)數(shù)pts=new POINT4; /給控制點(diǎn)分別內(nèi)存3)輸入并繪制控制折線void CBezie
10、rView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCClientDC dc(this);if(inputN<4) /獲取控制點(diǎn)并繪制控制折線ptsinputN=point;if(inputN>0)dc.MoveTo (ptsinputN-1); dc.LineTo(ptsinputN);inputN+;elsemyBezierLine(); /調(diào)用Bezier曲線生成函數(shù)CView:OnLButtonDown(nFl
11、ags, point);4)生成并繪制Bezier曲線/繪制Bezier曲線void CBezierView:myBezierLine()CClientDC dc(this);CPen *pOld,pen(PS_SOLID,2,RGB(255,0,0);pOld=dc.SelectObject (&pen);int x,y,i,k=20; double dt,t1,t2,t3,a,b,c,d;dt=1.0/k; t1=0; /設(shè)置采樣間距,設(shè)置t的初值dc.MoveTo (pts0); for(i=1;i<=k;i+) /計(jì)算每一個(gè)采樣點(diǎn)并用折線近似曲線t1=t1+dt; t2=
12、t1*t1; t3=t2*t1;a=-t3+3*t2-3*t1+1; b=3*t3-6*t2+3*t1; c=-3*t3+3*t2; d=t3;x=a*pts0.x+b*pts1.x+c*pts2.x+d*pts3.x;y=a*pts0.y+b*pts1.y+c*pts2.y+d*pts3.y;dc.LineTo (x,y);dc.SelectObject (pOld);實(shí)驗(yàn)三 三次B樣條曲線實(shí)驗(yàn)?zāi)康模赫莆杖蜝樣條曲線的生成算法,掌握三次B樣條曲線與控制折線的幾何關(guān)系。 實(shí)驗(yàn)要求:要求根據(jù)給定的控制點(diǎn)個(gè)數(shù),用鼠標(biāo)輸入控制點(diǎn)并繪制控制折線,生成并顯示由給定控制折線確定的三次B樣條曲線。實(shí)驗(yàn)原理
13、:Bezier曲線存在著幾個(gè)明顯的不足,如控制點(diǎn)的個(gè)數(shù)決定了曲線的階次,并且當(dāng)控制點(diǎn)較多時(shí),控制折線對(duì)曲線形狀的控制將明顯減弱,以及改變曲線的任意控制點(diǎn)都會(huì)影響到整個(gè)曲線的形狀等問(wèn)題,B樣條曲線很好的解決了這些問(wèn)題,并且它還具有對(duì)控制折線更逼近、多項(xiàng)式階次較低等優(yōu)點(diǎn)。通常給定m+n+1個(gè)控制點(diǎn),可以定義m+1段n次的參數(shù)曲線,其公式為: 其中,Pk,n(t)為第k段n次B樣條曲線段,F(xiàn)i,n(t)為n次B樣條基函數(shù),也稱為B樣條分段混合函數(shù),其形式為 連接全部曲線段所組成的整條曲線稱為n次B樣條曲線。實(shí)驗(yàn)步驟:(1) 設(shè)置控制點(diǎn)個(gè)數(shù)(2) 鼠標(biāo)交互輸入控制點(diǎn),并繪制控制折線(3) 根據(jù)根據(jù)控制
14、點(diǎn)個(gè)數(shù)ptN生成ptN-3段三次B樣條曲線,對(duì)每一段曲線,根據(jù)采樣精度對(duì)t進(jìn)行離散化,計(jì)算出相應(yīng)的離散點(diǎn),連接相鄰的離散點(diǎn),用折線近似顯示曲線。實(shí)驗(yàn)效果:程序?qū)崿F(xiàn):1)定義變量int m_ptN,inputN; /控制點(diǎn)個(gè)數(shù)和輸入點(diǎn)個(gè)數(shù)POINT *pts; /控制點(diǎn)指針2)對(duì)變量進(jìn)行初始化m_ptN=8; /設(shè)置控制點(diǎn)個(gè)數(shù)inputN=0; /初始化輸入點(diǎn)個(gè)數(shù)pts=new POINTm_ptN; /給控制點(diǎn)分別內(nèi)存3)輸入并繪制控制折線/鼠標(biāo)左鍵按下事件函數(shù)void CBSplineView:OnLButtonDown(UINT nFlags, CPoint point) / TODO:
15、Add your message handler code here and/or call defaultCClientDC dc(this);if(inputN<m_ptN) /獲取插值點(diǎn)并繪制插值點(diǎn)折線ptsinputN=point;if(inputN>0)dc.MoveTo (ptsinputN-1); dc.LineTo(ptsinputN);inputN+;elsemyBSpline(); /調(diào)用插值曲線生成函數(shù)CView:OnLButtonDown(nFlags, point);4)生成并繪制B樣條曲線/B樣條曲線函數(shù)void CBSplineView:myBSpli
16、ne()CClientDC dc(this);CPen *pOld, pen(PS_SOLID,2,RGB(255,0,0);pOld=dc.SelectObject (&pen);int x,y,m=m_ptN-3,k=20; /設(shè)置采樣精度,計(jì)算曲線段個(gè)數(shù)float t1,t2,t3,a,b,c,d,dt;dt=1.0/k; /設(shè)置采樣間隔for(int i=0; i<m; i+)/處理每一段曲線t1=0;for(int j=0; j<=k; j+) /對(duì)當(dāng)前曲線進(jìn)行采樣并顯示t2=t1*t1; t3=t2*t1;a=-t3+3*t2-3*t1+1; b=3*t3-6*t2+4;c=-3*t3+3*t2+3*t1+1; d=t3;a=a/6; b=b/6; c=c/6; d=d/6;x=a*ptsi.x+b*ptsi+1.x+c*ptsi+2.x+d*ptsi+3.x;y=a*ptsi.y+b*ptsi+1.y+c*ptsi+
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市靜安區(qū)2025屆高三一模語(yǔ)文試卷
- 2025年度個(gè)人自建廠房產(chǎn)權(quán)交易合同范本4篇
- 2025個(gè)人退伙經(jīng)營(yíng)合同(物流配送行業(yè)專用)4篇
- 2025年度鋼構(gòu)建筑綠色施工監(jiān)理合同
- 2025-2030全球鐵基超塑形狀記憶合金行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球輸注穿刺耗材行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)高純度氫氧化鈷行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年度鋼管及配件進(jìn)出口代理合同范本2篇
- 2025年個(gè)人二手車買(mǎi)賣協(xié)議示范文本2篇
- 2025版教育培訓(xùn)機(jī)構(gòu)推廣服務(wù)合同模板3篇
- 道路瀝青工程施工方案
- 2025年度正規(guī)離婚協(xié)議書(shū)電子版下載服務(wù)
- 《田口方法的導(dǎo)入》課件
- 春節(jié)后安全生產(chǎn)開(kāi)工第一課
- 內(nèi)陸?zhàn)B殖與水產(chǎn)品市場(chǎng)營(yíng)銷策略考核試卷
- 電力電纜工程施工組織設(shè)計(jì)
- 2024年重慶市中考數(shù)學(xué)試題B卷含答案
- 醫(yī)生給病人免責(zé)協(xié)議書(shū)(2篇)
- 票據(jù)業(yè)務(wù)居間合同模板
- 承包鋼板水泥庫(kù)合同范本(2篇)
- 頸椎骨折的護(hù)理常規(guī)課件
評(píng)論
0/150
提交評(píng)論