我曾使用python 2.6和2.7在3d空间中计算位置,位置或向量的几个项目,并且我已经看到了计算两个坐标之间所有点的不同方法。例如,我经常看到这种类型的构造,使用xrange或range来查找三维框中的所有点,
s = list()
for x in xrange(xmin,xmax):
for y in xrange(ymin,ymax):
for z in xrange(zmin,zmax):
s.append((x,y,z))
那么,在三维范围内计算或迭代点的最有效、最简洁、最快的方法是什么呢?(澄清一下,这是三种不同的方法,而不是一种,计算点的顺序无关紧要)
下面的代码肯定更简洁,更节省内存,我也希望它比for循环快,但我还没有测试过:
from itertools import product
list(product(xrange(xmin, xmax), xrange(ymin, ymax), xrange(zmin, zmaz)))
你可以用map:
保存一些字符list(product(*map(xrange, [xmin, ymin, zmin], [xmax, ymax, zmax])))
您考虑过KD-Tree吗?
http://en.wikipedia.org/wiki/Kd-tree以下是我建议你看的一些帖子:
- 获取由3d多边形包围的点
- 如何测试一个点是否位于一个三维形状内,其表面由点云定义?
- http://www.inf.ethz.ch/personal/gaertner/miniball.html
- http://erich.realtimerendering.com/ptinpoly/
它们不是python,但逻辑是一样的