可视化学习:作业3(1)(marchingcubes算法)

  • 本文为我在KTH学习Visualization这门课的作业,涉及到的知识点我在这篇note3,note4有记录。课程简介链接在这儿
  • 由于本文是在国外发布的,在国内阅读文章时可能会出现没有图片的现象,目前我还没有找到好的解决办法,好像CSDN就是这样。所以解决办法就是翻墙~

第一题

这个题目主要是对下面这几个cubes应用marching cubes的算法,划分isosurface(等值面),并且写出它属于哪一类(cube的每一个角都有大于和小于isovalue这两种可能,因此总共是2^8=256类,除去对称和旋转等相似性,一共是15种)。我在做题的时候查了很多资料,发现网上可视化的资料实在不多,即便是讲了marching cubes的算法,也都没有很好的解释到底怎么应用。

我们要做的是把这九个立方体按下面的类别归类,然后画isosurface和triangles。

下面给出我的答案:

对于ambiguity的处理上,我的解法是仿照2D的Marching squares的asymptotic decider的以下推倒:

把它推广到3D,并且通过编程实现计算:

扫描二维码关注公众号,回复: 3716852 查看本文章

每个cube一共8个顶点,所以一共有2^8=256种情况,刨去旋转,对称等重复情况,一共还有15种,这其中有一部分存在ambiguity,其他没有ambiguity(下图圆圈中即为所有有ambiguity的情况)。

然而这样做处理ambiguity是显示完全错误的。因为整个推倒过程虽然没错,我们也能够从上面的运算中得到三维的渐近线交点的f值β。问题是二维中,已知渐近线交点的值后如何画等值线就是唯一可求的,而三维中不能做这样的推广--由渐近线交点值我们没法画出等值面。三维情况要比二维复杂得多,我们没有办法随意做推广。

那么marching cubes到底要怎么做?以下两点比较重要:

①把三维降到二维,从每个面看是否存在ambiguity(六个面),在有ambiguity的地方用二维的amsyptotic decider进行判断,都做好后,连接在一起。

二维的判断公式,渐近线中点值,为:

②确定surface后,画三角形,并没有limimtation,只要选择最好画的即可。

以下是更正后的答案,前两个cubes不存在ambiguity,所以上面的答案没错,不再赘述:

猜你喜欢

转载自blog.csdn.net/m0_37622530/article/details/82792173
今日推荐