坐标系变换总结

news2024/10/5 5:25:23

二维情况下的转换

1 缩放变换

形象理解就是图像在x方向和y方向上放大或者缩小。
代数形式:
{ x ′ = k x x y ′ = k y y \begin{cases} x' = k_x x \\ y' = k_y y \end{cases} {x=kxxy=kyy
矩阵形式:
( x ′ y ′ ) = ( k x 0 0 k y ) ( x y ) \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} k_x & 0 \\ 0 & k_y \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} (xy)=(kx00ky)(xy)
k x = k y k_x = k_y kx=ky 时,是均匀缩放,两个方向同等比例地缩放。

k x = − 1 , k y = 1 k_x = -1, k_y = 1 kx=1,ky=1 ,是镜像变换,类似整个二维平面的图像以y轴为对称轴对称过去一样。

2 切变

平行力作用在物体上的形变
矩阵形式:
( x ′ y ′ ) = ( k x a 0 k y ) ( x y ) = ( k x x + a y k y y ) \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} k_x & a \\ 0 & k_y \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} k_x x + ay \\ k_y y \end{pmatrix} (xy)=(kx0aky)(xy)=(kxx+aykyy)
x方向上位置坐标整体向右平移。

3 旋转

旋转是指绕着 原点 逆时针旋转 θ \theta θ 的变换。
旋转矩阵如下:

R = ( c o s θ − s i n θ s i n θ c o s θ ) R = \begin{pmatrix} cos \theta & -sin\theta \\ sin \theta & cos \theta \end{pmatrix} R=(cosθsinθsinθcosθ)

( x ′ y ′ ) = ( c o s θ − s i n θ s i n θ c o s θ ) ( x y ) \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} cos \theta & -sin\theta \\ sin \theta & cos \theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} (xy)=(cosθsinθsinθcosθ)(xy)

旋转矩阵是正交阵(转置矩阵等于逆矩阵 R T = R − 1 R^T = R^{-1} RT=R1

正交矩阵性质:

  1. 转置等于逆,绕某个轴旋转 θ \theta θ 的旋转矩阵的逆,就是绕同一轴旋转 − θ -\theta θ
  2. 保持向量长度:作用于任何向量时,向量长度不变
  3. 列向量(行向量)正交且单位化

4 线性变换

线性变换的理解:参考 https://segmentfault.com/a/1190000041138293
线性映射是由向量空间 V → W V\rightarrow W VW 的映射,而线性变换是线性映射的一个特例,是由线性空间 V V V 到其自身的映射。
通俗理解线性变换就是 坐标轴经过 旋转,伸缩 等操作,原坐标轴上的点一同随着变化,然后这些点会在一个新的位置。
( x ′ y ′ ) = ( a b c d ) ( x y ) = ( a x + b y c y + d y ) \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} ax + by \\ cy + dy \end{pmatrix} (xy)=(acbd)(xy)=(ax+bycy+dy)
其中 ( a , c ) , ( b , d ) (a,c),(b,d) (a,c),(b,d) 是新的坐标系下的基方向上的向量。

线性变换的特点:

  • 变换前是直线,变换后依然是直线
  • 原点保持固定不动

举个例子:
原坐标轴x轴和y轴,两个基为 i = ( 1 , 0 ) , j = ( 0 , 1 ) i=(1,0), j=(0,1) i=(1,0),j=(0,1) ,这个轴上的某个向量为 A → = ( 3 , 2 ) T = 3 i + 2 j \overrightarrow A = (3,2)^T = 3i+2j A =(3,2)T=3i+2j

在这里插入图片描述
现在坐标轴有一个线性变换,新的基为 i ′ = ( 1 , − 2 ) , j ′ = ( 3 , 0 ) i'=(1,-2), j'=(3,0) i=(1,2),j=(3,0) ,此时得到的新的向量,但是它相对于基的关系还是不变的,即 A → ′ = 3 i ′ + 2 j ′ \overrightarrow A' = 3i' + 2j' A =3i+2j

新的 A → ′ \overrightarrow A' A 在原坐标系(基)下的坐标可以通过矩阵乘法求得:

A → ′ = ( 1 3 − 2 0 ) ( 3 2 ) \overrightarrow A' = \begin{pmatrix} 1 & 3 \\ -2 & 0 \end{pmatrix} \begin{pmatrix} 3 \\ 2 \end{pmatrix} A =(1230)(32)

在这里插入图片描述
也就是说这个线性变换矩阵是由新的基向量(说基可能不准确,因为基要求模长为1)组成的列向量。

二维线性变换不涉及到平移变换,即二维下的仿射变换不是线性变换。

5 齐次坐标变换

平移变换无法用单独的矩阵相乘的形式表示,因此引入齐次坐标,增加一维。

二维坐标一般被表示为 ( x , y , w ) (x,y,w) (x,y,w) ,w是一个非零的缩放因子,一般情况下取w=1

平移矩阵:平移(tx, ty)的齐次变换矩阵

T = ( 1 0 t x 0 1 t y 0 0 1 ) ( x ′ y ′ 1 ) = ( 1 0 t x 0 1 t y 0 0 1 ) ( x y 1 ) T = \begin{pmatrix} 1 & 0 & tx \\ 0 & 1 & ty \\ 0 & 0 & 1 \end{pmatrix} \\ \begin{pmatrix} x' \\ y' \\ 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 & tx \\ 0 & 1 & ty \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} T= 100010txty1 xy1 = 100010txty1 xy1

6 仿射变换

一个向量空间进行一次线性变换并接上一个平移,变换到另一个向量空间。
( x ′ y ′ 1 ) = ( a b t x c d t y 0 0 1 ) ( x y 1 ) \begin{pmatrix} x' \\ y' \\ 1 \end{pmatrix} = \begin{pmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} xy1 = ac0bd0txty1 xy1

7 组合变换

可以通过矩阵相乘,将多种变换组合在一起,只需将齐次坐标与最终的变换矩阵相乘即可。注意矩阵是从右向左计算的,矩阵是左乘。

可以将一个变换分解:让矩阵按照某一点进行旋转(先将旋转点平移到原点,然后再平移回去)

三维情况下的转换

1 线性齐次变换

变换矩阵如下:
T = ( x 1 x 2 x 3 0   y 1 y 2 y 3 0   z 1 z 2 z 3 0   0 0 0 1 ) T= \begin{pmatrix} x_{1} & x_2 & x_{3} & 0 \\\ y_{1} & y_2 & y_{3} & 0 \\\ z_{1} & z_2 & z_{3} & 0 \\\ 0 & 0 & 0 & 1 \end{pmatrix} T= x1 y1 z1 0x2y2z20x3y3z300001
( x 1 , y 1 , z 1 ) , ( x 2 , y 2 , z 2 ) , ( x 3 , y 3 , z 3 ) (x_1,y_1,z_1),(x_2,y_2, z_2),(x_3,y_3,z_3) (x1,y1,z1),(x2,y2,z2),(x3,y3,z3) 是新的基向量,即要变换到的坐标系。
将点坐标左乘一个线性变换矩阵,通俗讲就是将原坐标系下的点通过旋转伸长等操作(转到新的坐标系下),求在新坐标系下点的坐标,这个坐标是相对于原坐标系而言的。

同时还可以附加平移操作,新的变换矩阵就是

T = ( x 1 x 2 x 3 t x   y 1 y 2 y 3 t y   z 1 z 2 z 3 t z   0 0 0 1 ) T= \begin{pmatrix} x_{1} & x_2 & x_{3} & t_x \\\ y_{1} & y_2 & y_{3} & t_y \\\ z_{1} & z_2 & z_{3} & t_z \\\ 0 & 0 & 0 & 1 \end{pmatrix} T= x1 y1 z1 0x2y2z20x3y3z30txtytz1

2 旋转变换

在这里插入图片描述

任何一个3D旋转都可以表示成绕x轴,y轴,z轴旋转的组合

R x y z ( α , β , γ ) = R x ( α ) R y ( β ) R z ( γ ) R_{xyz}(\alpha, \beta, \gamma) = R_x(\alpha)R_y(\beta)R_z(\gamma) Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)

α β γ \alpha \beta \gamma αβγ 分别代表物体绕x、y、z旋转的角度,它们也被称为欧拉角

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

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

相关文章

【C语言】数据在内存中的存储(万字解析)

文章目录 一、大小端字节序和字节序判断1.案例引入2.什么是大小端字节序3.大小端字节序判断 二、整数在内存中的存储以及相关练习1.整型在内存中的存储2.练习练习1:练习2练习3练习4练习5:练习6 三、浮点数在内存中的存储1.案例引入2.浮点数在内存中的存储…

uniapp+Android面向网络学习的时间管理工具软件 微信小程序

目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户功能…

KVM虚拟化技术介绍

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 虚拟化技术是云计算的基础,什么是虚拟化?虚拟化技术的本质是什么?主流的虚拟化技术有哪些?本章将为您揭晓 一.虚拟化概述 虚拟化是一种将计…

【有啥问啥】领域自适应(Domain Adaptation, DA)详解

领域自适应(Domain Adaptation, DA)详解 引言 在机器学习和深度学习的广泛应用中,一个核心挑战在于模型往往在一个特定数据集(源领域)上训练后,难以直接应用于另一个不同但相关的数据集(目标领…

通信工程学习:什么是ICMP因特网控制报文协议

ICMP:因特网控制报文协议 ICMP(Internet Control Message Protocol,因特网控制报文协议)是TCP/IP协议簇中的一个重要子协议,主要用于在IP主机和路由器之间传递控制消息。以下是关于ICMP协议的详细解释: 一…

Pikachu-Unsafe FileUpload-客户端check

上传图片,点击查看页面的源码, 可以看到页面的文件名校验是放在前端的;而且也没有发起网络请求; 所以,可以通过直接修改前端代码,删除 checkFileExt(this.value) 这部分; 又或者先把文件名改成…

九、2 USART串口外设

1、STM32内部的USART外设的介绍 (1) STM32的USART的同步模式只是多了个时钟输出,只支持时钟输出,不支持时钟输入。该同步模式更多是为了兼容别的协议或者特殊用途而设计的,并不支持两个USART之间进行同步通信&#xf…

剖解最小栈

最小栈 思路: 1. 首先实例化两个栈,分别是stack用于存放数据,minstack用于存放最小值 2. 将第一个元素压入两个栈中,判断此时若minStack栈中为空,则表示压入的为第一个数据 if ( minStack.empty () ) { minStack.pus…

MySQL 查询优化器

文章目录 控制查询计划optimizer_prune_leveloptimizer_search_depth 优化器参数优化器提示索引提示成本模型server_costcost_name engine_cost 控制查询计划 https://dev.mysql.com/doc/refman/8.4/en/controlling-query-plan-evaluation.html 在执行SQL前会根据优化器选择执…

Leetcode 第 140 场双周赛题解

Leetcode 第 140 场双周赛题解 Leetcode 第 140 场双周赛题解题目1:3300. 替换为数位和以后的最小元素思路代码复杂度分析 题目2:3301. 高度互不相同的最大塔高和思路代码复杂度分析 题目3:3302. 字典序最小的合法序列思路代码复杂度分析 题目…

入手一个小扒菜fqrr#com

fqrr#com 既带q又带r是很多人不喜的类型, 父亲 夫妻 番茄 分期 人人 日日 好无聊的米呀,竟然组合不出来意思 这个不是购买的,别人说他1150元购买的,算是半抵给我的吧 其实我也不喜欢,我4声母.com 已经够多了&am…

【教程】文字转语音的3个方法,文字转语音使用攻略

文字转语音的需求还是蛮多的,很多用户在视频剪辑中会遇到。不想用本人的声音,那么视频中的旁白就只能通过文字转语音软件实现了。 想要将文字转为语音那还是蛮好解决的,如果你还在找方法,那么以下内容可以了解下。本文整理了三种简…

2c 操作符详解

1. 操作符分类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 1除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作…

NVIDIA NVLink-C2C

NVIDIA NVLink-C2C 文章目录 前言一、介绍1. 用于定制芯片集成的超快芯片互连技术2. 构建半定制芯片设计3. 使用 NVLink-C2C 技术的产品 二、NVLink-C2C 技术优势1. 高带宽2. 低延迟3. 低功率和高密度4. 行业标准协议 前言 将 NVLink 扩展至芯片级集成 一、介绍 1. 用于定制芯…

Candance仿真二阶米勒补偿OTA

1.OTA电路搭建目标——25Mhz GBW,65dB的增益 2.电路参照 3.candance电路搭建 实现步骤:应该是从下面这个公式开始推导 然后那个CL就是两边的那个CCa或CCb的大小 算出来就是gm75us

MongoDB-aggregate流式计算:带条件的关联查询使用案例分析

在数据库的查询中,是一定会遇到表关联查询的。当两张大表关联时,时常会遇到性能和资源问题。这篇文章就是用一个例子来分享MongoDB带条件的关联查询发挥的作用。 假设工作环境中有两张MongoDB集合:SC_DATA(学生基本信息集合&…

基于微信小程序的旅游拼团系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Colorize: 0 variables Colorize is not activated for this file. VsCode

问题情况 解决步骤 1.找到setting.json文件 2.输入以下代码,保存setting.json文件 "colorize.languages": ["css", "javascript", "sass", "less", "postcss", "stylus", "xml"…

基于SpringBoot+Vue+MySQL的中医院问诊系统

系统展示 用户前台界面 管理员后台界面 医生后台界面 系统背景 随着信息技术的迅猛发展和医疗服务需求的不断增加,传统的中医院问诊流程已经无法满足患者和医院的需求。纸质病历不仅占用大量存储空间,而且容易丢失和损坏,同时难以实现信息的快…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)

4 创建docker容器 4.1创建网络 [rootlocalhost wutool]# docker network create -d macvlan --subnet192.168.137.0/24 --gateway192.168.137.2 --ip-range192.168.137.0/24 -o parentens33 nat 52af11381bfd655d175e4168265b2a507793e8fe48f119db846949ffd4dd27de [rootlocal…