VTK----VTK数据结构详解1(几何篇)

在讲VTK的数据结构之前,我们先了解可视化数据的两个特征:离散性、有规则或无规则。

  • 离散性。当我们使用计算机去表示我们的数据时,一般都是基于有限数量的点做信息的采样(或插值),因此可视化的数据是以一种离散的方式表示的。
  • 有规则或无规则(也叫结构化或非结构化)。针对有规则的数据,不需要存储所有点的坐标,仅仅需要存起点、步长、点的个数(有的可能还需要知道方向),所有点的位置就能隐式的知道了,这样能节约内存空间。针对无规则的数据,它能在改变比较快的位置(例如拐角位置)表示比较稠密的信息而在变化不大的位置表示较少的信息,这样能给数据表示提供更多的自由。

下面我们就来看看,这些特征是如何塑造VTK的可视化数据模型的。

1 数据集(vtkDataSet)

具有组织结构和相关属性的数据对象形成数据集。

数据集的结构由两部分组成:拓扑结构和几何形状。拓扑是在确定的几何变换(旋转、偏移、缩放)之下一组不变的属性。几何形状是拓扑的实例化,它指定3D空间中的位置。例如,说一个多边形是“三角形”,指的是拓扑。提供点的坐标,指的是几何形状。

数据集的属性补充与几何形状和拓扑结构相关的信息,该信息可能是某点的温度或某个单元的惯性质量。

VTK中数据集由单元(cell)点(point)组成。单元指的是拓扑,而点指的是几何形状。特定属性包括:scalars(标量)、vectors(向量)、normals(法向)、texture coordiantes(纹理坐标)、tensor(张量)。

单元(cell)类型

一个数据集由一个或多个单元组成,单元是可视化系统的基本组成部分。单元是通过指定类型与有序点列表的组合来定义的。有序列表,通常称为连通性(connectivity)列表,它与指定类型结合,隐式地定义了单元的拓扑结构。x-y-z点坐标定义了单元的几何形状。

虽然我们在三维空间定义点,但单元的拓扑维度可能会有所不同。Vertices(顶点),lines(线)、triangles(三角形),tetrahedra(四面体)分别是0维,1维,2维,3维拓扑结构的例子,它们被嵌入在几何空间中。单元可以是基本的和复合的。复合的单元由一个或多个基本的单元组成,而基本单元不能分解成其他基本单元类型的组合。例如三角带(triangle strip)由一个或多个以紧凑形式排列的三角形组成。三角带是复合单元,因为它可以分解成三角形,而三角形是基本单元。

可能的单元类型是无限的,在VTK中,每种单元类型都是根据应用需求选择的。我们已经看到了一些单元类型:顶点、线、多边形和三角带是如何表示几何形状的。其他单元类型,如四面体和六面体,在数值模拟中很常见。

单元类型分为线性、非线性或其他类型。

线性单元类型

线性单元的特征是线性,因此一维或更大维度单元的特征是直边,任何边都可以用两个顶点id(v1,v2)来表示。以下是目前在VTK中能找到的线性单元。

非线性单元类型

在数值分析中,通常使用非线性单元,即使用非线性基本函数的单元公式。这些基础函数通常由多项式组合而成。非线性单元提供更精确的插值函数和更好的近似曲线几何。以下是目前在VTK中能找到的非线性单元。

线性和非线性单元之间的一个显著区别是它们被各种可视化算法渲染和操作的方式不同。线性单元很容易转换为线性图元,然后由图形库进行处理。而非线性单元通常不被图形库直接支持。(非均匀有理B样条或NURBS系列是一个例外,即使这些通常也被图形库细分为线性图元)因此,可视化系统必须对非线性单元进行特殊处理。一些可能性包括:

  • 将非线性单元细分为线性单元,然后对线性单元进行操作。
  • 开发自定义渲染和可视化算法以直接对非线性单元进行操作。
  • 在图形库中编写自定义渲染操作。

这些问题都是可视化研究中的热门话题。在VTK中,目前采用的是细分(tessellation)方法,因为一旦单元被细分,就可以用现有的线性算法进行处理。上述解决方案2和3的难点在于,创建新的渲染和可视化算法需要付出很大的努力,可能需要为每种类型的非线性单元提供不同的解决方案。方案1的难点在于,必须小心地进行细分,否则可能在可视化中引入不可接受的误差,或者单元被过度细分,则会产生过多的线性单元。

VTK使用下图这种固定的细分方法来细分非线性二次单元。由于插值的阶数较低,并且定义单元的点数较少,这通常适用于二次单元。

2 数据集类型

常见的数据集类型如下图所示:

多边形数据(Polygonal Data)

多边形数据集由顶点(vertices)、多顶点(polyvertices)、线(lines)、折线(polylines)、多边形(polygons)和三角带(triangle strips)组成。多边形数据的拓扑和几何形状是非结构化的,组成该数据集的单元在拓扑维度上有所不同。

多顶点、折线和三角形带单元是为了方便、压缩和性能而添加的,以三角带为例,它具有较高的性能,用三角形带表示n个三角形仅需要n+2个点,而传统表示则需要3n个点。此外,许多图形库可以以比三角形更高的速度渲染三角形带。

图像数据(Image Data)

图像数据由线元素(1D)、像素(2D)或体素(3D)组成。图像数据在几何形状和拓扑结构上都是规则(结构化)的,并且可以隐式表示,只需要数据维度、原点、数据间距和指定x,y和z方向上的点数。

图像数据集通常用于成像和计算机图形学。体(Volumes)通常有医学成像技术(例如断层扫描(CT)和磁共振成像(MRI))生成。

直线网格(Rectilinear Grid)

与图像数据一样,直线网格由像素(2D)或体素(3D)组成。虽然直线网格数据集的拓扑结构是规则的,但几何形状只是部分是规则的。也就是说,点沿坐标轴排列,但点之间的间距可能会有所不同。拓扑结构通过指定网格维度隐式表示。要获得特定点的坐标,必须适当组合三个列表的值。

结构化网格(Structured Grid)

结构化网格数据的拓扑结构和几何形状都是规则的。结构化网格的拓扑结构通过指定vector(nx, ny, nz)来隐式表示。结构化网格的组成单元是四边形(2D)或六面体(3D)。与图像数据一样,结构化网格具有自然坐标系,允许我们使用拓扑i-j-k坐标来引用特定点或单元。

结构化网格通常用于有限差分分析。有限差分是一种数值分析技术,用于近似偏微分方程的解。典型应用包括流体流动、传热和燃烧。

非结构化点(Unstructured Points)

非结构化点是空间中不规则分布的点。非结构化点数据集中没有拓扑,几何形状完全是非结构化的。使用顶点和多顶点单元来表示非结构化点。

非结构化网格(Unstructured Grid)

最普遍的数据集形式是非结构化网格。拓扑和几何形状都是完成非结构化的。任何单元类型都可以在非结构化网格中进行任意组合。因此,单元格的拓扑范围从0D(顶点、多顶点)到3D(四面体、六面体、体素)。在VTK中,任何数据集类型都可以表示为非结构化网格。我们通常只在绝对必要时才使用非结构化网格来表示数据,因为这种数据集类型需要最多的内存和计算资源来表示和操作。

3 属性数据(vtkDataSetAtrributes)

属性数据是与数据集关联的信息。此数据包括数据集几何形状和拓扑结构。属性数据通常与数据集的点或单元关联(例如vtkPointData和vtkCellData),但有时属性数据可能也分配给单元组件,例如边或面。属性数据也可以分配整个数据集(例如vtkFieldData),或一组单元或点。我们将此信息称为属性数据,是因为它是数据集结构的属性。典型的示例包括某个点的温度或速度、单元的质量。

属性数据通常被归类为特定类型(如下图)的数据。这些类别是针对常见数据形式而创建的。可视化算法也根据其操作的数据类型进行分类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/578787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++笔试强训day8

目录 1.求最小公倍数 2.数组中的最⻓连续⼦序列 3.字母收集 1.求最小公倍数 链接 这就是一道普通的数学题。 最大公倍数 A * B / A 与 B之间的最大公约数。 最大公约数求法&#xff1a;辗转相除法(或者可以用<numeric>头文件中的gcd) #include <iostream> us…

Docker基础学习(5.Docker镜像命令)

⭐ 作者简介&#xff1a;码上言 ⭐ 代表教程&#xff1a;Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容&#xff1a;个人博客系统 ⭐我的文档网站&#xff1a;http://xyhwh-nav.cn/ ⭐微信公众号&#xff1a;码上言 文章目录 Docker run流程镜像是什么&a…

AIGC - SD(中英文本生成图片) + PaddleHub/HuggingFace + stable-diffusion-webui

功能 stable-diffusion(文本生成图片)webui-win搭建&#xff08;开启api界面汉化&#xff09;PaddleHubHuggingFace: SD2&#xff0c;中文-alibaba/EasyNLP stable-diffusion-webui 下载与安装 环境相关下载 python&#xff08;文档推荐&#xff1a;Install Python 3.10.6 …

web-traffic-generator:一款功能强大的HTTP和HTTPs流量混淆工具

关于web-traffic-generator web-traffic-generator是一款功能强大的HTTP和HTTPs流量混淆工具&#xff0c;该工具基于纯Python开发&#xff0c;可以帮助广大研究人员在HTTP或HTTPs网络流量中提添加噪声&#xff0c;以此来实现流量混淆的目的。 本质上来说&#xff0c;web-traff…

北大发现了一种特殊类型的注意力头!

检索头的发现或许将有力地帮助大模型领域在提高长上下文推理能力、减少幻觉和压缩KV缓存方面的研究。 从 Claude100K 到 Gemini10M&#xff0c;我们正处于长上下文语言模型的时代。如何在长上下文中利用任何输入位置的信息&#xff1f;北大联合另外四所高校发现了一种特殊类型…

【Redis 开发】Redis持久化(RDB和AOF)

Redis持久化 RDBAOFRDB和AOF的区别 RDB RDB全称Redis DataBase Backup file &#xff08;Redis数据备份文件&#xff09;&#xff0c;也被称为Redis数据快照&#xff0c;简单来说就是把内存中的所有数据都记录到磁盘中&#xff0c;当Redis实例故障重启后&#xff0c;从磁盘读取…

【后端】Thymeleaf模板引擎学习笔记

文章目录 1. java体系模板引擎介绍2. 使用2.1 初步使用2.2. 引用静态资源模板2.3 引用静态资源模板(配置资源路径和后缀)2.4 整合springboot 视频地址 1. java体系模板引擎介绍 FreeMarkerThymeleafVelocity 2. 使用 2.1 初步使用 引入依赖 <dependency><groupId>…

Qt/C++ 波形绘制双缓冲下改善PaintEvent连续绘制卡顿问题(完整代码解析)

音频波形可视化&#xff1a;该控件用于将音频样本数据可视化为波形&#xff0c;常用于音频处理软件中以展示音频信号的时间域特性。 动态数据绘制&#xff1a;控件能够响应外部数据的变化并重新绘制波形&#xff0c;适用于实时或动态的音频数据流。 自定义绘制逻辑&#xff1…

Git操作与异常处理

文章目录 常用操作1、代码拉取2、代码提交3、暂存区状态4、提交代码5、推送远程仓库 异常处理【1】报错信息&#xff1a;Cannot pull into a repository with state: MERGING【2】报错信息&#xff1a;You have not concluded your merge (MERGE_HEAD exists)【3】报错信息&…

SpringCloud整合Ribbon负载均衡器

目录 一、模块一&#xff1a;提供数据 1.1 首先将第一个实例打包 1.2 使用命令行设置不同权重 1.3 打开图形化界面看看权重是否配置成功。 二、模块二&#xff1a;调用模块一 三、修改默认负载均衡策略 四、自定义规则 ​编辑 五、完整代码 5.1 目录结构 5.2 配置文件 …

Stable Diffusion学习线路,提示词及资源分享

1. 提示词的基础概念 提示词分为正面提示词&#xff08;Prompts&#xff09;和反面提示词&#xff08;Negative Prompts&#xff09;。正面提示词代表你希望画面中出现的内容&#xff0c;而反面提示词代表你不希望画面中出现的内容。提示词通常是以英文书写&#xff0c;最小单…

新版本Qt Creator安装配置

新版本Qt Creator安装配置 文章目录 新版本Qt Creator安装配置1、前言2、环境3、安装配置4、总结 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;Qt开发经验 &#x1f448; 1、前言 Qt是一个跨平台的C应用程序开发框架&#xff0c;而Qt Creator是专为Q…

树,二叉树的基本概念介绍,二叉树的性质

目录 树 树的定义 树的相关概念 树的存储结构 树在实际中的运用&#xff08;表示文件系统的目录树结构 &#xff09; 二叉树 二叉树的定义 现实中的二叉树 二叉树的特点 特殊的二叉树 1.斜树 2.满二叉树 3.完全二叉树 二叉树的性质 性质1&#xff1a;二叉树的第…

数字旅游引领智慧化浪潮:科技创新重塑旅游体验,智慧服务打造旅游新高度

在科技飞速发展的今天&#xff0c;数字旅游正以其独特的魅力引领着智慧化浪潮&#xff0c;深刻改变着旅游行业的面貌。数字技术的广泛应用&#xff0c;不仅为旅游行业注入了新的活力&#xff0c;也极大地提升了旅游体验的品质。科技创新与智慧服务的融合&#xff0c;正推动着旅…

大厂面试题:两道来自京东的关于MyBatis执行器的面试题

大家好&#xff0c;我是王有志。 今天给大家带来两道来自于京东关于的 MyBatis 面试题&#xff1a; MyBatis 提供了哪些执行器&#xff08;Executor&#xff09;&#xff1f;它们有什么区别&#xff1f;Mybatis 中如何指定 Executor 的类型&#xff1f; MyBatis 提供了哪些执…

【VBA】获取指定目录下的Excel文件,并合并所有excel中的内容。

1.新建一个excel表格。并创建两个Sheet&#xff0c;名字分别命名为FileList 和 All information。 2.按ALTF11进入 VBA编程模块&#xff0c;插入模块。 3.将如下 第五部分代码复制到模块中。 点击运行即可&#xff0c;然后就能提取指定目录下的所有excel文件信息并合并到一起…

plsql 新建sql窗口 初始化慢的问题

问题描述&#xff1a; 新建sql窗口当sql语句多的情况下初始化很慢。 解决方法&#xff1a; 采用导入表的方式。 具体方式 工具->导入表->sql插入。 使用命令窗口 导入文件&#xff0c;然后点击导入按钮。

2024第十五届蓝桥杯网络安全赛项WriteUp

欢迎关注公众号【Real返璞归真】回复【蓝桥杯2024】获取完整题目附件。 排名 安全知识 错1个选择题&#xff0c;题目说的不清楚&#xff0c;没搞懂题意。肯定不能用eval。错了理论题有点遗憾。 没想到这题前端是要解析json数据&#xff0c;排除CD选了A&#xff0c;结果发现正…

【Hadoop】-HDFS的存储原理[4]

目录 前言 一、fsck命令 1、HDFS副本块数量的配置 2、fsck命令查看文件的副本数 3、block配置 二、NameNode元数据 1、edits文件 2、fsigame文件 3、NameNode元数据管理维护 4、元数据合并控制参数 5、SecondaryNameNode的作用 三、HDFS数据的读写流程 1、数据写入…

软考之零碎片段记录(二十六)+复习巩固(十一、十二)

学习 1. 有向图邻接表中有奇数个表节点。无向图邻接表有偶数个 2. OSI模型 物理层->数据链路->网络->应用… 3. 无痕浏览 会被保存。下载的文件不会保存。浏览记录。Cookie和网站数据。表单中填写的信息。 4. 邮件收发协议 FTP不属于邮件收发协议 SMTP。简单邮…