Marching squares & 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 - 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的更多相关文章
- Marching squares 算法 获取轮廓(contour tracing)
https://en.wikipedia.org/wiki/Marching_squares http://blog.csdn.net/coolingcoding/article/details/1 ...
- 创建Mesh->格子地图转NavMesh->可破坏墙壁
1. 前言 最近连续做了很多代码动态生成Mesh的工作,从动态生成修改瞄准范围的Mesh到可破坏的墙壁,以及之前写了一半导航网格生成. 想借此机会整理下最近的积累,如果在阅读过程中发现 ...
- recast 生成navmesh主要流程
参考: critterai http://www.critterai.org recast & Detour https://github.com/recastnavig ...
- unity读取灰度图生成等值线图
准备灰度图 grayTest.png,放置于Assets下StreamingAssets文件夹中. 在场景中添加RawImage用于显示最后的等值线图. 生成等值线的过程,使用Marching ...
- canvas绘制图像轮廓效果
在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果. 发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...
- 水泡动画模拟(Marching Cubes)
Marching Cubes算法是三维离散数据场中提取等值面的经典算法,其主要应用于医学领域的可视化场景,例如CT扫描和MRI扫描的3D重建等. 算法主要的思想是在三维离散数据场中通过线性插值来逼近等 ...
- 移动立方体算法(Marching cubes algorithm)
百度百科: 医学图像三维重建的方法主要有两大类:一类是三维面绘制,另一类是三维体绘制.体绘制能够更真实地反映物体结构,但由于其运算量大,即使利用高性能的计算机也无法满足实际应用中交互操作的需要.因此, ...
- 图像数据到网格数据-1——Marching Cubes算法的一种实现
概述 之前的博文已经完整的介绍了三维图像数据和三角形网格数据.在实际应用中,利用遥感硬件或者各种探测仪器,可以获得表征现实世界中物体的三维图像.比如利用CT机扫描人体得到人体断层扫描图像,就是一个表征 ...
- Marching Cube
GPU-Marching-Cubes An Implementation of the Marching Cubes[1] Algorithm Marching Cubes Matlab The St ...
随机推荐
- 正确的缩写document。querySelector
北京的夕阳,伴随淡淡的霾殇.从写字楼望去,光线是那么昏黄.没有孤雁,也没有霞光,遥想当年,还是 jQuery 独霸一方.那时的我们,写程序都习惯了使用 $,至少在对美元符号的喜爱上,与 PHP 达成了 ...
- LocalDateTime相关处理,得到零点以及24点值,最近五分钟点位,与Date互转,时间格式
最近一直使用LocalDateTime,老是忘记怎么转换,仅此记录一下 import java.time.Instant; import java.time.LocalDateTime; import ...
- docker(一):docker是什么?
认识容器:docker入门篇 docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚 ...
- [转]"RDLC"报表-参数传递及主从报表
本文转自:http://www.cnblogs.com/yjmyzz/archive/2011/09/19/2180940.html 今天继续学习RDLC报表的“参数传递”及“主从报表” 一.先创建D ...
- Java中的synchronized
学习 https://blog.csdn.net/a158123/article/details/78607964 以及 https://www.cnblogs.com/beiyetengqing/p ...
- jquery对象与DOM对象的转化(简化版):
1:DOM对象 var apple = document.getElementById('apple'); 2:jquery对象 var _apple = $('#apple'); 3:DOM对象=& ...
- 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中<meta-data>变量的值
转载请说明来源: http://www.cnblogs.com/lizhilin2016/p/7390079.html 最近lz 在开始做一个新的Demo, 在项目中集成了bugly用于收集项目中的崩 ...
- Java code List Map, HashMap, JSON parser snippet
package com.newegg.ec.solr.eventsalestoreservice.tuple; import kafka.message.MessageAndMetadata; pub ...
- 【PostgreSQL-9.6.3】修改监听的IP和端口
在数据目录下编辑postgresql.conf文件,我的数据目录是/usr/local/pgsql/data vi postgresql.conf 找到如下内容: ... #listen_addres ...
- react基础篇二
组件 & Props & 生命周期 组件可以将UI切分成一些独立的.可复用的部件,这样你就只需专注于构建每一个单独的部件. 组件从概念上看就像是函数,它可以接收任意的输入值(称之为“p ...