b******v 发帖数: 1493 | 1 有一个圆柱体,半径为R,高为H. 现在要在里面随机产生N个半径为r1,以及N个半
径为r2的小球。要求这些小球必须在圆柱体内,而且互不相交。一共需要M个sample。
请给出快速有效的算法。 | c***8 发帖数: 188 | 2 can you show us an example? | y*******n 发帖数: 129 | 3 does that mean M = 2*N?
【在 b******v 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 有一个圆柱体,半径为R,高为H. 现在要在里面随机产生N个半径为r1,以及N个半 : 径为r2的小球。要求这些小球必须在圆柱体内,而且互不相交。一共需要M个sample。 : 请给出快速有效的算法。
| r******d 发帖数: 308 | 4 我写下我的思路, 看看行不行
题目就是要随机产生M个坐标为(x.y.z)的球
坐标原点为圆柱体下表面的圆心。
满足:
(1)球在圆柱里面:
高度方向约束:
0
0
半径方向约束是小球到圆柱轴线的距离比R-r小, 即:
sqrt(x*x+y*y) < R-r
(2)小球互相不相交,
对于任意两个小球, 两小球之间的距离大于(r1+r2):
sqrt( (x1-x2)^2+(y1-y2)^2 ) ) < r1-r2
那我能够想到的方法就是call c 的random(range) , 产生随即的数(x, y, z), 如果
不满足以上的条件, 就继续产生新的随机数。。。。
不过如果新产生的随机数总是不在满足的范围那个loop 就长了, 应该可以继续优化 |
|