大圆内随机排列不相交的小圆
在大圆内随机排列小圆,大圆半径为0.002475,小圆半径为1.25e-4,且小圆彼此间不能有重合,希望尽可能多排列,用c语言实现,自己写的效率低且只能在其中排300个左右,多了就算不动了,求高手指教!
[解决办法]
用随机数生成圆心(在大圆之内),保存下来。再生成一个圆心,计算与前面所有的圆心距离,如果有小于直径的再重新生成。
不明白为什么算不动呢,300个圆心从头扫到尾也用不了多长。楼主的思路是什么呀,不妨说说。
[解决办法]
395个圆已经把大圆填满了
[解决办法]
半径比=0.002475/1.25e-4=0.002475/0.000125=19.8, 则面积比小于400
[解决办法]
随机数服从均匀分布,当小圆覆盖一定程度之后很难命中空白空间blank space,只剩下一个圆的空间就几乎不可能命中了,因此需要改进随机数生成的方法。
这样可能是个思路:每当生成一个小圆的时候,在他的周围做一个面积最大的外切圆,这就是空白空间,每次先随机选取一个空白,然后在这个空白之内再随机生成一个圆心。
空白被选中的几率应该与空白的面积成正比,而在空白内生成圆心的时候是均匀分布。
所以现在的问题是,画外切圆。