做题了:随机产生不相交的球# JobHunting - 待字闺中b*v2010-10-30 07:101 楼有一个圆柱体,半径为R,高为H. 现在要在里面随机产生N个半径为r1,以及N个半径为r2的小球。要求这些小球必须在圆柱体内,而且互不相交。一共需要M个sample。请给出快速有效的算法。
y*n2010-10-30 07:103 楼does that mean M = 2*N?【在 b******v 的大作中提到】: 有一个圆柱体,半径为R,高为H. 现在要在里面随机产生N个半径为r1,以及N个半: 径为r2的小球。要求这些小球必须在圆柱体内,而且互不相交。一共需要M个sample。: 请给出快速有效的算法。
r*d2010-10-30 07:104 楼我写下我的思路, 看看行不行题目就是要随机产生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 就长了, 应该可以继续优化