今天,我解決了
CODEV中引入自定義間斷面的問題。積累了經(jīng)驗(yàn),與大家分享。
<Ch9"1f3, FtJaX])b 按照
說明書,有間斷的面最好使用USERSUR2,但是,當(dāng)我打開他的模板后,發(fā)現(xiàn)比較復(fù)雜,這是一個(gè)專門為菲涅爾
透鏡的生成而編制的
程序,
參數(shù)很多,復(fù)雜之處在于處理與各個(gè)間斷點(diǎn)有關(guān)的問題,具體我也沒太看懂,只知道是反復(fù)疊代找到交點(diǎn)。
pq0Z<b;2 fmYx 但是,雖然codev的說明擋中強(qiáng)調(diào)USERSUR型子程序只適合于連續(xù)表面,但考慮到,
光線追跡實(shí)際上只需要知道表面的
函數(shù)和該點(diǎn)的導(dǎo)數(shù),所以,如果在程序中仔細(xì)定義間斷點(diǎn)處的導(dǎo)數(shù),就可以當(dāng)成連續(xù)面來處理。
ox SSEs iJOoO"Ai 我的解決辦法是,利用有限差分計(jì)算導(dǎo)數(shù),而且是前后差分導(dǎo)數(shù)都計(jì)算出來,做對比,取絕對值小的那一個(gè)作為導(dǎo)數(shù)。因?yàn),很容易理解,如果某個(gè)差分取在了間斷點(diǎn)的兩側(cè),一定很大。另一個(gè)較小的
;8#6da, N]yT/8 就是在間斷點(diǎn)同側(cè)取的。數(shù)學(xué)上來說,相當(dāng)于左右導(dǎo)數(shù)。
;jxX