例如,受限空间为 100 x 100 x 100 大,每个球的半径为 5,我需要在该空间内的任意位置生成 100 个这样的球,并且不允许重叠。我提出了两种方法:
使用 srand 得到 100 个位置,然后做一个检查删除相互重叠的球(检查两个球中心的距离是否小于半径的两倍),然后生成另一个 x 个球(x 是球的数量已删除)并继续重复该过程,直到 100 个球不重叠。
首先将空间划分为 100 个立方体,然后使用 将每个球放在其分配的立方体内
srand
,这样它们就不会重叠。
我觉得第一种方式在随机方面更合适,但太费时,第二种方式又快又容易,但我不确定随机的想法。而这个模型正试图模拟分子在空气中的位置。也许这两种方法都不好,如果有更好的方法,请告诉我。提前致谢!
编辑:@Will 为我提供了一个与我原来的第一种方法相似但更清洁的选项;每次添加新球时,检查它是否与任何现有球重叠,如果重叠,则重新生成。复杂度是1+2+3...+(n-1),大约是O(n^n)。我仍然想知道是否有更快的算法。
Edit2:抱歉 1+2+..n 应该是 n^2