視覺化學習:作業3(1)(marchingcubes演算法)
第一題
這個題目主要是對下面這幾個cubes應用marching cubes的演算法,劃分isosurface(等值面),並且寫出它屬於哪一類(cube的每一個角都有大於和小於isovalue這兩種可能,因此總共是2^8=256類,除去對稱和旋轉等相似性,一共是15種)。我在做題的時候查了很多資料,發現網上視覺化的資料實在不多,即便是講了marching cubes的演算法,也都沒有很好的解釋到底怎麼應用。
我們要做的是把這九個立方體按下面的類別歸類,然後畫isosurface和triangles。
下面給出我的答案:
對於ambiguity的處理上,我的解法是仿照2D的Marching squares的asymptotic decider的以下推倒:
把它推廣到3D,並且通過程式設計實現計算:
每個cube一共8個頂點,所以一共有2^8=256種情況,刨去旋轉,對稱等重複情況,一共還有15種,這其中有一部分存在ambiguity,其他沒有ambiguity(下圖圓圈中即為所有有ambiguity的情況)。
然而這樣做處理ambiguity是顯示完全錯誤的。因為整個推倒過程雖然沒錯,我們也能夠從上面的運算中得到三維的漸近線交點的f值β。問題是二維中,已知漸近線交點的值後如何畫等值線就是唯一可求的,而三維中不能做這樣的推廣--由漸近線交點值我們沒法畫出等值面
那麼marching cubes到底要怎麼做?以下兩點比較重要:
①把三維降到二維,從每個面看是否存在ambiguity(六個面),在有ambiguity的地方用二維的amsyptotic decider進行判斷,都做好後,連線在一起。
二維的判斷公式,漸近線中點值,為:
②確定surface後,畫三角形,並沒有limimtation,只要選擇最好畫的即可。
以下是更正後的答案,前兩個cubes不存在ambiguity,所以上面的答案沒錯,不再贅述: