开启辅助访问 切换到窄版
搜索

Fortran Coder

 找回密码
 极速注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

[复制链接]

生成随机大小的球体问题

Poseidon 发表于 2017-1-2 19:42:00 查看217 回复3 阅读模式
本帖最后由 Poseidon 于 2017-1-2 19:44 编辑

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

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

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

使用道具 举报

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

额, 这个倒没仔细算过,看来球的位置不能随机排布了。。
Poseidon  楼主 发表于 2017-1-10 15:43:38
经过多次试验, 这种方法很难达到目的,,目前我已经换算法了。。。。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则 长代码粘贴

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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