Voro + +学习笔记 single_cell

Voro + +例子目录

= = = = = = = = = = = = = = = = = = = = = = = =
这些目录包含使用voro++代码的示例程序,它们被分成六个部分:
basic -它包含几个简单的脚本,这些脚本介绍了这个基本类并执行简单的操作,例如构造一个单元格,或者在一个盒子中对少量随机粒子进行Voronoi镶嵌。
wall -这些程序演示了如何使用wall对象,在非标准几何图形中计算Voronoi单元。
custom——这些程序演示了如何自定义库的输出,以包含有关计算的Voronoi单元的各种不同统计信息。
还证明了粒子的多分散填料的自由基镶嵌。
interface-这些程序演示了库的c++接口的特性。
extra——包含了用于非标准用途的库的其他应用程序。它还包括一个使用墙壁对象来近似处理不规则边界的例子。
timing-这些代码演示了当“简并”顶点的阶数大于3时的情况,当切割平面与数值公差内的现有顶点对齐时。

single_cell.cpp –构造单个随机Voronoi单元

新建一个win32控制台程序,新建一个执行文件single_cell.cpp如下

// Single Voronoi cell example code
 //
 // Author   : Chris H. Rycroft (LBL / UC Berkeley)
 // Email    : chr@alum.mit.edu
 // Date     : August 30th 2011
 
#include "voro++.hh"
 using namespace voro;

//此函数返回0到1之间的随机浮点数
 double rnd() {return double(rand())/RAND_MAX;}
 
 int main() {
         double x,y,z,rsq,r;
         voronoicell v;
 
         // I初始化Voronoi单元为边长2的立方体,中心
         //在原点
        v.init(-1,1,-1,1,-1,1);
 
         // 用250个随机平面切出像元,这些平面都与原点相距
        // 从原点到球面的近似值的距离
         for(int i=0;i<250;i++) {
                 x=2*rnd()-1;
                 y=2*rnd()-1;
                 z=2*rnd()-1;
                 rsq=x*x+y*y+z*z;
                 if(rsq>0.01&&rsq<1) {
                         r=1/sqrt(rsq);x*=r;y*=r;z*=r;
                         v.plane(x,y,z,1);
                 }
         }
 
         // 输出的Voronoi单元到一个文件中,在gnuplot的格式
         v.draw_gnuplot(0,0,0,"E:\\voro++\\voroSingle_cell\\single_cell.gnu");
 }

编译single_cell.cpp,发现缺少一堆文件,此时我们不通过cmake库的方式编译voro++,而是按照缺什么补什么的方式
下载voro++库的文件包,把src文件考到single_cell.cpp所在的目录下面,添加现有项voro++.cc和voro++.hh
然后修改包含的头文件为

#include "src\voro++.hh"
 using namespace voro;

搞定。

本示例演示了voronoicell类,它通过对随机定向的平面进行切割来创建单个Voronoi细胞。所有平面距离像元中心的距离为0.5。

在第7行,包含库的源代码,在第11行,定义了一个小函数,该函数使用rand()标准例程返回介于0和1之间的浮点数。当主循环开始时voronoicell ,尽管它保持为空,但声明了几个变量并创建了一个类。在第19行,将其初始化为以原点为中心,边长为2的立方体。

在第23到32行中,通过选择x,y和z坐标在-1至1范围内的250个随机点来切割像元 。对于每个点,都会计算该点的平方半径。如果介于0.01和1之间,则将重新缩放该点,使其具有半径1。然后在这些点的每一个上应用平面切割。

在第35行,以免费软件绘图程序Gnuplot可以读取的格式将计算出的单元格输出到文件“ single_cell.gnu” 。该文件分为以下几行:
在这里插入图片描述
每组线对应于Voronoi单元的相邻边的子集。对于上面的示例,从(x_0,y_0,z_0)到(x_1,y_1,z_1)和(x_1,y_1,z_1)到(x_2,y_2,z_2)画了两条线。可以使用以下命令在Gnuplot中可视化输出文件:
splot “single_cell.gnu” with lines
Gnuplot输出如上所示。应当注意,上面显示的单元中的所有顶点都具有阶数3,因此它们正好连接到其他三个顶点。对于通过随机方向的平面创建像元的情况,几乎总是如此。高阶顶点要求平面切割与现有顶点相交。该代码支持此行为,并在简并 示例中对其进行了讨论。

顶点数量的增加会导致形状更加复杂,从而趋于成为圆形。细胞的体积趋向于具有单位直径的球体的体积。

E:\voro++\voroSingle_cell\single_cell.gnu,是我输出的文件地址,以相对路径输出。
在这里插入图片描述
我安装的gnuplot是“gnuplot 5.0pathlever” 版本
打开后,输入 splot “E:\voro++\voroSingle_cell\single_cell.gnu” with line
在这里插入图片描述
**加粗样式
如图所示,成功了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值