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 ...
随机推荐
- codevs1358棋盘游戏(状压dp)
1358 棋盘游戏 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description 这个游戏在一个有10*10个格子的棋盘上进行,初 ...
- S - New Year Transportation
Problem description New Year is coming in Line World! In this world, there are n cells numbered by i ...
- 前端面试基础-html篇之H5新特性
h5的新特性(目前个人所了解)如下 语义化标签 表单新特性 视频(video)和音频(audio) canvas画布 svg绘图 地理定位 为鼠标提供的拖放API webworker (重点)Stor ...
- bootstrap-paginator基于bootstrap的分页插件
bootstrap-paginator基于bootstrap的分页插件 GitHub 官网地址:https://github.com/lyonlai/bootstrap-paginator 步骤 引包 ...
- android AIDL示例代码(mark下)
1.demo结构图 2.ipcclient Book类. package com.mu.guoxw.ipcclient; import android.os.Parcel; import androi ...
- Eclipse中配置SVN(步骤简述)
————Eclipse中配置SVN(步骤简述)———— 1.有客户端(tortoiseSVN),服务器端(visualSVN) 两种,根据需要安装,安装后需重启电脑 2.服务器端配置:创建版本库(放工 ...
- more-less-cat-tail-head 命令简单分析
区别:cat一次性把文件内容全部显示出来,管你看不看得清,显示完了cat命令就返回了,不能进行交互式 操作,适合察看内容短小.不超过一屏的文件:more比cat强大一点,支持分页显示,你可以ctrl+ ...
- POJ_2186_Popular Cows_强连通分量
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 30680 Accepted: 12445 De ...
- Unicode转换为UTF-8过程Demo
碎碎念:这几天在学习Python对Unicode的支持 上学的时候,计算机基础课上总能听到老师讲什么字节,字符,Unicode,UTF-8吧啦吧啦一堆,反正我是只记住了名字,至于具体这些名字所表达的含 ...
- 使用.Net Core RT 标准动态库
这个文档可以引导你如何通过CoreRT生成一个原生标准的系统动态库让其他编程语言调用. CoreRT 可以构建静态库, 这些库可以在编译时链接或者也可以构建运行时所需的共享库, 创建一个支持CoreR ...