VTK-vtkAbstractTransform及其子类

news2024/11/26 10:43:39

前言:本博文主要研究vtkAbstractTransform及其子类的实现原理,以及由此扩展的类。

目录

vtkAbstractTransform

vtkGeneralTransform

vtkGeoSphereTransform(9.0.3中没有该接口)

vtkGeoTransform(9.0.3中没有该接口)

vtkHomogeneousTransform

vtkIdentityTransform

vtkIterativeClosestPointTransform

vtkLandmarkTransform

vtkMartixToLinearTransform

vtkTransform

vtkWarpTransform

vtkCylindricalTransform

vtkSphericalTransform

vtkThinPlateSplineTransform


 

vtkAbstractTransform

位置:..\Common\Transforms

描述:vtkAbstractTransforms是VTK中几何变换的父类。vtk中几何变换主要分为两类:翘曲变换和齐次变换(包括线性变换)。

vtkGeneralTransform

描述:vtkGeneralTransform类似于vtkTransform和vtkPerspectiveTransform,但是它可以使用任何vtkAbstractTransform作为输入。然而,它不如其他两个有效,因为任意变换不能通过矩阵乘法连接起来。转换连接通过传递每个输入点来模拟。

vtkGeoSphereTransform(9.0.3中没有该接口)

vtkGeoTransform(9.0.3中没有该接口)

vtkHomogeneousTransform

描述:齐次变换。主要包括vtkLinearTransform、vtkMatrixToHomgeneousTransform、vtkPerspectiveTransform。vtkLinearTransform为线性几何变换。vtkPerspectiveTransform透视变换。vtkMatrixToHomgeneousTransform是一个非常简单的类,允许使用vtkMatrix4x4来代替vtkHomogeneousTransform或vtkAbstractTransform。例如,如果您使用它作为矩阵和vtkTransformPolyDataFilter之间的代理,那么对矩阵的任何修改都将自动反映在过滤器的输出中。

vtkLinearTransform包含以下子类:

vtkIdentityTransform

描述:vtkIdentityTransform只是简单的传递坐标而数据不变。其它转换类型也可以实现,但该接口的效率更高。

vtkIterativeClosestPointTransform(9.0.3中没有该接口)

vtkLandmarkTransform

描述:vtkLandmarkTransform由两组地标定义,计算的转换给出了最小二乘意义上的最佳拟合映射。索引是对应的,所以第一个集合中的点1将被映射到第二个集合中的点1,以此类推。调用SetSourceLandmarks和SetTargetLandmarks来指定两组地标,确保它们具有相同数量的点。

注意:无论何时添加、减去或设置点,都必须在vtkPoints对象上调用Modified(),否则转换可能不会更新。

vtkMartixToLinearTransform

描述:vtkMartixToLinearTransform是一个非常简单的类,允许使用vtkMatrix4x4来代替vtkLinearTransform或vtkAbstractTransform。例如,如果您使用它作为矩阵和vtkTransformPolyDataFilter之间的代理,那么对矩阵的任何修改都将自动反映在过滤器的输出中。

vtkTransform

描述:vtkTransform可用于描述三维线性(也称为仿射)坐标变换的全范围,在内部表示为4x4齐次变换矩阵。当您创建一个新的vtkTransform时,它总是初始化为标识转换。

SetInput()方法允许您将另一个变换(而不是恒等变换)设置为基变换。有一个管道机制来确保当输入被修改时,当前转换将相应地更新。Concatenate()方法也支持这种管道机制。

大多数用于操作此转换的方法,例如翻译,旋转和连接,可以在PreMultiply(默认值)或PostMultiply ode中操作。在预正片叠底模式下,转换、拼接等将在当前矩阵表示的任何转换之前发生。在PostMultiply模式下,附加的转换将发生在当前矩阵表示的任何转换之后。这个类在一个右手坐标系中使用右手旋转执行它的所有操作。其他一些图形库使用左手坐标系和旋转。

vtkWarpTransform

描述:翘曲变换。vtk中非线性几何变换的父类,包括vtkBSplineTransform、vtkCylindricalTransform、vtkGridTransform、vtkSphericalTransform、 vtkThinPlateSplineTransform。其中vtkBSplineTransform和vtkGridTransform在9.0.3版本中不存在。

vtkCylindricalTransform

描述:vtkCylindricalTransform将(r,theta,z)坐标转换为(x,y,z)坐标,然后再转换回来。角以弧度表示。默认情况下,它将柱坐标转换为矩形坐标,但GetInverse()返回的转换将做相反的事情。使用的方程是x = r*cos() y = r*sin() z = z。

vtkSphericalTransform

描述:vtkSphericalTransform将(r,phi,theta)坐标转换为(x,y,z)坐标,然后再转换回来。角以弧度表示。默认情况下,它将球形坐标转换为矩形坐标,但GetInverse()返回的转换将做相反的事情。所使用的方程是x = r*sin()*cos() ,y = *sin()*sin() ,z = r*cos()。

vtkThinPlateSplineTransform

描述:

vtkThinPlateSplineTransform描述了由一组源地标和目标地标定义的非线性扭曲转换。网格上任何靠近源地标的点都将被移动到靠近相应目标地标的地方。中间的点平滑地插入使用布克斯坦薄板样条算法。

要获得正确的TPS扭曲,如果数据是2D,则使用R2LogR内核,如果数据是3D,则使用R内核。或者你可以指定你自己的RBF。(因此这个类比纯TPS转换更通用。)

注意:

1)反变换是用迭代法计算的,比正变换更费时。

2)无论何时添加、减去或设置点,都必须在vtkPoints对象上调用Modified(),否则转换可能不会更新。

3)共线点构型(除了那些位于XY平面上的点)导致不稳定转换。通过禁用批量转换正则化,可以为任何配置计算正向转换。

另:

vtkAbstractTransform可以作为vtkTransformPolyDataFilter和vtkTransformFilter的输入。但两者存在不同之处。vtkTransformPolyDataFilter继承自父类vtkPolyDataAlgorithm;vtkTransformFilter继承自父类vtkPointSetAlgorithm。实现方式如下:

    vtkSmartPointer<vtkTransform> transform =
        vtkSmartPointer<vtkTransform>::New();
    transform->Translate(100, 100, 0);
    vtkSmartPointer<vtkTransformFilter> transformFilter =
        vtkSmartPointer<vtkTransformFilter>::New();
    transformFilter->SetInputConnection(stlreader->GetOutputPort());
    transformFilter->SetTransform(transform);
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(transformFilter->GetOutputPort());
    vtkSmartPointer<vtkActor> actor =
        vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    //actor->SetPosition(200,200,0);
    vtkNew<vtkPolyData> pd;
    vtkNew<vtkTransformPolyDataFilter> transformFilter2 ;
    transformFilter2->SetInputData(stlreader->GetOutput());
    transformFilter2->SetTransform(transform);
    transformFilter2->Update();
    //transformFilter2->GetOutput(); 为vtkPolyData数据。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业微信客户联系自定义工具栏开发

一、问题说明&#xff1a;企业微信中私聊微信客户&#xff0c;在聊天输入框上面有一行快捷工具&#xff0c;这边怎么自定义开发&#xff1f;如下图&#xff0c;我们可以点击快捷发送&#xff0c;然后弹出一个页面&#xff0c;页面中有我们需要发送给当前会话的各种资源&#xf…

Maven高级-聚合-继承

多模块构建维护 作用&#xff1a;聚合用于快速构建maven工程&#xff0c;一次性构建多个项目/模块。 制作方式&#xff1a; 创建一个空模块&#xff0c;打包类型定义为pom <packaging>pom</packaging>定义当前模块进行构建操作时关联的其他模块名称 <modules&g…

2021年MathorCup高校数学建模挑战赛—大数据竞赛B题信息流智能推荐算法中的序列评估问题求解全过程文档及程序

2021年MathorCup高校数学建模挑战赛—大数据竞赛 B题 信息流智能推荐算法中的序列评估问题 原题再现&#xff1a; 随着互联网信息的蓬勃发展&#xff0c;用户在使用互联网应用时面临着信息过载的问题。推荐算法的出现&#xff0c;满足了用户个性化的内容消费需求&#xff0c;…

分布式任务调度系列 - XXL-JOB

一、前言 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 二、传统的定时任务 1. 概念 1.1、定时任务的基本概念 程序为解决一个信息处理任务而预先编制的工作执行方案&#xff0c;这就是定时任务&#xff0c;核心组成如下&#xff1a; 执行器&#…

28个数据可视化图表的总结和介绍

数据可视化本身就是一种通用语言。我们这里通用语言的意思是&#xff1a;它能够向各行各业的人表示信息。它打破了语言和技术理解的障碍。数据是一些数字和文字的组合&#xff0c;但是可视化可以展示数据包含的信息。 “数据可视化有助于弥合数字和文字之间的差距”——Brie E…

C++入门——引用

1.概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间 类型& 引用变量名(对象名) 引用实体&#xff1b; 而引用类型必然要与引用实体的类型一致。 …

下载微信小程序中的视频

工具准备&#xff1a;Fiddler 我这里用的5.0的版本。&#xff08;这个用来抓取视频下载地址&#xff09;Internet Download Manager&#xff08;idm&#xff09;版本6.37&#xff08;这个用来下载视频&#xff09;步骤&#xff1a;打开Fiddler如下图配置后抓包2.登录PC版微信&a…

1.5日报

今天完成项目环境的搭建&#xff0c;并成功剥离TestMrl相关接口&#xff0c;并成功运行 遇到的问题&#xff1a; 缺少 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <v…

展望2023,回首2022,让我们一起努力

回首2022 时光如白驹过隙般&#xff0c;飞逝而过。时光荏苒&#xff0c;日月如梭。不知不觉中&#xff0c;充满希望与光明的2023年已经到来了。回首2022年&#xff0c;有喜悦&#xff0c;有失落&#xff0c;有艰辛与困难&#xff0c;也有解决困难后的欣慰&#xff0c;有着无数…

第03章 运算符

运算符介绍 运算符是一种特殊的符号&#xff0c;用以表示数据间的运算、赋值和比较等。 算数运算符 算数运算符用于对数值型变量间的计算。 注意&#xff1a;图片中最后一行&#xff0c;字符串相加的结果中间没有空格&#xff0c;这个课件错误❌。 除法[ / ] System.out.pr…

RabbitMQ 消息类型

RabbitMQ 消息类型 下面我们简单介绍下RabbitMQ的一些消息种类&#xff0c;并结合Java代码进行学习。 如果需要执行代码&#xff0c;需要下载RabbitMQ的客户端&#xff08;例如java客户端&#xff1a; https://www.rabbitmq.com/java-client.html&#xff09; 使用maven&…

聊天突然尬住?教你用Python一键获取斗图表情包,各种表情包轻松化解尴尬

很多兄弟在聊天上没有下太多的功夫&#xff0c;导致自己聊天的时候很容易尬住&#xff0c;然后就不知道聊啥了&#xff0c;这时候合适表情包分分钟就能救场&#xff0c;但是一看自己收藏的表情包&#xff0c;好家伙&#xff0c;两只手都数得过来。 所以今天来给兄弟们分享一下…

IDEA书签,备份使用,全分支共享

IDEA原本设计就是给单分支保存书签使用的&#xff0c;但是我比较喜欢多个分支用同一个IDEA书签。然后在网上找到很久的IDEA书签全分支共享的办法&#xff0c;真心没找到合适的&#xff0c;自己浅浅总结了一下。首先找到我们需要备份书签的项目的目录然后在项目的目录下打开隐藏…

小程序 超长页面截图保存web-view+html2canvas

web-view文档建议参考----支付宝提供的文档&#xff0c;html2canvas官方文档&#xff08;官网可以下载html2canvas.js 和 html2canvas.min.js&#xff09;。由于篇幅受限&#xff0c;这里就贴了一下用法&#xff0c;对于web-view的配置情况&#xff0c;需要自己去查看文档&…

【测试】开发模型+测试模型

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、开发模型和测试模型概述二、 开发模型一&#xff09; 瀑布模型二&#xff09;螺旋模型三&#xff09;增量模型和迭代模型四&#xff09;敏捷模型【重点:sunny:】三、 测试模型一&#xff09;V模型二&#xff09;…

【4.2】Ribbon负载均衡策略

【4.2】Ribbon负载均衡策略1 Ribbon--负载均衡策略2.1 修改负载均衡规则--代码方式2.1.1 具体测试&#xff1a;2.2 修改负载均衡规则--配置文件方式2.2.1 具体配置3 总结Ribbon负载均衡原理 中学习到&#xff1a; IRule接口决定了负载均衡的策略。 接下来学习IRule接口的实现有…

【Java编程进阶】Object类及常用方法详解

Java 编程基础教程系列&#xff1a;Java 编程进阶之路【从入门到精通】 &#xff0c;从入门到精通一站学习&#xff0c;买不了吃亏&#xff0c;买不了上当&#xff01;&#xff01; 文章目录1. Object类2. 常用的方法2.1 toString 方法2.2 equals 方法2.3 hashcode 方法3. 注意…

Verilog语法笔记(夏宇闻第三版)-数据类型及其常量、变量

目录 常量&#xff1a; 整数&#xff1a; x和z值: 负数: 下划线(underscore_)&#xff1a; 参数(Parameter)型&#xff1a; 变量&#xff1a; wire型&#xff1a; reg型&#xff1a; memory型&#xff1a; Verilog HDL中总共有十九种数据类型,数据类型是用来表示数字…

SSH远程连接服务详解

远程连接服务器 一&#xff0c;远程连接服务器简介 1、什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录 linux 主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在…

MyBatis Plus学习笔记

MyBatis Plus 国产的开源框架&#xff0c;基于 MyBatis 在Mybatis-Plus中&#xff0c;内置了代码生成器&#xff0c;我们可以通过该工具&#xff0c;生成我们需要的代码&#xff0c;例如&#xff1a;entity层&#xff0c;controller层&#xff0c;mapper层&#xff0c;service…