(13)VTK C++开发示例 --- 透视变换

文章目录

    • 1. 概述
    • 2. CMake链接VTK
    • 3. main.cpp文件
    • 4. 演示效果


更多精彩内容
👉内容导航 👈
👉VTK开发 👈

1. 概述

在VTK(Visualization Toolkit)中,vtkPerspectiveTransformvtkTransform 都是用于几何变换的类,但它们有着显著的区别和不同的应用场景。
模块:CommonTransforms

功能和用途

vtkTransform

  • 功能vtkTransform 是一个通用的变换类,支持线性变换(如旋转、缩放、平移)和非线性变换(如仿射变换)。
  • 用途:主要用于三维空间中的几何变换,如模型的位置调整、旋转和缩放。

vtkPerspectiveTransform

  • 功能vtkPerspectiveTransform 是一种特殊的变换,用于模拟透视投影的效果。
  • 用途:主要用于模拟相机视角下的物体变换,常用于三维场景渲染中的视图变换。

变换类型

  • vtkTransform:支持各种类型的线性变换,包括平移(Translation)、旋转(Rotation)、缩放(Scaling)等。
  • vtkPerspectiveTransform:主要进行透视投影变换,这种变换会改变物体在视觉上的大小和形状,以模拟相机观察的效果。

数学表示

  • vtkTransform:通常使用4x4的齐次坐标矩阵来表示变换。
  • vtkPerspectiveTransform:虽然也可以使用4x4矩阵表示,但其内部实现和计算方式更多地考虑了透视投影的数学特性。
环境说明
系统ubuntu22.04、windows11
cmake3.22、3.25
Qt5.14.2
编译器g++11.4、msvc2017
VTK9.4.1

2. CMake链接VTK

cmake_minimum_required(VERSION 3.20 FATAL_ERROR) # 设置CMake最低版本
project(vtk2) # 设置项目名称
# 查找VTK库
find_package(VTK COMPONENTS
CommonCore
CommonTransforms
) 
if(NOT VTK_FOUND)
message("VTK not found")
return()
endif()add_executable(vtk2 main.cpp) # 添加可执行文件target_link_libraries(vtk2 PRIVATE ${VTK_LIBRARIES}) # 链接VTK库
vtk_module_autoinit(TARGETS vtk2 MODULES ${VTK_LIBRARIES}) # 初始化VTK模块

3. main.cpp文件

/********************************************************************************
* 文件名:   main.cpp
* 创建时间: 2025-03-13 20:41:02
* 开发者:   MHF
* 邮箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include<iostream>
#include<vtkMatrix4x4.h>  //矩阵
#include<vtkNew.h> //智能指针
#include<vtkPerspectiveTransform.h> //透视变换
#include<vtkTransform.h> //变换
using namespace std;int main()
{vtkNew<vtkMatrix4x4> m; // 创建矩阵// 设置矩阵元素值m->SetElement(0, 0, 1);m->SetElement(0, 1, 2);m->SetElement(0, 2, 3);m->SetElement(0, 3, 4);m->SetElement(1, 0, 2);m->SetElement(1, 1, 2);m->SetElement(1, 2, 3);m->SetElement(1, 3, 4);m->SetElement(2, 0, 3);m->SetElement(2, 1, 2);m->SetElement(2, 2, 3);m->SetElement(2, 3, 4);m->SetElement(3, 0, 4);m->SetElement(3, 1, 2);m->SetElement(3, 2, 3);m->SetElement(3, 3, 4);vtkNew<vtkPerspectiveTransform> pt; // 创建透视变换pt->SetMatrix(m); // 设置矩阵vtkNew<vtkTransform> t; // 创建变换t->SetMatrix(m); // 设置矩阵double p[3] = {1, 2, 3}; // 点坐标double p1[3]; // 变换后的点坐标t->TransformPoint(p, p1); // 变换点坐标cout << "变换后的点坐标:" << p1[0] << " " << p1[1] << " " << p1[2] << endl;double p2[3]; // 透视变换后的点坐标pt->TransformPoint(p, p2); // 透视变换点坐标cout << "透视变换后的点坐标:" << p2[0] << " " << p2[1] << " " << p2[2] << endl;return 0;
}

4. 演示效果

PS E:\Code\C++\vtk1\build\Debug> ."E:/Code/C++/vtk1/build/Debug/vtk2.exe"
变换后的点坐标:18 19 20
透视变换后的点坐标:0.857143 0.904762 0.952381


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

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

相关文章

深入探索Qt异步编程--从信号槽到Future

概述 在现代软件开发中,应用程序的响应速度和用户体验是至关重要的。尤其是在图形用户界面(GUI)应用中,长时间运行的任务如果直接在主线程执行会导致界面冻结,严重影响用户体验。 Qt提供了一系列工具和技术来帮助开发者实现异步编程,从而避免这些问题。本文将深入探讨Qt…

基于Python的图片/签名转CAD小工具开发方案

基于Python的图片/签名转CAD工具开发方案 一、项目背景 传统设计流程中&#xff0c;设计师常常需要将手写签名或扫描图纸转换为CAD格式。本文介绍如何利用Python快速开发图像矢量化工具&#xff0c;实现&#xff1a; &#x1f4f7; 图像自动预处理✏️ 轮廓精确提取⚙️ 参数…

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor

CangjieMagic框架&#xff1a;使用华为仓颉编程语言编写&#xff0c;专门用于开发AI Agent&#xff0c;支持鸿蒙、Windows、macOS、Linux等系统。 这篇文章剖析一下 CangjieMagic 框架中的 PlanReactExecutor。 1 PlanReactExecutor的工作原理 #mermaid-svg-OqJUCSoxZkzylbDY…

一文了解相位阵列天线中的真时延

本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板&#xff0c;以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络&#xff0c;而宽带通信系统正在努力满…

Java中 关于编译(Compilation)、类加载(Class Loading) 和 运行(Execution)的详细区别解析

以下是Java中 编译&#xff08;Compilation&#xff09;、类加载&#xff08;Class Loading&#xff09; 和 运行&#xff08;Execution&#xff09; 的详细区别解析&#xff1a; 1. 编译&#xff08;Compilation&#xff09; 定义 将Java源代码&#xff08;.java文件&#x…

【KWDB 创作者计划】_深度学习篇---松科AI加速棒

文章目录 前言一、简介二、安装与配置硬件连接驱动安装软件环境配置三、使用步骤初始化设备调用SDK接口检测设备状态:集成到AI项目四、注意事项兼容性散热固件更新安全移除五、硬件架构与技术规格核心芯片专用AI处理器内存配置接口类型物理接口虚拟接口能效比散热设计六、软件…

如何清理Windows系统中已失效或已删除应用的默认打开方式设置

在使用Windows系统的过程中&#xff0c;我们可能会遇到一些问题&#xff1a;某些已卸载或失效的应用程序仍然出现在默认打开方式的列表中&#xff0c;这不仅显得杂乱&#xff0c;还可能影响我们快速找到正确的程序来打开文件。 如图&#xff0c;显示应用已经被geek强制删除&am…

NFC碰一碰发视频推广工具开发注意事项丨支持OEM搭建

随着线下门店短视频推广需求的爆发&#xff0c;基于NFC技术的“碰一碰发视频”推广工具成为商业热点。集星引擎在开发同类系统时&#xff0c;总结出六大核心开发注意事项&#xff0c;帮助技术团队与品牌方少走弯路&#xff0c;打造真正贴合商户需求的实用型工具&#xff1a; 一…

pgsql中使用jsonb的mybatis-plus和Spring Data JPA的配置

在pgsql中使用jsonb类型的数据时&#xff0c;实体对象要对其进行一些相关的配置&#xff0c;而mybatis和jpa中使用各不相同。 在项目中经常会结合 MyBatis-Plus 和 JPA 进行开发&#xff0c;MyBatis_plus对于操作数据更灵活&#xff0c;jpa可以自动建表&#xff0c;两者各取其…

kotlin + spirngboot3 + spring security6 配置登录与JWT

1. 导包 implementation("com.auth0:java-jwt:3.14.0") implementation("org.springframework.boot:spring-boot-starter-security")配置用户实体类 Entity Table(name "users") data class User(IdGeneratedValue(strategy GenerationType.I…

【JavaWeb后端开发03】MySQL入门

文章目录 1. 前言1.1 引言1.2 相关概念 2. MySQL概述2.1 安装2.2 连接2.2.1 介绍2.2.2 企业使用方式(了解) 2.3 数据模型2.3.1 **关系型数据库&#xff08;RDBMS&#xff09;**2.3.2 数据模型 3. SQL语句3.1 DDL语句3.1.1 数据库操作3.1.1.1 查询数据库3.1.1.2 创建数据库3.1.1…

人工智能在智能家居中的应用与发展

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;智能家居逐渐成为现代生活的重要组成部分。从智能语音助手到智能家电&#xff0c;AI正在改变我们与家居环境的互动方式&#xff0c;让生活更加便捷、舒适和高效。本文将探讨人工智能在智能家居中的应用现状、…

【EasyPan】项目常见问题解答(自用持续更新中…)

EasyPan 网盘项目介绍 一、项目概述 EasyPan 是一个基于 Vue3 SpringBoot 的网盘系统&#xff0c;支持文件存储、在线预览、分享协作及后台管理&#xff0c;技术栈涵盖主流前后端框架及中间件&#xff08;MySQL、Redis、FFmpeg&#xff09;。 二、核心功能模块 用户认证 注册…

4.1腾讯校招简历优化与自我介绍攻略:公式化表达+结构化呈现

腾讯校招简历优化与自我介绍攻略&#xff1a;公式化表达结构化呈现 在腾讯校招中&#xff0c;简历是敲开面试大门的第一块砖&#xff0c;自我介绍则是展现个人魅力的黄金30秒。本文结合腾讯面试官偏好&#xff0c;拆解简历撰写公式、自我介绍黄金结构及分岗位避坑指南&#xf…

【Easylive】consumes = MediaType.MULTIPART_FORM_DATA_VALUE 与 @RequestPart

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 consumes MediaType.MULTIPART_FORM_DATA_VALUE 的作用 1. 定义请求的数据格式 • 作用&#xff1a;告诉 Feign 和 HTTP 客户端&#xff0c;这个接口 接收的是 multipart/form-data 格式的…

OpenSSL1.1.1d windows安装包资源使用

环境&#xff1a; QT版本&#xff1a;5.14.2 用途: openssl1.1.1d版本 问题描述&#xff1a; 今天尝试用百度云人脸识别api搭载QT的人脸识别程序&#xff0c;需要用到 QNetworkManager 访问 https 开头的网址。 但是遇到了QT缺乏 openssl 的相关问题&#xff0c;找了大半天…

代码实战保险花销预测

文章目录 摘要项目地址实战代码&#xff08;初级版&#xff09;实战代码&#xff08;进阶版&#xff09; 摘要 本文介绍了一个完整的机器学习流程项目&#xff0c;重点涵盖了多元线性回归的建模与评估方法。项目详细讲解了特征工程中的多项实用技巧&#xff0c;包括&#xff1…

RS232 串行通信:C++ 实现指南

文章目录 一、RS232 简介1. 电气特性2. 传输速率3. 传输距离 二、在 C 中实现 RS232 通信1. Windows 平台&#xff08;1&#xff09;打开串行端口&#xff08;2&#xff09;配置串行通信参数&#xff08;3&#xff09;发送数据&#xff08;4&#xff09;接收数据&#xff08;5&…

Linux指令合集

一、VI的使用 命令行模式&#xff1a;默认此模式&#xff0c;从输入模式回到命令行模式&#xff1a;esc &#xff0c; esc按完&#xff0c;insert消失 输入模式&#xff1a;按 i 进入 &#xff0c; 看到insert就能编辑代码 退出vi 保存代码 命令行模式下 按&#xf…

IDEA使用jclasslib Bytecode Viewer查看jvm字节码

学习jvm的时候&#xff0c;想查看字节码和局部变量表&#xff0c;可以使用idea安装jclasslib Bytecode View插件查看。 &#xff08;1&#xff09;安装工具&#xff1a; 安装完成后需要重启idea. &#xff08;2&#xff09;准备一段代码&#xff0c;编译运行 package com.te…