(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.pswp.cn/news/902310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902310.shtml
英文地址,請注明出處:http://en.pswp.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…