VTK编程指南<五>:VTK中的坐标系统、空间变换及VTK矩阵详解
1、坐标系统
计算机图形学里常用的坐标系统主要有 4 种,分别是 Model 坐标系统、World 坐标系统、View坐标系统和 Display坐标系统(这些名词在不同的书里的中文表述均有所差别,所以直接使用英文名词表示),此外还有两种表示坐标点的方式:以屏幕像素值为单位和归一化坐标值(各坐标轴取值范围为[-1,1])。它们之间的关系如图 所示。
Model 坐标系统是定义模型时所采用的坐标系统,通常是局部的笛卡儿坐标系。
World坐标系统是放置Actor 的三维空间坐标系,Actor(vtkActor 类)其中的一个功能就是负责将模型从 Model 坐标系统变换到 World 坐标系统。每一个模型可以定义自己的 Model坐标系统,但World 坐标系只有一个,每一个Actor 必须通过放缩、旋转、平移等操作将 Model坐标系统转换到World 坐标系。World 坐标系同时也是灯光和相机所在的坐标系统。
View 坐标系统表示的是相机所看见的坐标系统。X、Y、Z 轴取值为[-1,1],X、Y 值表示像平面上的位置,Z 值表示到相机的距离。相机负责将 World 坐标系变换到 View 坐标系。
Display 坐标系统与 View 坐标系统类似,但是各坐标轴的取值不是[-1,1],而是使用屏幕像素值。屏幕上显示的不同窗口的大小会影响 View 坐标系的坐标值[-1,1]到 Display 坐标系的映射。可以把不同的渲染场景放在同一个窗口进行显示,例如,在一个窗口里,分为左右两个渲染场景,这左右的渲染场景(vtkRenderer)就是不同的视口(Viewport)。
示例 Viewport实现将一个窗口分为 4个视口,用vtkRenderer::SetViewport()来设置视口的范围(取值为[0,1]):
renderer1->SetViewport(0.0,0.0,0.5,0.5);
renderer2->SetViewport(0.5,0.0,1.0,0.5);
renderer3->SetViewport(0.0,0.5,0.5,1.0);
renderer4->SetViewport(0.5,0.5,1.0,1.0);
在VTK里,Model坐标系统用得比较少,其他三种坐标系统经常使用。它们之间的变换则是由类 vtkCoordinate 进行管理的。根据坐标值的单位、取值范围等不同,可以将坐标系统细分为如下几类。
- DISPLAY——X、Y轴的坐标取值为渲染窗口的像素值。坐标原点位于渲染窗口的左下角,这个对于VTK里的所有二维坐标系统都是一样的,且VTK里的坐标系统都是采用右手坐标系。
- NORMALIZED DISPLAY——X、Y 轴坐标取值范围为[0,1],跟 DISPLAY一样,也是定义在渲染窗口里的。
- VIEWPORT——X、Y的坐标值定义在视口或者渲染器(Renderer)里。
- NORMALIZED VIEWPORT——X、Y 坐标值定义在视口或渲染器里,取值范围为[0,1]。
- VIEW ——X、Y、Z 坐标值定义在相机所在的坐标系统里,取值范围为[-1,1],Z值表示深度信息。
- WORLD——X、Y、Z坐标值定义在世界坐标系统。
- USERDEFINED——用户自定义坐标系统。
vtkCoordinate 可以用来表示坐标系统,其内部提供了函数接口来定义坐标系统:
SetCoordinateSystemToDisplay )
SetCoordinateSystemToNormalizedDisplay ()
SetCoordinateSystemToViewport ()
SetCoordinateSystemToNormalizedViewport )
SetCoordinateSystemToView O
SetCoordinateSystemToWorld ()
另外,该类还实现这些坐标系统之间的转换,例如下述代码实现了归一化窗口坐标与窗口坐标之间的转换:
vtkSmartPointer<vtkCoordinate>coordinate =
vtkSmartPointer<vtkCoordinate>::New);
coordinate->SetCoordinateSystemToNormalizedDisplay();
coordinate->SetValue(.5,.5,0);int*val;
val =coordinate_>GetComputedDisplay Value(renderer);
这里先调用了SetCoordinateSystemToNormalizedDisplay()设置坐标系统为归一化窗口坐标,并设置坐标值为(0.5,0.5,0),即屏幕的中心;然后通过函数 GetComputedDisplayValue()实现窗口坐标的转换。该类中坐标系统转换函数如下:
GetComputedWorldValue)
GetComputedViewportValue()
GetComputedDisplayValue)
GetComputedLocalDisplayValue()
GetComputedDoubleViewportValue()
GetComputedDoubleDisplayValue)
GetComputedUserDefinedValue()
2、空间变换
在三维空间里定义的三维模型,最后显示时都是投影到二维平面,比如在屏幕上显示。三维到二维的投影包括透视投影(Perspective Projection)和正交投影(Orthogonal Projection)。正交投影也叫平行投影。
VTK 里与空间变换相关的类有 vtkTransform2D,vtkTransform,vtkPerspectiveTransform,vtkGeneralTransform,vtkTransformFilter,vtkMatrix4 X 4 等。例如下面代码实现了vtkActor对象的空间变换:
vtkSmartPointer<vtkTransform>transform =
vtkSmartPointer<vtkTransform>::New);
transform->PostMultiply0;
transform->RotateZ(40);
transform->Translate(10,0,0);
cylinderActor->SetUserTransform(transform);
先定义了vtkTransform 对象,并设置使用右乘计算变换矩阵。RotateZ()设置绕 Z 轴旋转40°,并使用Translate()设置平移大小为(10,0,0),最后通过 vtkActor::SetUserTransform()方法设置用户定义的变换矩阵,实现模型的空间变换。
3、矩阵
3.1、齐次坐标
常见的点一般是Pt(X,Y,Z),相当于一个1×3矩阵,而矩阵相乘的话一般是第一个矩阵的列数要等于第二个矩阵的行数。此处需要引入齐次坐标的概念:从广义上讲,齐次坐标就是用n+1维向量表示n 维向量,即将n维空间的点用 n+1维坐标表示。例如,一般笛卡尔坐标系中的二维点向量[x y]可用齐次坐标表示为[Hx Hx H],其中最后一维坐标是一个标量,称为比例因子。利用齐次坐标可以将平移、旋转、比例、投影等几何变换统一到矩阵的乘法上来,为图形变换提供方便。
该矩阵在右手坐标系中定义,其中左上角部分产生比例、对称、错切和旋转变换,右上角部分产生平移变换;左下角部分产生透视变换;右下角部分产生全比例变换。
3.2、矩阵旋转
有兴趣可以将上述三个旋转矩阵按照不同的顺序进行相乘,得到的结果也是不一样的,例如:
1)先旋转x轴再旋转y轴再旋转z轴;
2)先旋转y轴再旋转x轴再旋转z轴;
3)先旋转z轴再旋转y轴再旋转x轴;
3.3、vtkMatrix4x4类
3.3.1 vtkMatrix4x4初始化
matrix1:
-0.013 -0.986 0.165 -133
-0.017 0.166 0.986 -35
-1 0.01 -0.02 40
0 0 0 1
vtkMatrix4x4* matrix1 = vtkMatrix4x4::New();matrix1->Identity();matrix1->SetElement(0, 0, -0.013);matrix1->SetElement(0, 1, -0.986);matrix1->SetElement(0, 2, 0.165);matrix1->SetElement(0, 3, -133);matrix1->SetElement(1, 0, -0.017);matrix1->SetElement(1, 1, 0.166);matrix1->SetElement(1, 2, 0.986);matrix1->SetElement(1, 3, -35);matrix1->SetElement(2, 0, -1.0);matrix1->SetElement(2, 1, 0.01);matrix1->SetElement(2, 2, -0.02);matrix1->SetElement(2, 3, 40);
3.3.2 vtkMatrix4x4相乘
下面两个矩阵的结果是不一样的,也就是常说的矩阵乘法左乘和右乘不一样。
vtkMatrix4x4::Multiply4x4(matrix1, matrix2, matrix3);vtkMatrix4x4::Multiply4x4(matrix2, matrix1, matrix4);
下面是完整的结果和代码:
#include <iostream>
#include <vtkMatrix4x4.h>int main()
{vtkMatrix4x4* matrix1 = vtkMatrix4x4::New();matrix1->Identity();matrix1->SetElement(0, 0, -0.013);matrix1->SetElement(0, 1, -0.986);matrix1->SetElement(0, 2, 0.165);matrix1->SetElement(0, 3, -133);matrix1->SetElement(1, 0, -0.017);matrix1->SetElement(1, 1, 0.166);matrix1->SetElement(1, 2, 0.986);matrix1->SetElement(1, 3, -35);matrix1->SetElement(2, 0, -1.0);matrix1->SetElement(2, 1, 0.01);matrix1->SetElement(2, 2, -0.02);matrix1->SetElement(2, 3, 40);vtkMatrix4x4* matrix2 = vtkMatrix4x4::New();matrix2->Identity();matrix2->SetElement(0, 3, -140);matrix2->SetElement(1, 3, -140);matrix2->SetElement(2, 3, -143);vtkMatrix4x4* matrix3 = vtkMatrix4x4::New();matrix3->Identity();vtkMatrix4x4* matrix4 = vtkMatrix4x4::New();matrix4->Identity();vtkMatrix4x4::Multiply4x4(matrix1, matrix2, matrix3);vtkMatrix4x4::Multiply4x4(matrix2, matrix1, matrix4);// 打印结果矩阵以验证std::cout << "matrix1: " << std::endl;for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){std::cout << matrix1->GetElement(i, j) << " ";}std::cout << std::endl;}std::cout << "matrix2: " << std::endl;for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){std::cout << matrix2->GetElement(i, j) << " ";}std::cout << std::endl;}std::cout << std::endl;std::cout << "matrix1 * matrix2: " << std::endl;for (int i = 0; i < 4; ++i) {for (int j = 0; j < 4; ++j) {std::cout << matrix3->GetElement(i, j) << " ";}std::cout << std::endl;}std::cout << std::endl;std::cout << "matrix2 * matrix1: " << std::endl;for (int i = 0; i < 4; ++i){for (int j = 0; j < 4; ++j){std::cout << matrix4->GetElement(i, j) << " ";}std::cout << std::endl;}// 释放内存matrix1->Delete();matrix2->Delete();matrix3->Delete();matrix4->Delete();return 1;
}
相关文章:
VTK编程指南<五>:VTK中的坐标系统、空间变换及VTK矩阵详解
1、坐标系统 计算机图形学里常用的坐标系统主要有 4 种,分别是 Model 坐标系统、World 坐标系统、View坐标系统和 Display坐标系统(这些名词在不同的书里的中文表述均有所差别,所以直接使用英文名词表示),此外还有两种表示坐标点的方式&#…...
Linux centos7 下载MySQL5.7仓库的命令
wget 是一个非常强大的命令行工具,用于从网络上下载文件。它是 Linux 和其他 Unix-like 系统中常用的工具之一。wget 命令的各个参数有着不同的含义,下面是您提供的命令 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.onarch.r…...
Java Serializable 序列化
Java的Serializable接口是Java序列化机制的核心,它允许一个对象的状态被转换为字节流,从而可以方便地进行存储或传输。 序列化后的对象可以被写到数据库、存储到文件系统,或者通过网络传输。 要在 Java 中使一个类可序列化,你需要…...
【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析
【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析 1. 初始化 QNX 开发环境2. 使用 gdb 解析 Coredump3. 查看 backtrace:bt4. 查看所有线程信息5. 打印线程19的回溯信息6. 打印所有线程的回溯信息7. gdb info 相关的指令8. 查看使用了哪些共享库9. 查看出错的行号及地…...
ORB-SLAM2 ---- 词袋模型BOW
文章目录 一、回环检测的重要性二、回环检测的方法三、词袋模型四、词典五、实例展示1. 计算评分2. 找出有相同单词的关键帧3. 用词袋进行快速匹配 六、总结 一、回环检测的重要性 在前面的学习我们知道,噪声的影响是不可消除的,而上一帧的误差不可避免的…...
win11无法检测到其他显示器-NVIDIA
https://www.nvidia.cn/software/nvidia-app/ https://cn.download.nvidia.cn/nvapp/client/11.0.1.163/NVIDIA_app_v11.0.1.163.exe 下载安装后,检测驱动、更新驱动。...
基于Java+Swing+Mysql的网络聊天室
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
docker安装Elasticsearch
公网即可拉取镜像,这个镜像是可以拉得到的,版本号根据自己需要的来 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.15运行命令,xxxxxxxxxxxxxxxxxxxxxxxx_password 为自己的密码 docker run -d --name elasticsearch \-…...
Elasticsearch入门之HTTP高级查询操作
前言 上一篇博客我们学习了es的一些基础操作如下: 创建索引(创建表 create table)查看索引(查看表show tables)查看单个索引(查看单个表show create table)删除索引(删除表&#x…...
前端知识1html
VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span: <span style"color: red;">hello</span> <span>demo</span> span实现: 标题…...
《黑神话:悟空》闪退,提示D3D12崩溃,游戏崩溃无法启动是什么原因?要怎么解决?
《黑神话:悟空》闪退、D3D12崩溃及游戏无法启动:原因、解决方案与预防措施 作为一名软件开发从业者,我深知电脑游戏运行时可能遇到的各种问题,尤其是像《黑神话:悟空》这样的高品质游戏,其对硬件和系统配置…...
[GESP202312 五级] 烹饪问题
题目传送门 B3930 [GESP202312 五级] 烹饪问题 题目描述 有 N N N 种食材,编号从 0 0 0 至 N − 1 N-1 N−1,其中第 i i i 种食材的美味度为 a i a_i ai。 不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味…...
[代码随想录10]栈和队列
前言 栈和队列在STL中扮演的什么角色呢?我们知道STL的六大组件是:容器,适配器,算法,迭代器,空间配置器,仿函数,而我们今天要学的栈和队列就是属于适配器里面的,为什么栈和…...
TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面
前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中,命令行使用还是不太方便的,因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。 普通用户使用 参照上一篇教…...
Java、JavaWeb、数据库-图书管理系统
这一章主要是把上一章写在网页里的java 代码从网页中分离出来,放在专门的servlet类中。每一个servlet类对应一个数据库的表。 规范性问题: 1、dao包存放有关数据库的信息:BaseDao包就放数据库加载驱动和增删改和关闭资源;而其他…...
轻量化特征融合 | YOLOv8 引入一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作
本改进已同步到Magic框架 摘要—无人机图像中的小目标检测由于分辨率低和背景融合等因素具有挑战性,导致特征信息有限。多尺度特征融合可以通过捕获不同尺度的信息来增强检测,但传统策略效果不佳。简单的连接或加法操作无法充分利用多尺度融合的优势,导致特征之间的相关性不…...
U盘文件乱码:原因、恢复、预防与总结
U盘文件乱码现象解析 U盘作为我们日常生活中常用的便携式存储设备,时常会遭遇文件乱码的问题。这种乱码现象通常表现为文件名变成一堆无意义的字符,文件内容无法正常查看,甚至文件根本无法被打开。当我们在电脑上插入U盘,准备查看…...
OpenStack介绍
OpenStack概述 OpenStack是一个开源的云计算管理平台软件,主要用于构建和管理云计算环境。它允许企业或组织通过数据中心的物理服务器创建和管理虚拟机、存储资源和网络等云计算服务。其核心组件包括计算(Nova)、网络(Neutron)、存储(Cinder、Swift)等。这些组件相互协作…...
OpenGL编译用户着色器shader
shader相信很多朋友们都听说过,shader就是运行再GPU上的程序。虽然是这么说,但是我们发现,很多IDE开发工具比如说visual studio 没有办法直接去运行shader代码。这是因为,许多编译器不会自动将shader文件编译成可执行的代码然后发…...
C++ 已经知道,中序和后序,推算前序的方法。
已经知道,中序和后序,推算前序的方法。 #include<iostream> using namespace std; string ldr_str,lrd_str;//中序遍历和后序遍历 void build(int l1,int r1,int l2,int r2){if(l1>r1) return ;//边界条件,说明已经没有元素了cout<<lrd_s…...
unity打包到安卓帧率降低
这个问题遇到过很多次了我的做法就是直接设置Application.targetFrameRate60 参考...
计算机网络复习——概念强化作业
物理层负责网络通信的二进制传输 用于将MAC地址解析为IP地址的协议为RARP。 一个交换机接收到一帧,其目的地址在它的MAC地址表中查不到,交换机应该向除了来的端口外的所有其它端口转发。 关于ICMP协议,下面的论述中正确的是ICMP可传送IP通信过程中出现的错误信息。 在B类网络…...
DO、DTO、VO都是干什么的?
DO、DTO、VO 是三个常见的Java 对象,它们都是用来承载数据的,但是在不同的场景下有着不同的用途. 1.DO(Domain Object):领域对象,也称为实体对象。D0 通常用于数据库表的映射,DO中包含了实体的属性以及对实体的操作方法。DO 对应…...
深入探索 Node.js:构建强大的后端应用
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现
在探索大语言模型的创意应用过程中,我们开发了一个基于多 Agent 的智能诗歌创作系统。本文将介绍如何通过多个专业化的 Agent 协同工作,实现根据地点和天气信息自动创作诗歌的功能。 GitHub Code 项目地址 核心架构设计 1. Agent 基类设计 from pydan…...
【Git】:远程操作
目录 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置 Git 忽略特殊文件 给命令配置别名 我们可以自己搭建⼀台运行 Git 的服务器,不过现阶段,为了学 Git 先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站࿰…...
服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs࿰…...
基于python django的药材数据可视化系统的设计与实现,可对各类药材数据做一个统计分析可视化
研究背景 随着中医药文化的不断传承与发展,传统中药材的市场需求逐渐增加。然而,随着药材种类繁多、来源复杂、品质参差不齐,如何高效地管理、分析与展示中药材的相关数据,成为现代中药产业面临的重要课题。传统的药材数据管理方…...
docker及docker exec命令学习笔记
docker exec 是一个常用的 Docker 命令,允许你在已经运行的容器中执行命令或启动新的进程。以下是详细介绍和常见用法: 基本语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]参数详解 1. CONTAINER指定目标容器的名字或容器 ID。可以通过以下命…...
【pyspark学习从入门到精通24】机器学习库_7
目录 聚类 在出生数据集中寻找簇 主题挖掘 回归 聚类 聚类是机器学习中另一个重要的部分:在现实世界中,我们并不总是有目标特征的奢侈条件,因此我们需要回归到无监督学习的范式,在那里我们尝试在数据中发现模式。 在出生数据…...
Unity 策略游戏地图上的网格是如何实现的
在Unity中实现策略游戏地图上的网格,主要涉及到地图数据的处理、地图的加载与渲染、以及玩家在地图上的移动与碰撞检测等关键步骤。以下是对这些步骤的详细解释: 一、地图数据的处理 收集地图数据:这包括地形高度、地形纹理、建筑物、树木等…...
【MySQL 进阶之路】锁详解
MySQL 锁详解 1. 锁的基本概念 锁在数据库中是用来保证数据一致性和防止并发冲突的一种机制。MySQL 中的锁可以分为不同的类型和粒度,每种锁都有特定的使用场景和特点。了解锁的类型、作用以及如何避免锁带来的问题是提升数据库性能和避免数据冲突的关键。 2. 锁…...
RK3588--解码H264(mpp-dec-h264-to-yuv-file)
1. 简介 源码下载:https://download.csdn.net/download/mao0514/90096131 本例完成H264格式文件解码,并保存为yuv格式文件。参考mpp_dec_test重写,进行了一部分精简。 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的 通用媒体…...
解决Conda虚拟环境中pip下载包总是到base环境的问题
conda本地创建的虚拟环境使用pip安装一些包总是安装到base环境中,导致无法正确进行环境隔离,下面是一些解决办法 方法一、使用python -m pip安装 1.1、验证虚拟环境的pip版本是哪个版本,如下所示,本人的demo虚拟环境直接使用pip…...
PyCharm 中设置虚拟环境
在 PyCharm 中设置虚拟环境的步骤如下: 1. 创建新项目时设置虚拟环境 1. 打开 PyCharm 并选择 New Project。 2. 在 Location 中指定项目路径。 3. 在右侧的 Python Interpreter 下,选择 New Environment。 Environment: 选择 Virtualenv。 Loca…...
M9484C VXG 矢量信号发生器- 110GHz-
M9484C VXG 矢量信号发生器 - 110GHz- M9484C VXG 是一款矢量信号发生器,在每个通道上提供 2.5 GHz 调制带宽,能够生成高达 54 GHz 的信号。 这款 VXG 矢量信号发生器可以组成经过校准和同步的全方位综合解决方案,帮助您更快测试下一代无线…...
机器学习详解(3):线性回归之代码详解
文章目录 1 数据预处理2 构建线性回归模型并绘制回归线初始化方法前向传播:forward_propagation代价函数:cost_function反向传播:backward_propagation参数更新:update_parameters训练方法:train代码运行结果 3 使用Py…...
工业检测基础-工业相机选型及应用场景
以下是一些常见的工业检测相机种类、检测原理、应用场景及选型依据: 2D相机 检测原理:基于二维图像捕获,通过分析图像的明暗、纹理、颜色等信息来检测物体的特征和缺陷.应用场景:广泛应用于平面工件的外观检测,如检测…...
标准状态下一个气体分子每秒平均碰撞次数的估算
要估算在标准状态(0C, 1个大气压)下,一个气体分子在1秒内与其他分子的碰撞次数,我们可以使用一些基本的物理和化学原理。这个过程涉及到气体动力学理论,特别是麦克斯韦-玻尔兹曼分布。 计算气体分子的平均速率…...
使用PHPUnit使用本地调试代替远程调试,快速提高开发效率
Laravel 是一个在 Linux 环境下表现非常出色的 PHP 框架,但它在 Windows 环境下可能会遇到一些兼容性和配置问题。为了调试或没试的方便可以在 Windows 环境下进行 Laravel PHPUnit进行本地调试和测试。 本地主要针对断点调试效果非常高效。 在 Laravel 中&#x…...
Android 镜像模式和扩展模式区别探讨-Android14
Android 镜像模式和扩展模式区别探讨 1、区分镜像模式和扩展模式1.1 扩展屏是否有显示内容1.2 镜像模式显示条件 2、镜像模式界面 同屏显示和异屏显示探讨DisplayManagerService启动及主屏添加-Android13 Android主副屏显示-Android14 1、区分镜像模式和扩展模式 LogicalDispla…...
链表头文件大更新!!!
引言 原文章:链表简介及自制链表操作头文件_自己写一个链表头文件-CSDN博客。 此次更新添加了更多功能,让改头文件更 人性化 。 安装教程见原文章。 介绍 linked_list.h 头文件 linked_list.h 是一个 C 头文件,定义了一个模板类 LinkedListÿ…...
ROS2创建 base 包用于其他模块的参数配置和头文件依赖
Demo 背景 ROS2项目开发中存在以下需求:有多个包需要读取一些共同的配置项(以txt或者yaml形式存在),且依赖于一些公用的utils工具代码(C)。Solution: 创建一个 base_config 包来“存放” 配置文件和公用的头文件。gitee address: Gitee/CDal…...
设计模式の软件设计原则
文章目录 前言一、聚合&组合&继承&依赖1.1、继承1.2、组合1.3、聚合1.4、依赖 二、单一职责原则2.1、单一职责原则反面案例2.2、单一职责原则反面案例的改进 三、接口隔离原则3.1、接口隔离原则反面案例3.2、接口隔离原则反面案例的改进 四、依赖倒转原则4.1、依赖…...
【python自动化四】日志打印
我们在进行自动化测试时,需要打印过程日志和结果日志等,这里记录下日志的相关配置。这里我们直接自己新建一个logger。 先贴上日志代码如下,可根据需要修改: import logging import os import timefrom logging.handlers import …...
E498 ThinkPHP+MYSQL+LW+纯洁婚纱网站系统的设计与实现 源码 配置 文档 全套资料
婚纱网站系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 在互联网和电子商务迅速发展的今天,网络已经是人们日常生活所不可缺少的信息获取渠道,人们日常生活基本已完全被网络所覆盖,互联网影响到各…...
【PostgreSQL系列】列类型从整数转换为 UUID
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
shell脚本实战案例
文章目录 实战第一坑功能说明脚本实现 实战第一坑 实战第一坑:在Windows系统写了一个脚本,比如上面,随后上传到服务,执行会报错 原因: 解决方案:在linux系统touch文件,并通过vim添加内容&…...
VAE为什么叫变分(variational),相对于AE有什么区别。
VAE为什么叫变分(variational),相对于AE有什么区别。 VAE为什么叫变分(variational)?VAE相对于AE有什么区别? VAE为什么叫变分(variational)? 变分自编码器&…...
Codeforces Round 991 (Div. 3)
补题连接 A. Line Breaks 思路:从头开始累加单词个数,超过m就退出。 代码: #include <bits/stdc.h> using namespace std; #define int long longvoid solve() {int n, m, k;cin >> n >> m;vector<string> a(n);…...