Convert BSpline Curve to Arc Spline in OpenCASCADE
eryar@163.com
Abstract. The paper based on OpenCASCADE algorithms to approximate the NURBS curve to arc spline. The method is most useful in numerical control to drive the cutter along straight line or circular paths. Or in the shipbuilding industry to manufacture section bar for cold frame bender.
Key Words. NURBS, Biarc approximation, arc spline,
1.Introduction
在數(shù)控加工CNC領(lǐng)域,通常需要用盡量少段數(shù)的圓弧和直線段來對曲線進(jìn)行擬合。有的數(shù)控繪圖機(jī)也只有直線和圓弧插補(bǔ)器,即只能繪制直線和圓弧,所以也需要將自由曲線轉(zhuǎn)換成直線和圓弧來進(jìn)行繪制。在船舶制造方面,如肋骨冷彎機(jī)只有兩種狀態(tài):彎和不彎,也只能加工出直線和圓弧,所以也需要將曲面型材的彎曲信息轉(zhuǎn)換成肋骨冷彎機(jī)能加工的數(shù)據(jù)。如下圖所示為型材模型及其基線:
Figure 1. 型材模型及基線
Figure 2. 肋骨冷彎機(jī)
如上圖所示,型材都是直線的,通過彎曲加工出曲線效果。所以也需要將實(shí)際的自由曲線的型材數(shù)據(jù)轉(zhuǎn)換成圓弧樣條(直線和圓弧)便于加工。國內(nèi)外關(guān)于這方面的論文很多,本文基于opencascade做了一個(gè)測試,opencascade平臺相關(guān)的數(shù)據(jù)結(jié)構(gòu)完善,B樣條相關(guān)算法齊全,可以基于這個(gè)開源平臺做些開發(fā)。
2.Algorithm
看了國內(nèi)外的一些論文,對NURBS曲線進(jìn)行圓弧樣條擬合的大概思路都是一個(gè)先對NURBS曲線離散的過程。一個(gè)極端情況就是生成NURBS曲線的顯示數(shù)據(jù),即多段線來逼近。多段線對于有的機(jī)器設(shè)備(CNC)而言,加工不便,所以提出盡量使用少的圓弧和直線段來逼近NURBS曲線這種問題。
總的思路是先將NURBS曲線離散成多段線,或?qū)URBS轉(zhuǎn)換成分段Bezier曲線,然后再用雙圓弧樣條曲線來進(jìn)行擬合。
3.Polygon Approximation
將曲線離散成多段線的相關(guān)算法是個(gè)相對重要的算法,因?yàn)榭梢杂糜趯URBS曲線的顯示。生成曲線顯示數(shù)據(jù)時(shí)也有用盡量少的多段線來逼近曲線的問題。所以可以先用生成曲線顯示數(shù)據(jù)的算法來對曲線進(jìn)行離散化。OpenCASCADE中取曲線上點(diǎn)的相關(guān)類都在包GCPnts中:
如類GCPnts_TangentialDeflection可以在滿足角度偏差和曲率偏差的條件下對曲線進(jìn)行離散化。根據(jù)文檔注釋可知:
由上圖可知,曲線離散的算法滿足條件為向量P1P3和P3P2之間的夾角和P1P2與P1P3之間的夾角分別滿足角度和曲率偏差。
如果對經(jīng)過上述算法處理過的曲線上相鄰兩個(gè)點(diǎn),根據(jù)切線來擬合一段圓弧,這樣處理起來程序比用雙圓弧擬合要簡單,對于尖點(diǎn)的處理也很方便。
過樣條曲線上相鄰兩個(gè)節(jié)點(diǎn),且在節(jié)點(diǎn)處都切于樣條曲線的圓弧一般是不存在的,但卻可以決定一圓弧使得在節(jié)點(diǎn)處兩對切線間的夾角相等,這種方法稱為平均切線法。故結(jié)合樣條曲線離散算法和平均切線法,可以將樣條曲線轉(zhuǎn)換成直線和圓弧來逼近表示的圓弧樣條曲線。直線的情況就是相鄰兩個(gè)節(jié)點(diǎn)處的切線之間的夾角小于一定的偏差,則認(rèn)為是直線,其他情況都認(rèn)為是圓弧。
4.Arc Spline Fitting
根據(jù)上述原理使用OpenCascade編寫程序,OpenCascade在NURBS方面的算法還是很全面的,如計(jì)算NURBS曲線曲面上的點(diǎn)或切線,或任意階導(dǎo)數(shù)等等。也有關(guān)于圓弧、線段等全面的數(shù)據(jù)結(jié)構(gòu),所以借助OpenCascade這個(gè)平臺,可以快速實(shí)現(xiàn)一些想法。
上圖所示為當(dāng)精度為0.5時(shí)B樣條曲線轉(zhuǎn)換成圓弧樣條曲線的結(jié)果。其中紅色曲線為B樣條曲線,黃色為圓弧樣條。
當(dāng)精度為0.1時(shí)得到的圓弧樣條。
當(dāng)精度為0.01時(shí)得到的圓弧樣條。由圖可知,圓弧樣條與B樣條基本重合。
5.Conclusion
綜上所述,當(dāng)離散精度越高時(shí),得到的圓弧樣條越逼近原始的B樣條,但是圓弧和直線段的數(shù)量也會越多。
使用上述算法實(shí)現(xiàn)程序簡單,避免了雙圓弧擬合的一些復(fù)雜計(jì)算。
OpenCascade中有完善的NURBS相關(guān)算法及常見的幾何曲線曲面的數(shù)據(jù)結(jié)構(gòu),所以借助這個(gè)平臺,可以快速驗(yàn)證一些想法。
6.References
1.Les A. Piegl, Wayne Tiller. Biarc approximation of NURBS curves.
2.盧建彪,雍俊海. 二次Bezier曲線的雙圓弧樣條插值二分算法.
3.何援軍. 計(jì)算機(jī)圖形學(xué). 機(jī)械工業(yè)出版社. 2010