0 导学

目的:掌握利用三维效果表达科学和工程数据的能力

传播一种思想:可视化技术是数据之眼

内容组织:

流体数据的标量可视化、矢量可视化实例

三维扫描数据(模型/地形)可视化实例

三维地球场景可视化实例

曲线UI交互控制可视化实例

1 基础运用

科学计算可视化的主要方法:

二维标量数据场:颜色映射法、等值线方法、立体图法和层次分割法

三维标量数据场:面绘制方法、体绘制方法

矢量数据场:直接法(箭头、线段、色轮等手段表示矢量数据)、流线法

应用领域:地球科学、大气科学、医学/生命科学、生物/分子科学、航空/航天/工业、化工/化学、物理/力学、人类/考古、地址勘探等

1.1 TVTK入门

TVTK库中类名去除了前缀vtk

函数名按照Python惯例,采用下划线连接单词,如AddItem->add_item

VTK对象的方法在TVTK中用Trait属性替代,例如VTK中m.SetInputConnection(c.GetOutputPort()),TVTK中m.input_connection(c.output_port)

安装:

conda install vtk

conda install numpy

conda install traits

conda install mayavi

conda install PyQt

安装完测试下

from tvtk.tools import tvtk_doc

tvtk_doc.main()

In[3]: from tvtk.api import tvtk

In[4]: s = tvtk.CubeSource(x_length=1.0,y_length=2.0,z_length=3.0)

In[5]: print(s)

vtkCubeSource (000001A7ACDECA70)

Debug: Off

Modified Time: 132

Reference Count: 2

Registered Events:

Registered Observers:

vtkObserver (000001A7B0699C20)

Event: 33

EventName: ModifiedEvent

Command: 000001A7B097C560

Priority: 0

Tag: 1

Executive: 000001A7B0418800

ErrorCode: No error

Information: 000001A7AD8034D0

AbortExecute: Off

Progress: 0

Progress Text: (None)

X Length: 1

Y Length: 2

Z Length: 3

Center: (0, 0, 0)

Output Points Precision: 0

创建一个基本三维对象

s = tvtk.CubeSource(traits)

s表示对象变量,返回一个三维对象实例

tvtk.CubeSource是一个构造函数,构造具有一定traits属性的长方体数据源对象

什么是traits,英文意思的属性,由于python变量没有类型,导致实际操作中遇到了些不便利,traits库可以为python添加类型定义,由于tvtk正是在vtk上用traits库进行的封装形式,为了更简单的理解,我们可以认为traits就是tvtk对象的属性

此外tvtk还有其他基本三维对象

试着建立个圆锥体数据源看看

In[3]: from tvtk.api import tvtk

In[4]: s = tvtk.ConeSource(height=3.0,radius=1.0,resolution=36)

In[5]: s.height

Out[5]: 3.0

In[6]: s.radius

Out[6]: 1.0

In[7]: s.resolution

Out[7]: 36

In[8]: s.center

Out[8]: array([0., 0., 0.])

In[9]: print(s)

vtkConeSource (000002CC5566E290)

Debug: Off

Modified Time: 134

Reference Count: 2

Registered Events:

Registered Observers:

vtkObserver (000002CC572346C0)

Event: 33

EventName: ModifiedEvent

Command: 000002CC573449D0

Priority: 0

Tag: 1

Executive: 000002CC56FFA700

ErrorCode: No error

Information: 000002CC5722B540

AbortExecute: Off

Progress: 0

Progress Text: (None)

Resolution: 36

Height: 3

Radius: 1

Capping: On

Center: (0, 0, 0)

Direction: (1, 0, 0)

Output Points Precision: 0

显示一个三维对象

from tvtk.api import tvtk

# 创建一个长方体数据源,并且同时设置其长宽高

s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)

# 使用PolyDataMapper将数据转换为图形数据

m = tvtk.PolyDataMapper(input_connection=s.output_port)

# 创建一个Actor

a = tvtk.Actor(mapper=m)

# 创建一个Renderer,将Actor添加进去

r = tvtk.Renderer(background=(0, 0, 0))

r.add_actor(a)

# 创建一个RenderWindow(窗口),将Renderer添加进去

w = tvtk.RenderWindow(size=(300, 300))

w.add_renderer(r)

# 创建一个RenderWindowInteractor(窗口的交互工具)

i = tvtk.RenderWindowInteractor(render_window=w)

# 开启交互

i.initialize()

i.start()

将长方体数据转化为三维图像运用了什么技术?

管线(Pipeline),对象之间协调完成工作的过程,需要众多的的TVTK对象共同协调完成,如tvtk.CubeSource、tvtk.PolyDataMapper、tvtk.Actor、tvtk.Renderer、tvtk.RenderWindow、tvtk.RenderWindowInteractor

1.2 TVTK管线与数据加载

管线基本流程

几乎所有渲染引擎都会涉及管线技术,TVTK管线分为2部分,其中:

可视化管线:将原始数据加工为图形数据的过程

图形管线:图形数据加工为我们所看到的图像的过程

IVTK工具观察管线

from tvtk.api import tvtk

from tvtk.tools import ivtk

from pyface.api import GUI

s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)

m = tvtk.PolyDataMapper(input_connection=s.output_port)

a = tvtk.Actor(mapper=m)

#创建一个带Crust(Python Shell)的窗口

gui = GUI()

win = ivtk.IVTKWithCrustAndBrowser()

win.open()

win.scene.add_actor(a)

#开始界面消息循环

gui.start_event_loop()

由于版本过高,from tvtk.tools import ivtk,这句出现错误。。。

TVTK数据集

数据集,包括点与数据,点之间有连接和非连接关系,多个相关的点组成单元,点的连接有隐式和显示,数据有标量和矢量

TVTK五种数据集:

ImageData表示二维或三维图像的数据结构,可以简单的理解为二维或三维数组,特点是在数组中存放数据,点位于正交且等距的网格上,我们不需要给出坐标,点之间的连接关系由它们在数组中的位置确定,点的连接关系是隐性的

from tvtk.api import tvtk

img = tvtk.ImageData(spacing=(1,1,1),origin=(1,2,3),dimensions=(3,4,5))

print(img.get_point(0))

for n in range(6):

print("%.1f,%.1f,%.1f"% img.get_point(n))

RectilinearGrid:间距不均匀的网格,所有点都在正交的网格上

如何构建

from tvtk.api import tvtk

import numpy as np

x = np.array([0,3,9,15])

y = np.array([0,1,5])

z = np.array([0,2,3])

r = tvtk.RectilinearGrid()

r.x_coordinates = x

r.y_coordinates = y

r.z_coordinates = z

r.dimensions = len(x),len(y),len(z)

同样可以查看

StructuredGrid:创建任意形状的网格,需要指定点的坐标

PolyData:由一系列的点和点之间的联系、点构成的多边形组成

由于这些信息都要用户设置,因此用程序创建PolyData比较繁琐,TVTK很多三维模型可以输出PolyData对象

TVTK数据加载

大多数可视化数据并非是TVTK库中构建,而是通过接口读取外部数据文件

TVTK库继承关系

VTK三维模型读取

STL文件是在计算机图形应用系统中用于表示三角形网格的一种文件格式,这种格式非常简单,应用很广泛

from tvtk.api import tvtk

from tvtkfunc import ivtk_scene,event_loop

s = tvtk.STLReader(file_name = "python.stl")

m = tvtk.PolyDataMapper(input_connection = s.output_port)

a = tvtk.Actor(mapper = m)

win = ivtk_scene(a)

win.scene.isometric_view()

event_loop()

from tvtk.api import tvtk

def read_data():# 读入数据

plot3d = tvtk.MultiBlockPLOT3DReader(

xyz_file_name="combxyz.bin",#网格文件

q_file_name="combq.bin",#空气动力学结果文件

scalar_function_number=100,#设置标量数据数量

vector_function_number=200#设置矢量数据数量

)

plot3d.update()

return plot3d

plot3d = read_data()

grid = plot3d.output.get_block(0)

的2

待续

python三维数组可视化_【学习笔记】Python科学计算三维可视化(黄天羽、嵩天)(学习中。。)...相关推荐

  1. python定义数组大小_请问在python数组要先定义长度吗?

    视情况而定 若数组是追加一个元素的可以不用定义长度: 若初始化一个列表然后要修改其中的值的话,就要定义长度了. 例: 拓展资料 设计定位 Python的设计哲学是"优雅".&quo ...

  2. python安全编程教程_[ichunqiu笔记] python安全应用编程入门

    01 python正则表达式 02 Python Web编程 03 Python多线程编程 04 Python网络编程 05 Python数据库编程 ------------------------- ...

  3. python三维矩阵可视化_科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)...

    Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...

  4. python 科学计算三维可视化笔记(第三周 高级进阶)

    python 科学计算三维可视化笔记 第三周 高级进阶 python 科学计算三维可视化笔记 第三周 高级进阶 一.Mayavi 入门 1. Mayavi 库的基本元素 2. 快速绘制实例 3. Ma ...

  5. python编程大数据分析_大数据分析Python学习技巧

    大数据分析Python是任何开发人员都应该知道的重要编程语言.许多程序员使用这种语言来构建网站,创建学习算法以及执行其他重要任务.但是尝试学习大数据分析Python可能会令人感到恐惧,沮丧和困难,尤其 ...

  6. 树莓派学习笔记——Python SQLite插入温度记录

    0 前言 本文使用python向SQLite数据库中插入树莓派温度数据,SQLite数据库中包含一张只包含三个字段的记录表--参数名称,时间和温度值.本文重点解释Python操作SQlite的具体方法 ...

  7. python语言的33个保留字的基本含义_Python学习笔记——Python的33个保留字及其意义,python,pythone33,含义...

    Python学习笔记--Python的33个保留字及其意义,python,pythone33,含义 发表时间:2020-03-27 笔记走起 正文 序号 保留字 含义 1 and 用于表达式运算,逻辑 ...

  8. Python学习笔记 - Python数据类型

    前言 在Python语言中,所有的数据类型都是类,每一个变量都是类的"实例".没有基本数据类型的概念,所以整数.浮点数和字符串也都是类. Python有6种标准数据类型:数字.字符 ...

  9. Caffe学习笔记4图像特征进行可视化

    Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...

最新文章

  1. SAP MM VL09试图取消收货报错说某个HU负库存
  2. 剑指offer(49)把字符串转换成整数。
  3. 【备忘】bounce ease
  4. 软件测试工作常用linux命令,软件测试工程师工作中常用的Linux命令
  5. linux c字符连接,C 语言实例
  6. 3d000: no database selected_No.[C9]020
  7. javaScript PC端网页特效
  8. TensorFlow 官方文档中文版发布啦(持续维护) 1
  9. Visual Studio 2019 16.3 Preview 3 发布,使用 IntelliCode 重构更容易
  10. java 多个引用指向同一个对象(含案例图解)
  11. 关于h5页面链接分享到微信的分享样式如何修改成自定义卡片
  12. Java后端防止频繁请求、重复提交
  13. 超全详解2018 谷歌 I/O大会
  14. PDF Expert教程|七个提高效率的小技巧
  15. 我真的不懂微信营销(一)
  16. 滴滴2023秋招笔试 老张的美数课 (C++ DP)
  17. 傅里叶变换、拉普拉斯变换、z变换之间的联系
  18. java之本周、上周、开始、结束时间
  19. Hive考试练习题前75分答案
  20. Mysql 四舍五入 取整

热门文章

  1. 计算机专业可以调剂到哪些学校,计算机专硕312分,求问调剂哪些学校录取把握大?...
  2. 激光雷达测距原理和点云畸变
  3. 【古典入门】巴洛克音乐家-拉莫
  4. 局域网共享打印机、文件夹等设置
  5. 再见了,程序员!钢铁工人用低代码30分钟开发一套核酸登记软件
  6. linux mint 屏保_Linux Mint 19.1 公开版正式发布:主线内核支持,全新壁纸
  7. 骚操作!Excel 3步 给证件照换底色?
  8. PTA 补充题库 7-19 评委打分
  9. 虚拟人,会成为品牌下一次逆势的解药吗?
  10. Broadmann分区