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 ...
随机推荐
- PCB MS CLR 聚合函数 joinString加排序实现
准备着手,动态列SQL查询,要实现动态列SQL,会运用到聚合函数,而SQL本身聚合函数有限, 无满足此用户任意字段组合变化,再加上工艺流程重复相同工序,如;沉铜1,沉铜2对应工序代码都是相同的 而通常 ...
- mysql如何查询最新插入的数据
在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作为其他表的外键,形成“主从表结构”,这是数据库设计中常见的用法.但是在具体生成id的时候,我们的操作顺序一般是:先在 ...
- codevs2594解药还是毒药(状压dp)
2594 解药还是毒药 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Smart研制出对付各种症状的解药,可是 ...
- SpringCloud 之 Fegin —— 发送GET、POST请求以及文件上传
由于项目需要调用其他微服务的数据,首先想到的就是写一个http网络请求的工具类,但是想到在之前看springCloud的时候里面有这个Fegin可以实现,就顺便实践一下,虽然过程有点坎坷,好在都顺利解 ...
- this引用逃逸问题
//this引用逃逸 // 1.构造器还未完成前,将自身this引用向外抛,使其他线程访问这个引用,进而访问到其未初始化的变量,造成问题 // 2.内部类访问外部类未初始化的成员变量 //3.多态继承 ...
- Django:提交表单报错:RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have A
Django:提交表单报错:RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you ...
- Android学习——动态注册监听网络变化
新建一个BroadcastTest项目,然后修改MainActivity中的代码,如下: public class MainActivity extends AppCompatActivity { p ...
- 【Linux】计划任务管理crontab、at
一.计划任务管理 —— crontab 1. crontab 命令 • 按照预先设置的时间周期(分钟.小时.天…… )重复执行用户指定的命令操作,属于周期性计划任务,默认打开“/var/spool/ ...
- 【Oracle】进入sqlplus 删除键backspace时出现^H
当oracle进入sqlplus后,输入命令时候出现错误,我们按平时的习惯使用backspace键删除错误信息,此时会出现^H 解决办法:进入sqlplus之前,使用stty erase '^H'命令 ...
- 用JSP实现动态交互
一.什么是JSP? 1.在HTML中嵌入Java脚本代码 2.由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码 3.然后将生成的整个页面信息返回给客户端 二.为什么需要基于B/S技术的 ...