【发布时间】:2016-03-01 10:14:17
【问题描述】:
我要做的是创建一个 3D 三角网格,可以将其解析为 .vtk 或 .stl 文件以用于 3D 打印应用程序。现在我被三角网格的创建困住了。我要创建的几何图形基本上是具有一定厚度并相互交叉的三维正弦波。到目前为止,我得到了一个正弦波。这是一个 MWE:
import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage
import scipy.spatial
# create empty 3d array
array = np.zeros((100, 100, 100))
# create 3D sine wave in empty array
strut = np.sin(np.linspace(1, 10, 100))*12
for k in enumerate(strut):
y_shift = int(np.round(strut[k[0]]))
array[k, 50 + y_shift, 50] = 1
pattern = np.ones((4, 4, 4))
# convolve the array with the pattern / apply thickness
conv_array = ndimage.convolve(array, pattern)
# create list with data coordinates from convolved array
data = list()
for j in range(conv_array.shape[0]):
for k in range(conv_array.shape[1]):
for l in range(conv_array.shape[2]):
if conv_array[j, k, l] != 0:
data.append([j, k, l])
data = np.asarray(data)
tri = scipy.spatial.Delaunay(data)
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
ax.hold(True)
ax.plot_trisurf(data[:, 0], data[:, 1], data[:, 2], triangles=tri.simplices)
plt.show()
它的作用:我创建了一个空数组,我用一个由 1 表示的正弦波填充该数组。我将该数组与一个定义大小的矩形数组进行卷积,这给了我一个更厚的空间正弦波。然后将数组转换为坐标形式,以便可以使用 Delaunay 三角剖分对其进行三角剖分。我得到的是这样的:
正如您所见,三角测量有点工作,但它填充了正弦波幅度之间的空间。有没有办法去除填充的空间?还是从一开始就阻止它这样做?正弦波在末端也看起来不对,我不知道为什么。这甚至是实现我想要做的最好的方法吗?
对 .vtk 文件的解析应该没有问题,但我首先需要一个干净的结构。提前感谢您的任何帮助!
【问题讨论】:
标签: python multidimensional-array mesh triangulation delaunay