这是我在 stackoverflow 上提出的问题为了清晰起见,此处部分复制。
我正在玩scikit-image
行进立方体 算法。这是文档中给出的示例的简化版本。
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
from skimage import measure
x = np.linspace(-1, 1, 11)
X, Y, Z = np.meshgrid(x, x, x, indexing = 'ij')
def f(x, y, z):
return x
verts, faces = measure.marching_cubes(f(X, Y, Z), 0.6)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
mesh = Poly3DCollection(verts[faces])
ax.add_collection3d(mesh)
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.set_zlim(0, 10)
plt.show()
最终的表面效果如下:
现在我想用渐近线绘制曲面。所以基本上,我必须找到一种方法来导出三角形的坐标。很简单:每个三角形都是一个元素,verts[faces]
由 3 个列表表示,元素是每个顶点的 3 个坐标。所以我可以解析verts[faces]
并写入path3 triangle = (x1, y1, z1) -- (x2, y2, z2) -- (x3, y3, z3) -- cycle
每个三角形的文件。然后,对于每个triangle
,我绘制曲面:draw(surface(triangle))
。但是有没有更好的方法来定义渐近线的曲面?
请注意,在现实生活中,表面比简单的平面复杂得多:)