什么是最快的,最有效的内存,最简洁的方法来计算三维范围的点



我曾使用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

以下是我建议你看的一些帖子:

  1. 获取由3d多边形包围的点
  2. 如何测试一个点是否位于一个三维形状内,其表面由点云定义?
  3. http://www.inf.ethz.ch/personal/gaertner/miniball.html
  4. http://erich.realtimerendering.com/ptinpoly/

它们不是python,但逻辑是一样的

最新更新