scipy 用于STL的Delauny三角剖分

zzoitvuj  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(191)

我想对一个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网格工具中产生任何错误。
提前感谢!

sf6xfgos

sf6xfgos1#

Delaunay三角剖分是一种减少窄三角形数量且不依赖于顶点顺序的三角剖分类型。您可以使用delaunay和delaunay函数创建Delaunay三角剖分,或创建具有用于计算几何量的对象函数的delaunayTriangulation对象。您可以可视化三角剖分并使用STL文件写入三角剖分数据。

相关问题