提要

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 - http://blog.project-retrograde.com/2013/05/marching-squares/

Marching squares Wiki

Marching Squares, partitioning space - http://catlikecoding.com/unity/tutorials/marching-squares/

Metaballs and Marching Squares - http://jamie-wong.com/2014/08/19/metaballs-and-marching-squares/

The Marching cube - http://users.polytech.unice.fr/~lingrand/MarchingCubes/algo.html#msAmb

Metaballs II - http://www.paulsprojects.net/metaballs2/metaballs2.html

Marching squares & Marching cubes的更多相关文章

  1. Marching squares 算法 获取轮廓(contour tracing)

    https://en.wikipedia.org/wiki/Marching_squares  http://blog.csdn.net/coolingcoding/article/details/1 ...

  2. 创建Mesh->格子地图转NavMesh->可破坏墙壁

    1. 前言     最近连续做了很多代码动态生成Mesh的工作,从动态生成修改瞄准范围的Mesh到可破坏的墙壁,以及之前写了一半导航网格生成.     想借此机会整理下最近的积累,如果在阅读过程中发现 ...

  3. recast 生成navmesh主要流程

    参考:      critterai  http://www.critterai.org      recast & Detour https://github.com/recastnavig ...

  4. unity读取灰度图生成等值线图

    准备灰度图 grayTest.png,放置于Assets下StreamingAssets文件夹中.   在场景中添加RawImage用于显示最后的等值线图.   生成等值线的过程,使用Marching ...

  5. canvas绘制图像轮廓效果

    在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果.  发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...

  6. 水泡动画模拟(Marching Cubes)

    Marching Cubes算法是三维离散数据场中提取等值面的经典算法,其主要应用于医学领域的可视化场景,例如CT扫描和MRI扫描的3D重建等. 算法主要的思想是在三维离散数据场中通过线性插值来逼近等 ...

  7. 移动立方体算法(Marching cubes algorithm)

    百度百科: 医学图像三维重建的方法主要有两大类:一类是三维面绘制,另一类是三维体绘制.体绘制能够更真实地反映物体结构,但由于其运算量大,即使利用高性能的计算机也无法满足实际应用中交互操作的需要.因此, ...

  8. 图像数据到网格数据-1——Marching Cubes算法的一种实现

    概述 之前的博文已经完整的介绍了三维图像数据和三角形网格数据.在实际应用中,利用遥感硬件或者各种探测仪器,可以获得表征现实世界中物体的三维图像.比如利用CT机扫描人体得到人体断层扫描图像,就是一个表征 ...

  9. Marching Cube

    GPU-Marching-Cubes An Implementation of the Marching Cubes[1] Algorithm Marching Cubes Matlab The St ...

随机推荐

  1. 正确的缩写document。querySelector

    北京的夕阳,伴随淡淡的霾殇.从写字楼望去,光线是那么昏黄.没有孤雁,也没有霞光,遥想当年,还是 jQuery 独霸一方.那时的我们,写程序都习惯了使用 $,至少在对美元符号的喜爱上,与 PHP 达成了 ...

  2. LocalDateTime相关处理,得到零点以及24点值,最近五分钟点位,与Date互转,时间格式

    最近一直使用LocalDateTime,老是忘记怎么转换,仅此记录一下 import java.time.Instant; import java.time.LocalDateTime; import ...

  3. docker(一):docker是什么?

    认识容器:docker入门篇 docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚 ...

  4. [转]"RDLC"报表-参数传递及主从报表

    本文转自:http://www.cnblogs.com/yjmyzz/archive/2011/09/19/2180940.html 今天继续学习RDLC报表的“参数传递”及“主从报表” 一.先创建D ...

  5. Java中的synchronized

    学习 https://blog.csdn.net/a158123/article/details/78607964 以及 https://www.cnblogs.com/beiyetengqing/p ...

  6. jquery对象与DOM对象的转化(简化版):

    1:DOM对象 var apple = document.getElementById('apple'); 2:jquery对象 var _apple = $('#apple'); 3:DOM对象=& ...

  7. 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中<meta-data>变量的值

    转载请说明来源: http://www.cnblogs.com/lizhilin2016/p/7390079.html 最近lz 在开始做一个新的Demo, 在项目中集成了bugly用于收集项目中的崩 ...

  8. Java code List Map, HashMap, JSON parser snippet

    package com.newegg.ec.solr.eventsalestoreservice.tuple; import kafka.message.MessageAndMetadata; pub ...

  9. 【PostgreSQL-9.6.3】修改监听的IP和端口

    在数据目录下编辑postgresql.conf文件,我的数据目录是/usr/local/pgsql/data vi postgresql.conf 找到如下内容: ... #listen_addres ...

  10. react基础篇二

    组件 & Props & 生命周期 组件可以将UI切分成一些独立的.可复用的部件,这样你就只需专注于构建每一个单独的部件. 组件从概念上看就像是函数,它可以接收任意的输入值(称之为“p ...