当前位置: 首页 > news >正文

VTK知识学习(20)- 数据的存储与表达

1、数据的存储

1)、vtkDataArray

VTK中的内存分配采用连续内存,可以快速地创建、删除和遍历,称之为数据数组(DataArray),用类 vtkDataArray 实现。数组数据的访问是基于索引的,从零开始计数。
以 vtkFloatArray 类来说明如何在 VTK 中实现连续内存的数据数组。

如图所示,变量 Aray 是一个指向浮点型数组的指针,数组的长度由变量 Size 指定,由于数组的长度是动态地增加的,所以当存储数据的数组长度超出指定的长度时,会自动触发 ResizeO)操作来调整数组的长度,使数组的长度变成原来的两倍,MaxId是一个整型的偏移量,用来定义最后个被插入的数据的索引。如果没有数据插入,MaxId等于-1,否则,Maxld的值介于0和 Size之间,即0≤MaxId<Size。

连续数组的实现


此外,许多可视化数据是由多个数据分量组成的,如RGB颜色数据由红、绿、蓝三个分量组成,为了在连续数组中表达这一类数据,引入了元组(Tuple)的概念。元组是数据数组的子数组,用于存储数据类型相同的分量数据,图所示的NumberOfComponents,表示的就是数据数组里元组的组分个数。元组的组分个数称为元组的大小,在给定后不会改变,图 所示的数据数组由N个元组组成,每个元组由三个组分组成。

2)、vtkDataArray 及其子类是建立 VTK 数据对象的基础

以 vtkPolyData 为例,该类由几何数据(vtkPoints)、拓扑数据(vtkCellArray)和属性数据(vtkPointData、vtkCellData 和vtkFieldData)组成,而这些数据都是通过数据数组(vkDataArray)的形式存储。

vtkDataArray可以存储标量数据,也可以存储向量数据。

因此使用 vtkDataAray 时需要指定元组的大小。

例如,点、矢量和法向量等属性数据,元组的大小是3,而张量属性数据的元组大小是9(即3x3的矩阵),标量属性数据对元组的大小则没有任何要求。

对于处理标量属性数据的算法,通常都是只处理标量每一个元组数据的第一个组分。

VTK提供了将多组分的数据数组分离成单一组分的数据数组的类 vtkSplitField,以及将单一组分的数据数组合并成多组分的数据数组的类vtkMergeFields.

3)、示例
 private void  UseDataArray(){vtkFloatArray array = vtkFloatArray.New();array.SetNumberOfComponents(1);array.SetNumberOfTuples(10);array.SetComponent(5, 0, 10.0);array.SetTuple1(6, 9.0);double b = array.GetComponent(5, 0);Console.WriteLine(" array.GetComponent:" + b);}

示意如何创建固定长度的数据数组,首先是设置元组的组分个数为1以及总的元组个数为10。、方法SetComponent()和 GetComponent()分别用于设置及获取元组的值。
SetComponent(vtkIdType i, int j,double c):指定第i个元组的第j个组分的值为c。
GetComponet(vtkIdType i,intj):获取第i个元组的第j个组分的值,由函数返回值返回。

除了可以创建固定长度的数据数组,vtkDataArray也提供了动态创建数据数组的方法,代码如下所示:

  vtkFloatArray array2 = vtkFloatArray.New();array2.SetNumberOfComponents(1);array2.InsertNextTuple1(5);array2.InsertNextTuple1(10);double bb = array2.GetComponent(1, 0);Console.WriteLine(" array.GetComponent:" + bb);

代码首先设置每个元组的组分个数为1,方法InsertNextTuple1()用于插入一个单组分的元组,连续调用两次即为插入两个元组,其值分别为5和10,类似的方法还有
InsertNextTuple2(),InsertNextTuple3(),InsertNextTuple4(),InsertNextTuple9()等。

4)、各种数据类型

可视化数据有各种各样的类型,如简单的浮点型、整型、字节型和双精度型等,复杂的特征字符串和多维标识符等。既然有这么多种数据类型,那么数据数组是如何操作和表达这些数据的呢?

VTK通过抽象数据对象(AbstractData Obiect)提供运行时解决方案以及使用C++编译时动态绑定的方法来解决这个问题。如图 3-15 所示,vtkDataAray 是一个抽象基类,其子类实现特定类型的数据数组及相关操作。

数据数组对象

 2、数据对象的表达

VTK 里的数据对象是作为vtkDataArray的数组(即数据数组的数组)实现的。vtkDataObiect 是一种通用的可视化数据的表达,可视化算法基本都没有直接处理vtkDataObject 类型的数据,在处理某一类数据时,一般都要求数据内部具有某种组织结构。vtkDataObject 内部封装了与可视化管线的执行相关的变量和方法,包括表达数据。在vtkDataObiect 内部有一个 vtkFieldData(场数据)的实例,负责对数据的表达。如图A所示,场数据可以看作数据数组的数组,数组里的每一个元素都是一个数组,数组的类型、长度、元组的大小和名称等都可以各不相同。

图A    vtkDataObject数据对象的表达

图 B是类 vtkFieldData的继承图,从类的名字能够推断出,vtkFieldData 存储的数据是与数据对象的属性数据相关的。以vtkPolyData为例,vtkPolyData内部存储了三种类型的数据,分别是 vtkPointData、vtkCellData和 vtkFieldData。vtkPointData 是与每一个点相关联的数据,如某点上的温度值;vtkCellData是与每一个单元相关联的数据,如某个三角形单元的面积:除点和单元数据以外的数据,应该使用vtkFieldData,如 vtkPolyData 模型的质心等。

图B  vtkFieldData类的继承图

 3、小结

vtkDataArray 采用连续内存,可以快速地创建、删除和遍历。
 vtkDataObject是一种通用的可视化数据的表达,可视化算法基本都没有直接处理这个类型的数据,在处理某一类数据时,一般都要求数据内部具有某种组织结构。
         内部封装了与可视化管线的执行相关的变量和方法,包括表达数据。。
         内部有一个vtkFieldData(场数据)的实例,负责对数据的表达。
                      场数据可以看作数据数组的数组,数组里的每一个元素都是一个数组,数组的类型、长度、元组的大小和名称等都可以各不相同。

相关文章:

VTK知识学习(20)- 数据的存储与表达

1、数据的存储 1)、vtkDataArray VTK中的内存分配采用连续内存&#xff0c;可以快速地创建、删除和遍历&#xff0c;称之为数据数组(DataArray)&#xff0c;用类 vtkDataArray 实现。数组数据的访问是基于索引的&#xff0c;从零开始计数。 以 vtkFloatArray 类来说明如何在 …...

springboot网站开发-使用redis作为定时器控制手机号每日注册次数

springboot网站开发-使用redis作为定时器控制手机号每日注册次数&#xff01;为了避免&#xff0c;某些手机号&#xff0c;频繁的申请注册&#xff0c;开启了redis数据库配置的定时器模式。下面是设计代码的案例展示。 1&#xff1a; package com.blog.utils;import org.slf4…...

IntelliJ+SpringBoot项目实战(28)--整合Beetl模板框架

在前面的文章里介绍过freemarker&#xff0c;thymeleaf模板引擎&#xff0c;本文介绍另一个性能超高的模板引擎---Beetl&#xff0c;据说此模板引擎的性能远超Freemarker。官网的说法是&#xff0c;Beetl 远超过主流java模板引擎性能(引擎性能5-6倍于FreeMarker&#xff0c;2倍…...

Kafka-Connect源码分析

一、上下文 《Kafka-Connect自带示例》中我们尝试了零配置启动producer和consumer去生产和消费数据&#xff0c;那么它内部是如何实现的呢&#xff1f;下面我们从源码来揭开它神秘的面纱。 二、入口类有哪些&#xff1f; 从启动脚本&#xff08;connect-standalone.sh&#…...

项目五 李白个人生平(资源)

本项目旨在能够灵活运用整章知识点设计页面。本项目创建了“唐朝诗人群像”网站的第三个页面——即李白个人生平页面,主要完成其 HTML部分。 【项目目的】 灵活运用HTML 基本标记。掌握在 HTML页面中嵌入多媒体对象的方法。【项目内容】 利用HTML标记对网页进行结…...

计算机视觉与各个学科融合:探索新方向

目录 引言计算机视觉与其他学科的结合 与医学的结合与机械工程的结合与土木工程的结合与艺术与人文的结合发文的好处博雅知航的辅导服务 引言 计算机视觉作为人工智能领域的重要分支&#xff0c;正迅速发展并渗透到多个学科。通过与其他领域的结合&#xff0c;计算机视觉不仅…...

数据分析类论文通过stata进行数据预处理(一)

一&#xff1a;导入数据 打开Stata命令窗口&#xff0c;输入以下命令&#xff1a; use "文件路径\数据文件名.dta", clear其中&#xff0c;.dta是Stata的数据文件格式。clear选项用于在打开新数据文件前关闭当前数据集。 以下是一些导入不同格式数据的方法&#x…...

力扣——1.返回字符串中第一个唯一的字符;2.把字符串转换成整数(C++)

1.返回字符串中第一个唯一的字符 1.1题目描述 给定一个字符串s &#xff0c;找到它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 示例&#xff1a; 1.2思路 这里提供两种思路&#xff1a;第一种是利用哈希表&#xff0c;先遍历一…...

M-LAG【根桥方式】

1.M-LAG不是有单向隔离机制天然防环吗&#xff0c;为什么还要使用STP&#xff1f; 答&#xff1a;因为M-LAG设备下面不是只接服务器&#xff0c;也不是和所有下联设备组成M-LAG&#xff0c;和没有组成M-LAG的设备可能会造成环路。 2.为什么要关闭peer-link接口的生成树计算&a…...

新书速览|循序渐进Node.js企业级开发实践

《循序渐进Node.js企业级开发实践》 1 本书内容 《循序渐进Node.js企业级开发实践》结合作者多年一线开发实践&#xff0c;系统地介绍了Node.js技术栈及其在企业级开发中的应用。全书共分5部分&#xff0c;第1部分基础知识&#xff08;第1&#xff5e;3章&#xff09;&#xf…...

Xlsxwriter生成Excel文件时TypeError异常处理

在使用 XlsxWriter 生成 Excel 文件时&#xff0c;如果遇到 TypeError&#xff0c;通常是因为尝试写入的值或格式与 XlsxWriter 的限制或要求不兼容。 1、问题背景 在使用 Xlsxwriter 库生成 Excel 文件时&#xff0c;出现 TypeError: “expected string or buffer” 异常。此…...

【NLP高频面题 - LLM架构篇】大模型使用SwiGLU相对于ReLU有什么好处?

【NLP高频面题 - LLM架构篇】大模型使用SwiGLU相对于ReLU有什么好处&#xff1f; 重要性&#xff1a;★★★ &#x1f4af; NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化…...

2021 年“泰迪杯”数据分析技能赛B 题肥料登记数据分析

2021 年“泰迪杯”数据分析技能赛B 题肥料登记数据分析 完整代码请私聊 博主 # 一、背景 肥料是农业生产中一种重要的生产资料&#xff0c;其生产销售必须遵循《肥料登记管理办法》&#xff0c;依法在农业行政管理部门进行登记。各省、自治区、直辖市人民政府农业行政主管部门主…...

网络原理之 IP 协议

目录 1. IP 协议报文格式 2. 网段划分 3. 地址管理 1) 动态分配 2) NAT 机制 (网络地址转换) 3) IPv6 4. 路由选择 1. IP 协议报文格式 IP 协议是网络层的重点协议。 网络层要做的事情&#xff0c;主要就是两方面&#xff1a; 1) 地址管理 制定一系列的规则&#xff…...

在 Spring Boot 项目中使用 Thymeleaf 时,通常情况下,你需要配置热加载(Hot Reload)来在开发过程中更快速地看到页面的变化。

配置步骤&#xff1a; 1. 添加 DevTools 依赖 在 pom.xml 中添加 spring-boot-devtools 依赖。DevTools 提供了自动重启、LiveReload、模板热加载等功能。 <dependencies><!-- Spring Boot DevTools (用于热加载) --><dependency><groupId>org.spri…...

arm-linux GPIO控制-脚本及shell格式

以下是针对BCM编号27, 28, 29, 30, 31的shell命令 shell方式 导出GPIO引脚 echo 27 > /sys/class/gpio/export echo 28 > /sys/class/gpio/export echo 29 > /sys/class/gpio/export echo 30 > /sys/class/gpio/export echo 31 > /sys/class/gpio/export 设…...

Go 语言基础知识语法

很早听人说过一句话&#xff1a;“每年学习&#xff08;接触&#xff09;一门新的编程语言”&#xff0c;这听起来可能有点不太现实&#xff0c;但是其实很多种语言都是相通的。掌握新的编程语言不仅仅是增加职业工具箱中的工具&#xff0c;更是一种扩展我们思维方式、解决问题…...

贪心算法part05

文章参考来源代码随想录 (programmercarl.com) 56. 合并区间 本题和前几题类似&#xff0c;都是判断上一个元素的右边界与当前元素的左边界大小关系 但是需要注意是&#xff1a;本题需要更新结果数组元素的右边界&#xff0c;因此比较的是数组最后一个元素右边界与当前元素左…...

02、SpringMVC核心(上)

一、RequestMapping注解 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping @Reflective({ControllerMappingReflectiveProcessor.class}) public @interface RequestMapping {String name() default "";…...

EasyPlayerPro的同一个组件实例根据url不同展示视频流

效果 学习 url的组成 webrtc://192.168.1.225:8101/index/api/webrtc?applive&stream001&typeplay 协议部分 webrtc://: 这表示使用 WebRTC 协议来进行实时通信。WebRTC 允许浏览器之间直接交换音频、视频和其他数据&#xff0c;而不需要通过中间服务器 主机和端口部分…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...