• python 科学计算三维可视化笔记(第二周 基础实战)



    内容来自中国大学MOOC,北京理工大学,python数据分析与展示课程,侵删。
    如有错误,烦请指出。


    python 科学计算三维可视化笔记 第二周 基础实战

    一、实例1:标量数据可视化

    等值面过滤器 tvtk.ContourFilter()
    1 - 1 - 等值面过滤器
    标量数据可视化代码:

    '''标量数据可视化'''
    from tvtk.api import tvtk
    from tvtkfunc import ivtk_scene, event_loop
    
    # 读入plot3D数据
    plot3d = tvtk.MultiBlockPLOT3DReader(
            xyz_file_name = "combxyz.bin",
            q_file_name = "combq.bin",
            scalar_function_number = 100,
            vector_function_number = 200
        )
    # 让plot3D计算其输出数据
    plot3d.update()
    # 获取读入的数据集对象
    grid = plot3d.output.get_block(0)
    
    # 创建等值面对象  
    con = tvtk.ContourFilter()
    con.set_input_data(grid)
    # 指定等值面数量为10, 指定数据范围
    con.generate_values(10, grid.point_data.scalars.range)
    
    # 设定映射器的变量范围属性
    m = tvtk.PolyDataMapper(scalar_range = grid.point_data.scalars.range,
                            input_connection=con.output_port)
    a = tvtk.Actor(mapper = m)
    a.property.opacity = 0.5  # 设定透明度为0.5
    
    # 窗口绘制
    win = ivtk_scene(a)
    win.scene.isometric_view()
    event_loop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    1 - 2 - 实例
    等值面个数可以自定义:
    1 - 3 - 实例
    可以为每个等值面指定值:
    1 - 4 - 实例

    二、实例2:矢量数据可视化

    使用 tvtk.Glyph3D() 引入符号化技术
    使用 tvtk.MaskPoints() 进行降采样

    矢量数据可视化代码:

    '''矢量数据可视化'''
    from tvtk.api import tvtk
    from tvtkfunc import ivtk_scene, event_loop
    
    # 读入plot3D数据
    plot3d = tvtk.MultiBlockPLOT3DReader(
            xyz_file_name = "combxyz.bin",
            q_file_name = "combq.bin",
            scalar_function_number = 100,
            vector_function_number = 200
        )
    # 让plot3D计算其输出数据
    plot3d.update()
    # 获取读入的数据集对象
    grid = plot3d.output.get_block(0)
    
    # 对数据集中的数据进行随机选取,每50个点选择一个点
    mask = tvtk.MaskPoints(random_mode=True, on_ratio=50)
    mask.set_input_data(grid)
    # 创建表示箭头的PolyData数据集
    glyph_source = tvtk.ArrowSource()
    #glyph_source = tvtk.ConeSource()
    
    # 在Mask采样后的PolyData数据集每个点上放置一个箭头
    # 箭头的方向(速度的方向)           由与点对应的矢量和标量数据决定
    # 长度(短标量值小,长标量值大)     由与点对应的矢量和标量数据决定
    # 颜色(红色标量值小,蓝色标量值大) 由与点对应的矢量和标量数据决定
    glyph = tvtk.Glyph3D(input_connection=mask.output_port,
                         scale_factor=4)
    #glyph = tvtk.Glyph3D(input_connection=mask.output_port,
    #                     scale_factor=2)
    glyph.set_source_connection(glyph_source.output_port)
    m = tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range,
                            input_connection=glyph.output_port)
    a = tvtk.Actor(mapper=m)
    
    #窗口绘制
    win = ivtk_scene(a)
    win.scene.isometric_view()
    event_loop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    2 - 1 - arrowsource - 4
    glyph_source = tvtk.ArrowSource() 替换为 glyph_source = tvtk.ConeSource()
    缩放系数变为 scale_factor=2,可以生成由圆锥表示的矢量数据:

    2 - 2 - conesource - 2

    三、实例3:空间轮廓线可视化

    使用 tvtk.StructuredGridOutlineFilter() 计算 PolyData 对象的外边框(轮廓线)

    空间轮廓线可视化代码:

    '''实例3:空间轮廓线可视化'''
    from tvtk.api import tvtk
    from tvtk.common import configure_input
    from tvtkfunc import ivtk_scene, event_loop
    
    # 读入plot3D数据
    plot3d = tvtk.MultiBlockPLOT3DReader(
            xyz_file_name = "combxyz.bin",
            q_file_name = "combq.bin",
            scalar_function_number = 100,
            vector_function_number = 200
        )
    # 让plot3D计算其输出数据
    plot3d.update()
    # 获取读入的数据集对象
    grid = plot3d.output.get_block(0)
    
    # 计算表示外边框的PolyData对象
    outline = tvtk.StructuredGridOutlineFilter()
    # 将外框计算与数据集产生关联
    configure_input(outline, grid)
    m = tvtk.PolyDataMapper(input_connection=outline.output_port)
    a = tvtk.Actor(mapper=m)
    a.property.color = 0.3, 0.3, 0.3
    
    # 窗口绘制
    win = ivtk_scene(a)
    win.scene.isometric_view()
    event_loop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3 - 1 - 实例

  • 相关阅读:
    中科院提出“思维传播”,极大增强ChatGPT等模型复杂推理能力
    C 语言 while 和 do...while 循环
    《无与伦比》Centos7 安装git
    计算机图形学、贝塞尔曲线及绘制方法、反走样问题的解决(附完整代码)
    2024信息系统、信号处理与通信技术国际会议(ICISPCT2024)
    使用qrcode生成指定内容的二维码并在GUI界面显示
    【html】图片多矩形框裁剪
    xhEditor实现WORD粘贴图片自动上传
    小白课程,前端入门新手,必须了解的回调函数概念和应用实例
    php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎
  • 原文地址:https://blog.csdn.net/Albert_Bolt/article/details/125536068