Python实现管线建模 - 3.同心变径管

        往期回顾

Python实现管线建模 || 1.圆直管、方管icon-default.png?t=N7T8https://blog.csdn.net/Xxy9426/article/details/138836778?spm=1001.2014.3001.5501

  对依赖库的补充  

        随着后续内容的深入,我发现单纯靠trimesh库已经无法完成后续的建模(涉及到多个几何体拼接或者是创建较复杂的几何体的情况单单用trimesh铁定是搞不定的),所以需要使用 cmd

pip install trimesh[all] 

来安装  trimesh 及其所有必要依赖库 。 主要包括:

numpy:用于数值计算的基础库。

scipy:提供了额外的科学计算功能。

networkx:用于图和网络分析。

pyglet:用于 OpenGL 的图形库。

shapely:用于几何对象的创建和操作。

rtree:用于空间索引和查询。

Pillow:Python Imaging Library,处理图像文件。

lxml:用于解析和处理 XML 和 HTML。

assimp:Open Asset Import Library,用于读取多种 3D 文件格式。

pyrender:用于渲染三维场景。

        变径管件指的是用于连接不同直径管道的管件,主要用于管道系统中从较大管径的管道过渡到较小管径的管道(或相反)。变径管线在城市管网中有着广泛应用,一般来说是特征点当中的一类。通常出现在流量变化、压力调整或设备连接的场景中。

        根据管件形态的不同,可以将其分为两种类型:

        1.同心变径管:这种变径管的中心轴线是相同的,通常用于垂直或水平管道。

        2.偏心变径管:这种变径管的其中一侧是平的,通常用于水平管道,以避免积水。

        咱们把变径管的内容拆分成两篇文章,今天我们先来进行同心变径管的建模(偏心的我还没搞明白)。同心变径管本质上是一边粗一边细的圆台,形状比较规矩,所以建模流程上比较简单。

        上代码~

import trimesh
import numpy as np

def create_tapered_cylinder(radius_base=0.5, radius_top=1.5, height=3.0, segments=32):
    """
    创建一个圆台形状的三维模型。
    参数:
    radius_base: 圆台底部半径,默认为0.5。
    radius_top: 圆台顶部半径,默认为1.5。
    height: 圆台的高度,默认为3.0。
    segments: 圆台侧面的分段数,默认为32。
    
    返回:
    cylinder_mesh: 圆台的三维网格模型。
    """
    # 创建圆台的底部和顶部圆
    theta = np.linspace(0, 2 * np.pi, segments)  # 生成从0到2π的等差数列,用于计算圆的点
    base_circle = np.column_stack((np.cos(theta) * radius_base, np.sin(theta) * radius_base, np.zeros_like(theta)))  # 底部圆的坐标
    top_circle = np.column_stack((np.cos(theta) * radius_top, np.sin(theta) * radius_top, np.full_like(theta, height)))  # 顶部圆的坐标
    
    # 将底部和顶部圆的坐标合并,形成圆台的顶点
    vertices = np.vstack([base_circle, top_circle])

    # 定义圆台的面
    faces = []
    for i in range(segments - 1):  # 循环创建侧面的面
        faces.append([i, i + 1, i + segments])  # 定义侧面的三角形面
        faces.append([i + 1, i + 1 + segments, i + segments])
    # 闭合圆台的底部和顶部,形成完整的圆台形状
    faces.append([segments - 1, 0, 2 * segments - 1])
    faces.append([0, segments, 2 * segments - 1])

    # 使用trimesh库创建三维网格模型
    cylinder_mesh = trimesh.Trimesh(vertices=vertices, faces=faces)

    return cylinder_mesh

# 创建圆台模型
tapered_cylinder = create_tapered_cylinder()

# 导出圆台模型到OBJ文件
tapered_cylinder.export('output/tapered_cylinder.obj')

        之后本系列文章会继续更新偏心变径管(等我学会、三通、四通、法兰结构等等管线的建模。需要的朋友可以点点关注不迷路~

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值