我在 python 中生成二维二进制形状。之后,我希望将它们转换为 3D STL 文件以进行 3D 打印。这种作品,但仅限于“简单”的形状,如三角形和正方形。对于更复杂的形状,我得到以下 Shape :
所以我们可以看到它有点像二进制图像,但有更多的“伪影”。我用:
- delaunay三角剖分(来自scipy)
- numpy-stl 用于生成 stl 文件(需要顶点 + 面来生成,这就是三角剖分的原因)
- numpy 保存/加载我的形状
这是我的代码:
import numpy as np
from scipy.spatial import Delaunay
from stl import mesh
from numpy import loadtxt
def load_shape(id):
return loadtxt("../shapes/shape_{}.shape".format(id))
def extract_vertices(shape):
arr = []
for ix, x in enumerate(shape):
for iy, y in enumerate(x):
if y == 0:
arr.append([ix, iy])
return np.array(arr)
def vertices_2d_to_3d(vertices, z=10):
x, y = vertices.shape
new = np.zeros((x*2, y + 1))
for i, v in enumerate(vertices):
new[i] = [v[0], v[1], 0]
new[x+i] = [v[0], v[1], z]
return new
shape = load_shape(4)
vertices = extract_vertices(shape)
vertices = vertices_2d_to_3d(vertices, 10)
tri = Delaunay(vertices)
faces = tri.convex_hull
ms = mesh.Mesh(np.zeros(faces.shape[0], dtype=mesh.Mesh.dtype))
for i, f in enumerate(faces):
for j in range(3):
ms.vectors[i][j] = vertices[f[j],:]
ms.save('shape.stl')
谁能给我一些关于如何摆脱这些“伪影”并告诉 delaunay 三角剖分不要连接不在形状中的顶点的提示?