给定表示为三维笛卡尔矢量的大量无序点集(数以万计到百万级别),如何制作一个包围所有点的正方形规则网格(用户定义间距)的良好算法?一些约束条件:
- 网格需要是正方形和规则的;
- 我需要能够调整网格间距(一个正方形边长的长度),最好只用一个变量;
- 我想要尽可能小的网格,即网格中的每个“块”都应该至少包含一个无序点,并且每个无序点都应该被包含在一个“块”中;
- 算法的返回值应该是网格点的坐标列表。
为了在二维平面上说明,考虑以下点集:
对于某个间距为X的网格,算法的一种可能的返回值是这些红色点的坐标(虚线仅用于说明):
对于间距为X/2的网格,算法的一种可能的返回值是这些红色点的坐标(虚线仅用于说明):
我正在处理的无序点是大型蛋白质分子的原子坐标,类似于.pdb文件中所包含的内容。
Python 是首选的解决方案语言,但伪代码也可以。
编辑:我认为我对我需要的描述可能有点模糊,因此我添加了一些约束条件和图像,以澄清问题。