找回密码
 注册
Simdroid-非首页
查看: 3545|回复: 62

[工程实例] 如何用clump/cluster建立不规则形状的颗粒簇?

[复制链接]
发表于 2011-11-9 09:18:21 | 显示全部楼层 |阅读模式 来自 湖南长沙
学习了pfc以后,对该问题很有兴趣,也看了很多文献,很多人做出了很漂亮的模拟,这是一个日本人做的,他模拟了cobble stone的角度和宽度对稳定性的影响。cobble stone/block stone应该是用cluster/clump的方法建立的,不知道有没有高手做过这方面的研究,求指教!

下面这个是个葡萄牙的人做的,模拟了圆形和不规则形状,他的步骤是先建出wall模型,然后往wall模型中填充不规则体,最后再填充颗粒。建墙体模型时是不是得把wall全手工写出来啊?那多麻烦啊!希望能有很多人一起讨论,然后汇总到一起写一个这方面的说明,帮助更多想应用pfc的人尽快上手,要知道pfc学起来真不是一件容易的事啊!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

 楼主| 发表于 2011-11-21 10:47:13 | 显示全部楼层 来自 湖南长沙
Simdroid开发平台
本帖最后由 chncsu 于 2011-11-22 10:49 编辑
ccb137731 发表于 2011-11-9 11:33
我和师兄以前做过类似模拟,大致思路如下:
1.将颗粒(直径小于对变形)填满整个空间;
2.导入多边形形状的 ...

你指的是不是这样的集料颗粒?
我看了一篇论文里有关于不规则颗粒的随机生成方法,它首先生成随机圆,然后再在圆周上找到N个点作为多边形的顶点,构造任意多边形。关于这一节我贴在后面,供各位参考,我对其实现有一些疑惑,希望能够得到帮助:1、判断随机圆与圆之间的算法怎样实现比较节省计算量呢?
2、找到了多边形的顶点以后,如何在多边形中生成颗粒集合呢?如何定义多边形内颗粒与不属于多边形内的那些填充颗粒的区别?
附录:骨料单元随机生成技术及相应的程序设计
已知条件:(1)区域范围,假设为矩形,长度L,宽度B,左下角坐标为(Xo,Yo);
(2)颗粒粒经范围:最小集料粒径Dmin和最大集料粒径Dmax。为了能够按照不同的颗粒级配生成不同形状的集料单元,本研究提供一种按照正态分布随机生成集料颗粒的算法。算法设计步骤如下:
1设计正态随机分布函数:double rand(){},该函数可以用来产生符合正态分布的随机数。
2 随机产生集料颗粒外接圆圆心Xc,Yc和半径radius,产生办法如下:Xc=Xo+B*rand();Yc=Yo+B*rand()
3把当前产生的集料颗粒外接圆加入到相应的数据链表中,并检查是否与链表中的其它外接圆发生相互嵌入。如果嵌入发生,说明新产生的圆与已经产生的圆在几何位置上发生冲动,其中之一必须更改。本文更改新产生的单元,即返回步骤2重新产生外接圆的几何位置和半径。
4 遍历如上圆对象,在其上任取n点,其中第i个点的坐标按如下公式确定:Xi=Xc+radius*cosa;Yi=Yc+radius*sina;其中,a为随机生成的角度。
  通过以上四步就可以根据颗粒级配随机生成任意形状的多变性集料。但值得注意的是在第3步中,判断是否发生叠合时,应采用一定的方法减少邻近单元查找所需的花费。本文采用的是邻近元查找的“区域法”,程序的详细内容请参考源程序。
range name ran0 line origin 0.03767190.0330841 normal -0.002734 -9.33939e-005 &
lineorigin 0.0378553 0.0277124 normal -0.000301691 0.00285886 &
lineorigin 0.0328064 0.0271796 normal 0.00288233 0.00229803 &
lineorigin 0.0314873 0.0288341 normal 0.00323619 -0.000501549 &
lineorigin 0.0320986 0.0327788 normal 0.000815492 -0.00304106 &
lineorigin 0.0363287 0.0339131 normal -0.00197112 -0.00319373  
range name ran1 line origin 0.08357480.0130893 normal -0.0048475 -0.00361564 &
lineorigin 0.0857566 0.0101642 normal -0.00499581 0.00134589 &
lineorigin 0.0838713 0.00316624 normal -0.00226338 0.0055719 &
lineorigin 0.0802917 0.00171217 normal 0.00194885 0.00542944 &
lineorigin 0.0754468 0.00345118 normal 0.00469618 0.00036361 &
lineorigin 0.074797 0.0118438 normal 0.000632185 -0.00445545  
range name rani line origin 0.01900860.0491907 normal -0.00645588 0.00188044 &
lineorigin 0.0172743 0.0432366 normal -0.0016161 0.00593858 &
lineorigin 0.00932899 0.0410744 normal 0.00458417 0.00496146 &
lineorigin 0.00487375 0.0451909 normal 0.00675381 -0.000129118 &
lineorigin 0.0049897 0.0512556 normal 0.00188529 -0.00498192 &
lineorigin 0.0146108 0.0548965 normal -0.00512414 -0.00394948
;…………………….; many similarities are neglected



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 1 不支持 0

使用道具 举报

发表于 2011-11-12 14:51:32 | 显示全部楼层 来自 浙江杭州
有没有葡萄牙人和日本人做的论文啊,我想详细参考一下。以后我们可以好好探讨,我也是在做这个,就是遇到这个问题的
回复 1 不支持 0

使用道具 举报

发表于 2011-11-9 11:33:43 | 显示全部楼层 来自 江苏南京
我和师兄以前做过类似模拟,大致思路如下:
1.将颗粒(直径小于对变形)填满整个空间;
2.导入多边形形状的各个顶点坐标;
3.将多边形覆盖的颗粒进行标记,作为等效于多边形的颗粒簇;
4.将标记好的颗粒提取出来便可以实现模拟不规则的多边形。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-11-12 18:14:58 | 显示全部楼层 来自 江苏南京
liangpingf 发表于 2011-11-12 14:51
有没有葡萄牙人和日本人做的论文啊,我想详细参考一下。以后我们可以好好探讨,我也是在做这个,就是遇到这 ...

这个我没有,你直接问楼主吧!
回复 不支持

使用道具 举报

发表于 2011-11-15 10:44:02 | 显示全部楼层 来自 清华大学
期待好的idea
回复 不支持

使用道具 举报

发表于 2011-11-19 12:24:32 | 显示全部楼层 来自 台湾
是否可請ccb137731分享一下您說的fish
有简单範例參考更好~感謝
回复 不支持

使用道具 举报

发表于 2011-11-19 15:08:33 | 显示全部楼层 来自 四川绵阳
我现在做的就是卵石,多边形好有难度哦
回复 不支持

使用道具 举报

 楼主| 发表于 2011-11-21 09:58:42 | 显示全部楼层 来自 湖南长沙
daishisara 发表于 2011-11-19 15:08
我现在做的就是卵石,多边形好有难度哦

你卵石如何考虑的呢?级配?
回复 不支持

使用道具 举报

发表于 2011-11-21 14:53:06 | 显示全部楼层 来自 江苏南京
chncsu 发表于 2011-11-21 10:47
你指的是不是这样的集料颗粒?这个得把多边形的边界都搞出来一个个输进去吧?看到代码我就晕了
range na ...

请问,您的不规则形状族的几种几何外面,是预先一个个定好的么?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-11-21 15:19:30 | 显示全部楼层 来自 湖南长沙
actcoolly 发表于 2011-11-21 14:53
请问,您的不规则形状族的几种几何外面,是预先一个个定好的么?

不是呃,上面那个人做的是随机生成的。
回复 不支持

使用道具 举报

发表于 2011-11-21 15:33:54 | 显示全部楼层 来自 大连理工大学
lz对建立clump有总结出来吗?我一直不得其法
回复 不支持

使用道具 举报

发表于 2011-11-21 17:58:43 | 显示全部楼层 来自 江苏南京
本帖最后由 ccb137731 于 2011-11-21 17:59 编辑

之前我师兄做过的颗粒形状模拟有两种方法,第一种比较粗燥,第二种比较精确。
第一种:
1.根据颗粒级配随机生成球,然后消除球之间的不平衡力。
2.随机选取球边缘的一点为起点,随机生成多边形的边数,根据遍数随机生成角度(去除不合理的角度),如此以球的边界上的各点组成随机多边形。
3.在多边形内部生成与边相切的多边形的小颗粒,组成clump
第二种:(就是之前说过的)
1.将颗粒(直径远小于多边形)填满整个空间;
2.导入多边形形状的各个顶点坐标;
3.将多边形覆盖的颗粒进行标记,作为等效于多边形的颗粒簇;
4.将标记好的颗粒提取出来便可以实现模拟不规则的多边形。
5.根据颗粒级配生成圆形颗粒,消除之间的不平衡力
6.最后用实现保存好的多边形颗粒簇,按照直径等效原则替代。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-11-28 09:01:14 | 显示全部楼层 来自 湖南长沙
hanyuer 发表于 2011-11-21 15:33
lz对建立clump有总结出来吗?我一直不得其法

创建聚粒
另一种形成非均匀形态颗粒的方法就是是使用聚粒。聚粒和颗粒簇的不同之处在于,形成聚粒的颗粒之间的粘结不会发生破坏,即整个聚粒可以看做一个超级颗粒。

首先,在一个空间中生成指定孔隙比的圆颗粒组;然后每个颗粒转化成同体积同质量的聚粒;最后聚粒组逐步达到平衡。其核心程序就是,先分别生成某聚粒的各个组员,然后使用命令

clumpclp= cl_add(null,_b1)
ii = cl_add(clp,_b2)

形成CLUMP,然后通过以下语句使聚粒组达到平衡状态:

loop i (1,100)
command
cyc 5
end_command
clp = clump_head
loop while clp # null
cl_xvel(clp) = 0.0
cl_yvel(clp) = 0.0
cl_rvel(clp) = 0.0
clp = cl_next(clp)
end_loop
end_loop
回复 不支持

使用道具 举报

发表于 2012-5-4 17:19:59 | 显示全部楼层 来自 香港
chncsu 发表于 2011-11-28 09:01
创建聚粒
另一种形成非均匀形态颗粒的方法就是是使用聚粒。聚粒和颗粒簇的不同之处在于,形成聚粒的颗粒 ...

这个是那个形成两个ball单元凝聚后形成的聚粒 的 命令
clumpclp= cl_add(null,_b1)
ii = cl_add(clp,_b2)
但是如果说是为了生成3个或者以上颗粒 生成CLUMP时候,有什么好的例子命令吗?

谢谢!
回复 不支持

使用道具 举报

发表于 2012-5-7 11:07:09 | 显示全部楼层 来自 四川成都
大家好,给你们分享个生产多面体的文献,肯爹啊,我没权限上传!!!!
回复 不支持

使用道具 举报

发表于 2012-5-7 15:49:30 | 显示全部楼层 来自 山东青岛
:):):):):):)
回复 不支持

使用道具 举报

发表于 2012-5-14 13:03:10 | 显示全部楼层 来自 湖北武汉
chncsu 发表于 2011-11-21 10:47
你指的是不是这样的集料颗粒?
我看了一篇论文里有关于不规则颗粒的随机生成方法,它首先生成随机圆,然后 ...

这种算法生成的颗粒过于粗糙,以前我用图像扫描的方法也做过,其实也不太好,精度不够。大家没有更为好的方法。
回复 不支持

使用道具 举报

发表于 2012-9-23 21:28:51 | 显示全部楼层 来自 上海
ccb137731 发表于 2011-11-12 18:14
这个我没有,你直接问楼主吧!

版主,请问矩形区域里面的ball转换成cluster的方法是怎样的,能不能共享下,不胜感激。。。实在是做不出来好多天了。。。
回复 不支持

使用道具 举报

发表于 2012-10-30 16:30:01 | 显示全部楼层 来自 广东深圳
l6楼能说一下文献的名字么?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-19 21:01 , Processed in 0.063191 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表