2013-04-23 76 views
4

我想对基于体素的球体对象进行测量,以numpy数组表示。由于采样,这些球体被表示为一组立方体(因为它们在数组中被采样)。我想通过这个网格限制来模拟引入的错误。有没有什么办法在网格中绘制3D球体来运行我的模拟? (所以基本上,单位长度为1的球体将是阵列中的一个点)在3D numpy网格中绘制/采样球体

或者是否有另一种计算采样引入的误差的方法?

在2-d,这似乎是容易... Sampling in 2D

回答

5

最直接的方法是创建一个边界框阵列,所述距离保持在每个点处的球的中心:

>>> radius = 3 
>>> r2 = np.arange(-radius, radius+1)**2 
>>> dist2 = r2[:, None, None] + r2[:, None] + r2 
>>> volume = np.sum(dist2 <= radius**2) 
>>> volume 
123 

二维情况下更容易想象:

>>> dist2 = r2[:, None] + r2 
>>> (dist2 <= radius**2).astype(np.int) 
array([[0, 0, 0, 1, 0, 0, 0], 
     [0, 1, 1, 1, 1, 1, 0], 
     [0, 1, 1, 1, 1, 1, 0], 
     [1, 1, 1, 1, 1, 1, 1], 
     [0, 1, 1, 1, 1, 1, 0], 
     [0, 1, 1, 1, 1, 1, 0], 
     [0, 0, 0, 1, 0, 0, 0]]) 
>>> np.sum(dist2 <= radius**2) 
29 
+0

非常感谢。这个作品真棒!你是否也有一个想法,如何获得添加下一个“立方体”的半径“步骤”? – Dschoni 2013-04-23 14:52:27