当前位置: 首页 > news >正文

坐标系变换总结

二维情况下的转换

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旋转的角度,它们也被称为欧拉角

相关文章:

坐标系变换总结

二维情况下的转换 1 缩放变换 形象理解就是图像在x方向和y方向上放大或者缩小。 代数形式: { x ′ k x x y ′ k y y \begin{cases} x k_x x \\ y k_y y \end{cases} {x′kx​xy′ky​y​ 矩阵形式: ( x ′ y ′ ) ( k x 0 0 k y ) ( x y ) \be…...

数据在内存中的存储【上】

一.整型在内存中的存储 在讲解操作符的时候,我们就讲过了下面的内容: 整数的2进制表示方法有三种,即 原码、反码和补码 有符号的整数,三种表示方法均有符号位和数值位两部分,符号位都是用0表示"正"&#xff…...

Prometheus之Pushgateway使用

Pushgateway属于整个架构图的这一部分 The Pushgateway is an intermediary service which allows you to push metrics from jobs which cannot be scraped. The Prometheus Pushgateway exists to allow ephemeral and batch jobs to expose their metrics to Prometheus. S…...

Rust Web开发常用库

本集合中所有库都是在开源项目中广泛使用且在2024年积极维护的库,排名靠前的库是当前使用比较广泛的,不全面但够用 Rust异步运行时 tokio:异步运行时 async_std:与标准库兼容性较强的运行时 monoio:字节开源 smol…...

ios内购支付-支付宝APP支付提现

文章目录 前言一、IOS内购支付(ios订单生成自己写逻辑即可)1.支付回调票据校验controller1.支付回调票据校验server 二、安卓APP支付宝支付1.生成订单返回支付宝字符串(用于app拉起支付宝,这里用的是证书模式)2.生成订…...

新课发布|鸿蒙HarmonyOS Next商城APP应用开发实战

2024年年初,鸿蒙HarmonyOS Next星河版强势发布,随着鸿蒙系统的普及和应用场景的拓展,市场需求将持续增加。鸿蒙系统已经应用于华为的智能手机、平板电脑、智能家居等多个领域,并有望在未来拓展到智能汽车、物联网等更多领域。这为…...

基于Java,SpringBoot,Vue智慧校园健康驿站体检论坛请假管理系统

摘要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#xf…...

【数据分享】2001-2023年我国省市县镇四级的逐月平均气温数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月平均气温栅格数据,该数据来源于国家青藏高原科学数据中心。为方便大家使用,我们还基于上述平均气温栅格数据将数据处理为Shp和Excel格式的省市县三级逐月平均气温数据(可查看之前的文章获悉详情&#…...

c#代码介绍23种设计模式_16迭代器模式

目录 1、迭代器模式的介绍 2、迭代器模式的定义 3、迭代器模式的结构 4、代器模式角色组成 5、迭代器实现 6、迭代器模式的适用场景 7、迭代器模式的优缺点 8、.NET中迭代器模式的应用 9、实现思路 1、迭代器模式的介绍 迭代器是针对集合对象而生的,对于集合对象而言…...

408算法题leetcode--第23天

236. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先\思路:递归,如注释时间和空间:O(n) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) …...

帝国CMS系统开启https后,无法登陆后台的原因和解决方法

今天本地配置好了帝国CMS7.5,传去服务器后,使用http访问一切正常。但是当开启了https(SSL)后,后台竟然无法登陆进去了。 输入账号密码后,点击登陆,跳转到/e/admin/ecmsadmin.php就变成页面一片…...

根据视频id查询播放量

声明:文章仅用于学习交流,如有侵权请联系删除 如何根据视频ID查询视频的播放数量 在数字化时代,视频内容的消费已成为人们日常生活的重要组成部分。无论是社交媒体平台上的短视频,还是视频分享网站上的长视频,了解视频的播放数量…...

初始爬虫11

1.斗鱼selenium爬取 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By import timeclass Douyu(object):def __init__(self):self.url https://www.douyu.com/directory/allself.driver webdriver.Chrome()self.driver…...

SSY20241002提高组T4题解__纯数论

题面 题目描述 有一天 p e o p 1 e peop1e peop1e 学长梦到了一个丑陋的式子: ∑ i 1 n ( ∑ m 1 R F m ) ! i ! ∑ l 0 i ∑ j 0 ∑ t 1 R F t { K i − l } l ! { i ∑ w 1 R F w − j } j ! \sum_{i1}^n (\sum_{m1}^R F_m)!\times i!\times \sum_{l…...

Python:lambda 函数详解 以及使用

一、lambda 语法 lambda 函数的语法只包含一个语句,表现形式如下: lambda [arg1 [,arg2,.....argn]]:expression 其中,lambda 是 Python 预留的关键字,[arg…] 和 expression 由用户自定义。 具体如下: [arg…] 是参数列表&#…...

【C++】空指针和野指针

文章目录 1.空指针2.野指针总结 1.空指针 概念:指针变量指向内存中编号为0的空间。 用途:初始化指针变量。 注意:空指针指向的内存是不可以访问的。 示例: int main(){//指针变量p指向内存地址编号为0的空间int *PNULL&#…...

大模型提示词

纯输入版提示工程词 输出一个九九乘法口诀表 当然可以!以下是九九乘法口诀表: 1 x 1 1 1 x 2 2 2 x 2 4 1 x 3 3 2 x 3 6 3 x 3 9 1 x 4 4 2 x 4 8 3 x 4 12 4 x 4 16 1 x 5 5 2 x 5 10 3 x 5 15 4 x 5 20 5 …...

在线css像素px到Em的转换器

具体请前往:在线Px转Em工具--将绝对像素(px)长度单位转换为相对长度em...

回溯算法解决排列组合及子集问题

216. 组合总和 III39. 组合总和40. 组合总和 II46. 全排列47. 全排列 II77. 组合 78. 子集 90. 子集 II 以上是力扣设计相关问题的题目。排列组合还是子集问题无非就是从序列 nums 中以给定规则取若干元素,主要有以下几类: 元素无重不可复选&#xff0…...

Unity中Mesh多种网格绘制模式使用方法参考

Unity中MeshFilter中的Mesh默认情况下使用MeshTopology.Trigangles类型绘制网格,就是通常的绘制三角形网格,实际上Mesh有五种绘制模式,对应MeshTopology的枚举,分别是 Triangles网格由三角形构成。Quads网格由四边形构成。Lines网…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

小智AI+MCP

什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github&#xff1a;https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...