Fortran Coder

标题: 生成随机大小的球体问题 [打印本页]

作者: Poseidon    时间: 2017-1-2 19:42
标题: 生成随机大小的球体问题
本帖最后由 Poseidon 于 2017-1-2 19:44 编辑

我想在一个确定的空间范围内生成很多个半径在一定范围内随机变化的球体,对填充率有要求(填充率要达到50%左右,填充率=球体总体积/空间体积),目前我的思路是:第一步:先在空间随机生成一个点,作为第一个球的球心坐标,再在要求的半径范围内随机生成第一个球体的半径;

第二步:然后再随机生成一个坐标,计算这个坐标到所有已经生成的球心的距离,并找出这个距离的最小值;
第三步:根据最小值与最小值对应的球体的半径的差值判断新生成的点的位置,如果差值小于要求的最小半径,则舍弃这个点,重新生成,若差值大于要求的最大半径,则在要求的半径范围内随机生成半径,若差值在最小半径和最大半径之间,则令这个差值为这个球体的半径,继续下一个循环;
第四步:计算所有球体的体积和体积填充率,若满足要求退出大循环,并输出数据。

现在这个程序效率虽然存在问题,但能运行,就是填充率一直上不去,好像在10%左右,请问各位大神,如何改进或者说有没有更好一点的算法,先谢过!
(补充一下:空间范围X*Y*Z = 8*6*5, 半径变化范围0.15~0.5)

作者: li913    时间: 2017-1-2 22:53
(4/3*pi*R^3)/(8*R^3)=0.5236
也就是说,即使你排得满满的,也才0.52。
作者: Poseidon    时间: 2017-1-3 09:04
li913 发表于 2017-1-2 22:53
(4/3*pi*R^3)/(8*R^3)=0.5236
也就是说,即使你排得满满的,也才0.52。

额, 这个倒没仔细算过,看来球的位置不能随机排布了。。
作者: Poseidon    时间: 2017-1-10 15:43
经过多次试验, 这种方法很难达到目的,,目前我已经换算法了。。。。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2