Fortran Coder

查看: 5082|回复: 3
打印 上一主题 下一主题

[通用算法] 生成随机大小的球体问题

[复制链接]

6

帖子

1

主题

0

精华

入门

F 币
69 元
贡献
42 点
跳转到指定楼层
楼主
发表于 2017-1-2 19:42:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Poseidon 于 2017-1-2 19:44 编辑

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

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

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

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2017-1-2 22:53:05 | 只看该作者
(4/3*pi*R^3)/(8*R^3)=0.5236
也就是说,即使你排得满满的,也才0.52。

6

帖子

1

主题

0

精华

入门

F 币
69 元
贡献
42 点
板凳
 楼主| 发表于 2017-1-3 09:04:40 | 只看该作者
li913 发表于 2017-1-2 22:53
(4/3*pi*R^3)/(8*R^3)=0.5236
也就是说,即使你排得满满的,也才0.52。

额, 这个倒没仔细算过,看来球的位置不能随机排布了。。

6

帖子

1

主题

0

精华

入门

F 币
69 元
贡献
42 点
地板
 楼主| 发表于 2017-1-10 15:43:38 | 只看该作者
经过多次试验, 这种方法很难达到目的,,目前我已经换算法了。。。。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-26 16:52

Powered by Tencent X3.4

© 2013-2024 Tencent

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