幾何內(nèi)核與數(shù)學(xué)
1 概述
從1950年第一臺圖形顯示器(美國麻省理工大學(xué)MIT旋風(fēng)I號Whirlwind I)的誕生,到1962年MIT林肯實(shí)驗(yàn)室的Ivan E. Sutherland發(fā)表題為“Sketchpad: 一個人機(jī)交互的圖形系統(tǒng)”確定計算機(jī)圖形學(xué)作為獨(dú)立科學(xué)分支。經(jīng)過70多年的發(fā)展,計算機(jī)圖形學(xué)中的幾何造型技術(shù)成了現(xiàn)在的幾何內(nèi)核。
數(shù)學(xué)是我們從小學(xué)、中學(xué)到大學(xué)一直都在學(xué)習(xí)的課程,是現(xiàn)代科技的理論基礎(chǔ),是創(chuàng)新的源泉。幾何內(nèi)核與數(shù)學(xué)的聯(lián)系非常緊密,結(jié)合開源幾何內(nèi)核opencascade談?wù)剬W(xué)習(xí)過程和數(shù)學(xué)的認(rèn)識。

2 高中時代
在剛學(xué)習(xí)的時候,總是先從簡單的開始入手。比如,先看看直線、圓是什么,怎么顯示出來。長方體、圓柱體等怎么用BREP進(jìn)行表示,怎么顯示在屏幕上。這個時候考慮問題是常人思維,我認(rèn)為是高中時代。
比如,怎么計算二維直線與圓的交點(diǎn)呢?上過高中的都學(xué)過,聯(lián)立直線與圓的一元二次方程組,將解方程組的代碼固化在代碼中。當(dāng)計算橢圓與圓的交點(diǎn)時,也做同樣的處理,就是多寫點(diǎn)代碼。高中幾何學(xué)得好的,可能會說我可以用向量,向量的方法會比代數(shù)的方法速度要快。
再比如,怎么計算曲線的弧長和曲面的面積呢?計算曲線可以通過對曲線進(jìn)行采樣點(diǎn),將點(diǎn)連成多段線,再分別計算每小段線段的長度累加就是了。面積咱們也可以類似處理,將曲面離散成三角形或四邊形,再將這些三角形或四邊形面積累加。這些方法都能實(shí)現(xiàn),但是性能、精度都會成為問題。要計算得精度高,采樣就要密,就會帶來性能問題。

3 大學(xué)時代
到了大學(xué)時代學(xué)習(xí)過高等數(shù)學(xué)、線性代數(shù)等,有了更有力的工具來解決更一般問題。面向?qū)ο缶幊毯蛿?shù)學(xué)也是相通的,就是將問題抽象的能力。這個時候眼中沒有直線、圓、B樣條曲線、平面、球面、B樣條曲面等等,只有線Curve和面Surface。

再進(jìn)一步抽象,將線Curve與一元函數(shù)F(x)對應(yīng),將面Surface與多元函數(shù)對應(yīng)F(x,y),與數(shù)學(xué)建立了聯(lián)系。

這時就可以使用數(shù)學(xué)工具對問題進(jìn)行處理了。如計算曲線弧長,就變成一個對切向量的積分。曲線切向量需要計算一階導(dǎo)數(shù),《The NURBS Book》等書上計算B樣條微分的公式就有用,看待B樣條曲線和看待圓一樣了。
積分的計算可以使用數(shù)值方法,如Newton-Cotes或Gauss積分法,使用更少的迭代獲得更高的精度,程序優(yōu)化的方向也清晰。
從opencascade的類math_Function和math_MultipleVarFunction可以可以看出,許多幾何問題都抽象成了數(shù)學(xué)問題。有很多人問我,怎樣才算入門了opencascade呢?那就是思考問題的方式轉(zhuǎn)換成數(shù)學(xué)的方式,我覺得就算入門了。再具體點(diǎn)可操作點(diǎn)呢,首先就是數(shù)據(jù)結(jié)構(gòu)的入門,掌握BREP邊界表示法,如在圓柱面Surface上框出一個小面片F(xiàn)ace,能正常顯示出來就算理解opencascade中的BREP結(jié)構(gòu)。其次是幾何算法入門,就是將從math_Function和math_MultipleVarFunction所有的派生類的數(shù)學(xué)公式寫出來。這兩點(diǎn)動手做完,我覺得可以算入門了。
4 研究生時代
如果大學(xué)時代我們掌握了微分、積分、線性代數(shù),到研究生時代應(yīng)該掌握變分、偏微分方程、最優(yōu)化理論等等。如偏微分方程用于構(gòu)造過渡曲面,曲線曲面擬合光順最后都抽象成帶約束的非線性方程組的求解。

到研究生時代因?yàn)檎莆盏臄?shù)學(xué)工具,會處理看上去很簡單但處理起來更復(fù)雜的問題:如上圖所示的過渡Blend,以及蒙面Skinning和掃掠Sweep等。

這時也可以有一些智能算法,如遺傳算法、蟻群,粒子群PSO優(yōu)化算法,AI等,使用仿生、遺傳變異等手段使求解迭代更快收斂。為傳統(tǒng)優(yōu)化算法提供初始解,使傳統(tǒng)算法能更快、更準(zhǔn)地找到解析解,不至于深陷局部最優(yōu)解中不能自拔。在opencascade中也有相關(guān)實(shí)例,如math_PSO。這些智能算法有隨機(jī)性,不像解析算法那樣滿足一定約束條件必定會找到相對準(zhǔn)確答案。只能作為像曲面求交之網(wǎng)格離散法,作為參數(shù)迭代法的預(yù)處理。到這個時代,查看相關(guān)技術(shù)論文毫無壓力,面對一般的幾何問題都應(yīng)該可以從容應(yīng)對。和研究生一樣面對的問題更加具體,會鉆牛角尖。
5 總結(jié)
綜上所述,幾何內(nèi)核可以看成一個數(shù)學(xué)庫的子集,只是在幾何圖形上的應(yīng)用。學(xué)習(xí)幾何內(nèi)核的過程類比于學(xué)生時代掌握的數(shù)學(xué)工具。在高中時代,看問題很具體,只能case by case的處理,功能能做出來。到大學(xué)時代,有了一定的抽象能力(與面向?qū)ο缶幊桃粯樱磫栴}具有一般性,能使用更高級點(diǎn)的數(shù)學(xué)工具來處理,有能力來兼顧精度和性能。到了研究生時代,就不怕別人來卡脖子,甚至能超越別人。這個時候不要給自己設(shè)限,找準(zhǔn)喜歡的方向去鉆牛角尖,終會有所成。