给定一大组(数万到数百万)表示为 3D 笛卡尔向量的无序点,有什么好的算法可以制作一个包含所有点的规则方形网格(用户定义的间距)?一些限制:
- 网格需要是正方形和规则的
- 我需要能够调整网格间距(其中一个正方形的边的长度),理想情况下使用单个变量
- 我想要一个最小尺寸的网格,即网格中的每个“块”都应该包含至少一个无序点,并且每个无序点都应该包含在一个“块”中
- 算法的返回值应该是网格点的坐标列表
为了在 2D 中说明,给定这组点:
对于某些网格间距 X,算法的一个可能返回值将是这些红点的坐标(虚线仅用于说明目的):
对于网格间距 X/2,算法的一个可能返回值是这些红点的坐标(虚线仅用于说明目的):
对于任何感兴趣的人,我正在处理的无序点是大蛋白质分子的原子坐标,就像你可以从 .pdb 文件中得到的一样。
Python 是解决方案的首选,尽管伪代码也很好。
编辑:我认为我对我需要的第一个描述可能有点模糊,所以我添加了一些约束和图像以澄清事情。