我想对一个3D数组的点进行三角剖分来创建openFoam的stl。我想创建的物体是一个沿着长度方向有波纹的板,通常在板式热交换器中可以找到。对于stl的创建,我使用numpy stl,对于三角剖分,我使用scipy的delauny三角剖分。三角剖分本身就创建了一个很好的stl。然而,它没有考虑到边缘,因此我不能创建波纹。
import numpy as np
from stl import mesh
import stl
from mpl_toolkits import mplot3d
from matplotlib import pyplot
import math as math
from scipy.spatial import Delaunay
b = 0.5 # width plate
d = 0.05 # width corrugation
a = 60 # angle corrugation
t_1 = -0.01 # depth corrugation
########################## UPPER PLATE WITH CORRUGATION #######################
# vertices of the corrugation as start and reference
vertices_upperPlate= np.array([\
[0, 0, 0],
[-b/2, -((b/2)/np.tan((a/180)*np.pi)),0],
[b/2, -((b/2)/np.tan((a/180)*np.pi)),0],
[0,d,0],
[-b/2, -((b/2)/np.tan((a/180)*np.pi))+d,0],
[b/2, -((b/2)/np.tan((a/180)*np.pi))+d,0]])
# Copy the definitions with z offset (t_1)
vertices_upperPlateCorrugation = np.copy(vertices_upperPlate)
vertices_upperPlateCorrugation[:,2] = vertices_upperPlateCorrugation[:,2] + t_1
vertices_upperPlate = np.vstack((vertices_upperPlate, vertices_upperPlateCorrugation))
faces_upperPlate = np.array([\
[0,1,6],
[6,1,7],
[0,2,6],
[6,2,8],
[3,4,9],
[9,4,10],
[3,5,9],
[9,5,11],
[6,7,9],
[6,9,8],
[9,7,10],
[9,8,11]])
# tri = Delaunay(vertices_upperPlate)
# faces_upperPlate = tri.convex_hull
# Create the mesh
upperPlate = mesh.Mesh(np.zeros(faces_upperPlate.shape[0], dtype=mesh.Mesh.dtype))
for i, f in enumerate(faces_upperPlate):
for j in range(3):
upperPlate.vectors[i][j] = vertices_upperPlate[f[j],:]
# Create a new plot
figure = pyplot.figure()
axes = mplot3d.Axes3D(figure)
# Load the STL files and add the vectors to the plot
your_mesh = upperPlate
axes.add_collection3d(mplot3d.art3d.Poly3DCollection(your_mesh.vectors))
# Auto scale to the mesh size
scale = your_mesh.points.flatten()
axes.auto_scale_xyz(scale, scale, scale)
# Show the plot to the screen
pyplot.show()
upperPlate.save('toOpenfoam/upperPlate.stl', mode=stl.Mode.ASCII)
这会产生以下所需的单波纹:sorry i am not allowed to attach pictures yet
如果我将三角测量从手动更改为delauny,则会得到以下结果:
triangulation with delauny
我的主要问题可以归结为:我能以某种方式改变三角剖分来解释平面内尺寸的变化吗?如果可以,我可以在平面上进行三角剖分,并将波纹也覆盖起来。这将非常有帮助,因为这种三角剖分不会在openFoams网格工具中产生任何错误。
提前感谢!
1条答案
按热度按时间sf6xfgos1#
Delaunay三角剖分是一种减少窄三角形数量且不依赖于顶点顺序的三角剖分类型。您可以使用delaunay和delaunay函数创建Delaunay三角剖分,或创建具有用于计算几何量的对象函数的delaunayTriangulation对象。您可以可视化三角剖分并使用STL文件写入三角剖分数据。