第一题
这个题目主要是对下面这几个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,所以上面的答案没错,不再赘述: