【发布时间】:2018-09-17 22:09:57
【问题描述】:
按照scikit-image doc 中的示例,我使用行进立方体算法生成球面网格。我想将单位球壳居中于 x,y,z 网格定义的原点。但是,我不能这样做,因为我不知道如何将 x、y、z 信息与 mpl_toolkits.mplot3d.art3d.Poly3DCollection 一起放置。代码如下:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
from skimage import measure
import numpy as np
x, y, z = np.ogrid[-4:4:20j, -4:4:20j, -4:4:20j]
r = np.sqrt(x ** 2 + y ** 2 + z ** 2)
verts, faces, normals, values = measure.marching_cubes_lewiner(r,level=1)
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')
mesh = Poly3DCollection(verts[faces])
mesh.set_edgecolor('k')
ax.add_collection3d(mesh)
plt.show()
问题在于marching_cubes_lewiner 函数没有考虑x,y,z。如何将生成的球体以网格所暗示的 0,0,0 为中心?
【问题讨论】:
-
教程中的函数名为
measure.marching_cubes_lewiner,它有两个参数。 -
@ImportanceOfBeingErnest:第二个参数是可选的,用于设置等值面的值。 marching_cubes 使用 lewiner 算法作为默认值,因此两者都有效。但是,我编辑了问题以避免混淆。
-
我的 skimage 版本没有
marching_cubes。但是现在的代码应该可以工作;你遇到了什么问题? -
我希望球体以 0,0,0 为中心。我不知道该怎么做。
标签: python matplotlib scikit-image mplot3d marching-cubes