三维模型的泰森多面体离散

这里用到了voro++。
http://math.lbl.gov/voro++/about.html


#include "voro++.hh"
#include "container.hh"
#include "cell.hh"
#include "fstream"
using namespace voro;const double pi=3.1415926535897932384626433832795;void draw_cvt_cells_with_volume(container &con,std::string filename);int main() {double x,y,z,evol,vvol;// Create a container with the geometry given above, and make it// non-periodic in each of the three coordinates. Allocate space for// eight particles within each computational block.container con1(-1.2,1.2,-1.2,1.2,0,1,14,14,7,false,false,false,8);container con2(-1.2,1.2,-1.2,1.2,0,1,14,14,7,false,false,false,8);container *conPtr[2];conPtr[0]=&con1;conPtr[1]=&con2;// Add a cylindrical wall to the containerwall_cone cone(0,0,2,0,0,-1,atan(0.5));con1.add_wall(cone);con2.add_wall(cone);//parametersint np=10000;int nts=11;double **coord = new double*[np];double *arr = new double(np*3);for(int i=0;i<np;i++){coord[i]=&arr[i*3];}int cnt=0;while(cnt<np){x=-1+(rand()*1.0/RAND_MAX)*2;y=-1+(rand()*1.0/RAND_MAX)*2;z=0+(rand()*1.0/RAND_MAX)*1;if(conPtr[1]->point_inside(x,y,z)){conPtr[1]->put(cnt++,x,y,z);}}// iterationvoronoicell vorocell;double cx,cy,cz;std::vector<double> vts;//// 省略进行CVT迭代//conPtr[0]->draw_particles("frustum_p.pov");
//    conPtr[0]->draw_particles_pov_with_volume("frustum_p.pov");conPtr[0]->draw_cells_pov("frustum_v.pov");draw_cvt_cells_with_volume(*conPtr[0],"test.csv");evol=pi*1*(0.5*0.5+0.5*1+1*1)/3;vvol=conPtr[0]->sum_cell_volumes();printf("Exact frustum volume : %g\n""Voronoi cell volume  : %g\n""Difference           : %g\n",evol,vvol,vvol-evol);delete [] &coord[0][0];delete [] &coord[0];
}void draw_cvt_cells_with_volume(container &con,std::string filename){c_loop_all cellIter(con);std::ofstream out(filename);int cnt=0;out<<"id,x,y,z,r"<<std::endl;if(cellIter.start()){double *pp;voronoicell vorocell;double c = 3.0/4.0/3.14151926535;double r;if(cellIter.start()) do {con.compute_cell(vorocell,cellIter);r=pow(c*vorocell.volume(),1.0/3);pp=con.p[cellIter.ijk]+3*cellIter.q;out<<cnt++<<","<<pp[0]<<","<<pp[1]<<","<<pp[2]<<","<<r<<std::endl;} while(cellIter.inc());}out.close();
}

代码讲解

首先先定义了两个container,并且两个container定义边界,这里定义两个主要是为了迭代的。
然后给两个container加上边界wall,主要是为了实现边界控制。
然后随机在第一个container里面生成点,根据随机生成的点,生成泰森多面体,这时候的泰森多面体,质量不太好,如图

然后进行cvt迭代,具体看论文Centroidal Voronoi Tessellations。
选了个最简单的迭代算法,Lloyd’s Method。随机点生成的泰森多面体,体心与随机点不重合,所以令心生成的体心作为下一次泰森多面体的生成的点,进行迭代十次。然后输出:

这可太好看了吧!!!

迭代前与迭代后的半径范围


Paraview中的离散后的Glyph显示:

三维模型的泰森多面体离散相关推荐

  1. 泰森多面体Voronoi 3D-V5.0 功能介绍

    1 插件启动方式 首先启动Abaqus界面,单击菜单栏AbqVoronoi,点击子菜单中的选项可启动不同的晶体模型生成模块,包括:Voronoi2D模块(生成二维Voronoi模型).Voronoi3 ...

  2. Voronoi晶体插件-6.0版本[新功能介绍]

    5.0版本完整功能介绍: 泰森多面体Voronoi 3D-V5.0 功能介绍_HeroseFans的博客-CSDN博客Abaqus Voronoi3Dhttps://blog.csdn.net/qq_ ...

  3. Voxelization 三维模型体素化

    Voxelization 三维模型体素化 导入mesh文件,以obj文件为例: 一般文件mesh文件内容有顶点与面,可以用三维设计软件生成,生成的时候注意mesh文件只保存三角形面片,以便后面读取 o ...

  4. 离散Laplace-Beltrami 算子

    1.Laplace算子概念及在图像处理中的应用:   在微分几何中,曲面被描述为场,而网格又是离散化的曲面,可以看成是包含了有限个点的离散场,网格上的每个点对其周围的邻居点都是有影响.拉普拉斯方程式是 ...

  5. 工业应用中基于三维模型的6D目标检测综述

    文章名称:A Survey of 6D Object Detection Based on 3D Models for Industrial Applications,J. Imaging | Fre ...

  6. 曲率流的计算机应用,科学网—清华笔记:计算共形几何讲义 (23)离散曲面曲率流 (Discrete Surface Ricci Flow)V - 顾险峰的博文...

    前面我们介绍了离散曲面的曲率流理论,曲面上配备着欧氏度量带有奇异点.这次,我们介绍双曲离散曲面的曲率流理论.对于欧拉示性数为负的曲面,其单值化度量自然是双曲度量.双曲度量具有非常多的优点,因此在工程实 ...

  7. 国产CAE的涅槃-岩土行业高性能离散元软件MatDEM

    作者 | 刘春博士   一.导读 2019年9月11日,ANSYS公司公开宣称:"收购LSTC公司,一举获得其旗下拥有LS-DYNA(结构&流体&电磁的多物理场求解器).LS ...

  8. 如何绘制三维模型——SolidWorks软件使用简介

    在日常的科研学习中,难免会遇到一些需要设计三维模型的场景,比如绘制一个专利装置的模型图.设计一个零件进行加工等,而将我们的设计和想法快速准确地建立成数字模型是这个环节中的重中之重.此次瓦斯小硕将向大家 ...

  9. Abaqus纤维混凝土3D 泡沫混凝土 三维随机几何 三维混凝土细观 多面体骨料建模

    模型实例 以下是Abaqus内纤维混凝土的模型,纤维是采用三维圆柱体模拟的,混凝土内的骨料采用的是实体的球体.纤维及骨料均可设置不同的尺寸,并且各类型的数目不受限制,即可设置多种纤维及球体骨料大小. ...

  10. GIS技巧100例——07ArcGIS三维模型导入Sketchup

    这次GIS思维--GIS技巧100例的第七讲<ArcGIS三维模型导入Sketchup>,这次其实是我们03讲<ArcGIS导入Sketchup模型>的衍生篇. 1. 我们主要 ...

最新文章

  1. input输入系统中是如何实现按键重复
  2. C#中关键字ref和out
  3. delphi oracle新建用户,Delphi 中如何用另外一个用户的身份来运行一人程序
  4. Kubernetes 下零信任安全架构分析
  5. 【网址收藏】如何设置node.js存储路径:node缓存、数据目录
  6. 浅谈:数据结构之单链表,java代码演示单链表
  7. jq之animate() left font
  8. 玩转POI、EasyExcel报表导入导出!
  9. PHP array_map()
  10. HDU1263 水果【map】
  11. Tomcat配置两个应用服务
  12. Idea的svn新建分支,切换分支,合并分支
  13. Eucalyptus 云计算
  14. STM32 tjpgd软件JPEG解码后RGB888数据格式问题
  15. r library car_R 语言教程:方差分析与多重比较
  16. psd导出jpg太大_PSD源文件、导出JPG\PNG格式文件过大解决办法
  17. 【其他】VirtualBox压缩磁盘占用空间
  18. 怎样将html文件生成桌面动态壁纸,利用自定义桌面和HTML打造动态桌面图标
  19. Python Crash Course读书笔记 - 第19章:USER ACCOUNTS
  20. 部署Kubernetes kube-apiserver启动失败

热门文章

  1. java ssl 双向认证_Java实现SSL双向认证的方法
  2. 从零开始 了解C++
  3. 手机CPU天梯图2018年5月最新版
  4. PostgreSQL:六. PostgreSQL函数
  5. 【程序员高考】2018年全国统一高考程序员试卷
  6. C# ZXing.net解码测试(QRCode、DataMatrix、1D-Barcode一维码条码)
  7. 道教的精神———闻一多
  8. 携程Java后台开发三面面经
  9. 安装ruby1.9.3-p0及redmon来监控redis
  10. android 侧滑栏教程,Android控件开发——DrawerLayout侧滑菜单的实现