Marching cubes

提要

Marching squares 主要是用于从一个地图(用二维数组表示)生成轮廓的算法。Marching cubes则对应的是在空间生成网格的方法。最常见的应用就是天气预报中气压图的生成,还常用于随机地形的生成。

Marching squares

先说算法步骤。

(1)输入是一个Scalar grid,它是一张二维的表。

这张表可以从一张二维图像生成,也可以从高度图生成等等。每个顶点对应一个Scalar值。

(2)接下来要做的就是将顶点值和与一个标准值σ 相减,得到一张 +/- grid。这里令σ = 5,得到的表如下:

其中被标黑的点叫做Positive点,没有被标黑的叫做Negative点。

(3)接下来是轮廓生成。grid中相邻的四个顶点就是一个cell,对于每一个cell,根据顶点的positive和negative,一共有2^4 = 16种情况。

这16中情况对应于轮廓线的绘制也有16中情况。这里在每个cell的每条边都插入了Midpoint。

通过连接cell的中点,就可以绘制轮廓了。

将第二步生成的 +/- grid生成轮廓线得到结果如下

(4) 通过插值修正轮廓

这里要做的修正主要是通过线性差值将轮廓线绘制得更加精确一些。现在的轮廓线经过的都是cell的midpoint,实际上要经过的是σ 所在的位置,这个位置通过线性差值就可以取得。最终得到的结果如下

算法的流程归纳如下

算法的伪代码如下:

2D Ambiguity

对于第8和第12种cell,有两种生成轮廓的方式,这样就会产生随机性。

同样的两种分布,会出现两种轮廓

但是,这两种情况并不能说是error,它还是符合轮廓的特性。

Marching cubes

Marching cubes其实就是将算法扩展到三围空间,cell变成了cube。相比于squar划分的16种方法,cube有2^8 = 256 种情况,但是可以简化为下面的22种情况,另外的可以通过旋转来得到。

这个算法常用于生成一些医学图像。

还有一个很有趣的东西叫做Metaballs,,用的也是这个算法。

参考

Squares Made for Marching –

Marching squares Wiki

Marching Squares, partitioning space –

Metaballs and Marching Squares –

The Marching cube -~lingrand/MarchingCubes/algo.html#msAmb

Metaballs II –

版权声明:本文为博主原创文章,未经博主允许不得转载。

经验是由痛苦中粹取出来的

Marching cubes

相关文章:

你感兴趣的文章:

标签云: