假设我从一个定义半径 R 的球体和一个包含笛卡尔坐标的三个元素的数组开始:
double vecpos[3];
vecpos[0]= 0.0;
vecpos[1]= 0.0;
vecpos[2]= 0.0;
double radius= 5;
现在,我想添加其他球体。这些额外的球体应该被理想地包装,尽可能密集。
我正在寻找一种算法,从这个单一的球体开始,以最密集的方式添加更多的球体。当然,球体可以不重叠(即,它们的行为像实心弹珠)。
到目前为止,我的尝试集中在添加更多球体(例如,在原始球体的左侧和右侧,因此在位置:
(10,0,0)
(-10,0,0)
然后在顶部和底部添加新的(在计算的位置:
(5, sqrt(3)/2 * 10, 0)
(-5, sqrt(10)/2 * 10, 0)
(5, sqrt(3)/2 * -10, 0)
(-5, sqrt(3)/2 * -10, 0)
(创建中心的六边形)。到现在为止,我意识到我可以用一个简单的算法继续构建新的球体,该算法只是创建等距三角形,使用两个球体的中心来创建第三个球体(这就是我计算四个新球体的位置的方法球体以上)。
但是,进入第三维(即:在其他球体的顶部或下方添加新球体)是我卡住的地方,因为我看不到一种智能地编写代码来做到这一点的方法。
任何解决我的问题或比我的解决方案更简单的建议都非常受欢迎。
谢谢你。