二维(三维)坐标系中旋转矩阵

求三维坐标系的旋转矩阵通常需要求分别沿3个坐标轴的二维坐标系下的旋转矩阵,二维坐标系下的旋转矩阵的推导过程通常以某一点逆时针旋转 θ \theta θ角度进行推理。以下将通过此例来详细讲解二维坐标系下的旋转矩阵推导过程,并进一步给出其他方式的旋转矩阵。

一、二维坐标中点的旋转变换

点的旋转矩阵(逆时针旋转)

已知点 P ( x , y ) P(x, y) P(x,y),将该点以逆时针方向旋转 θ \theta θ角度后得到点 P ′ ( x ′ , y ′ ) P^{\prime}(x^{\prime}, y^{\prime}) P(x,y),如下图所示。求由点 P P P到点 P ′ P^{\prime} P的旋转矩阵。
请添加图片描述

  • 设半径为 r r r,由图可以分别得到以下三角公式:

    • 对于点 P ( x , y ) P(x, y) P(x,y)
      x = r cos ⁡ α y = r sin ⁡ α (1) \begin{aligned} & x=r \cos \alpha \\ & y=r \sin \alpha \end{aligned} \tag{1} x=rcosαy=rsinα(1)
    • 对于点 P ′ ( x ′ , y ′ ) P^{\prime}(x^{\prime}, y^{\prime}) P(x,y)
      x ′ = r cos ⁡ ( α + θ ) y ′ = r sin ⁡ ( α + θ ) (2) \begin{aligned} & x^{\prime}=r \cos (\alpha+\theta) \\ & y^{\prime}=r \sin (\alpha+\theta) \end{aligned} \tag{2} x=rcos(α+θ)y=rsin(α+θ)(2)
  • 根据两角和的正弦与余弦公式:
    sin ⁡ ( α + θ ) = sin ⁡ α cos ⁡ θ + cos ⁡ α sin ⁡ θ cos ⁡ ( α + θ ) = cos ⁡ α cos ⁡ θ − sin ⁡ α sin ⁡ θ (3) \begin{aligned} & \sin (\alpha+\theta)=\sin \alpha \cos \theta+\cos \alpha \sin \theta \\ & \cos (\alpha+\theta)=\cos \alpha \cos \theta-\sin \alpha \sin \theta \end{aligned} \tag{3} sin(α+θ)=sinαcosθ+cosαsinθcos(α+θ)=cosαcosθsinαsinθ(3)

  • 将公式(3)代入公式(2),可得到:
    x ′ = r cos ⁡ α cos ⁡ θ − r sin ⁡ α sin ⁡ θ y ′ = r sin ⁡ α cos ⁡ θ + r cos ⁡ α sin ⁡ θ (4) \begin{aligned} & x^{\prime} =r \cos \alpha \cos \theta-r \sin \alpha \sin \theta \\ & y^{\prime} =r \sin \alpha \cos \theta+r \cos \alpha \sin \theta \\ \end{aligned} \tag{4} x=rcosαcosθrsinαsinθy=rsinαcosθ+rcosαsinθ(4)

  • 将公式(1)代入公式(4),化简掉 α \alpha α,可得到 ( x ′ , y ′ ) (x^{\prime}, y^{\prime}) (x,y) ( x , y ) (x, y) (x,y)的关系,即:
    x ′ = x cos ⁡ θ − y sin ⁡ θ y ′ = y cos ⁡ θ + x sin ⁡ θ (5) \begin{aligned} & x^{\prime} =x \cos \theta-y \sin \theta \\ & y^{\prime} =y \cos \theta+x \sin \theta \\ \end{aligned} \tag{5} x=xcosθysinθy=ycosθ+xsinθ(5)

  • 整理公式(5)可得到旋转矩阵公式:
    x ′ = cos ⁡ θ ⋅ x − sin ⁡ θ ⋅ y y ′ = sin ⁡ θ ⋅ x + cos ⁡ θ ⋅ y ⇒ [ x ′ y ′ ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ x y ] (6) \begin{aligned} x^{\prime}&=\cos \theta \cdot x-\sin \theta \cdot y \\ y^{\prime}&=\sin \theta \cdot x+\cos \theta \cdot y \\ \Rightarrow \left[\begin{array}{l} x^{\prime} \\ y^{\prime}\end{array}\right] &=\left[\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] \left[\begin{array}{l} x \\ y \end{array}\right] \end{aligned} \tag{6} xy[xy]=cosθxsinθy=sinθx+cosθy=[cosθsinθsinθcosθ][xy](6)

  • 因此二维坐标系下逆时针旋转矩阵 R R R为:
    R = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R = \left[\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] R=[cosθsinθsinθcosθ]

点的旋转矩阵(顺时针旋转)

已知点 P ′ ( x ′ , y ′ ) P^{\prime}(x^{\prime}, y^{\prime}) P(x,y),将该点以顺时针方向旋转 θ \theta θ角度后得到点 P ( x , y ) P(x, y) P(x,y),求 P P P

1、利用求逆矩阵的方式

  • 二阶矩阵的逆的求法为:主对角元素换位置,次对角元素变符号,再乘上系数1/(ad-bc),由于旋转矩阵 R R R的ad-bc=1,因此 R R R的逆矩阵 R ′ R^{\prime} R为:
    R ′ = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] R^{\prime} = \left[\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] R=[cosθsinθsinθcosθ]
  • 因此旋转公式为:
    [ x y ] = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] [ x ′ y ′ ] \left[\begin{array}{l} x \\ y \end{array}\right] = \left[\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] \left[\begin{array}{l} x^{\prime} \\ y^{\prime}\end{array}\right] [xy]=[cosθsinθsinθcosθ][xy]

2、利用几何知识推导

P ′ P^{\prime} P顺时针旋转 θ \theta θ角度到 P P P,相当于逆时针旋转 ( 2 π − θ ) (2 \pi-\theta) (2πθ),由于三角函数的周期为 2 π 2 \pi 2π,因此相当于旋转 − θ -\theta θ角度。

  • − θ -\theta θ代入到公式(6),得到:
    x = cos ⁡ ( − θ ) ⋅ x ′ − sin ⁡ ( − θ ) ⋅ y ′ = cos ⁡ θ ⋅ x ′ + sin ⁡ θ ⋅ y ′ y = sin ⁡ ( − θ ) ⋅ x ′ + cos ⁡ ( − θ ) ⋅ y ′ = − sin ⁡ θ ⋅ x ′ + cos ⁡ θ ⋅ y ′ \begin{aligned} x & =\cos (-\theta) \cdot x^{\prime}-\sin (-\theta) \cdot y^{\prime} \\ & =\cos \theta \cdot x^{\prime}+\sin \theta \cdot y^{\prime} \\ y & =\sin (-\theta) \cdot x^{\prime}+\cos (-\theta) \cdot y^{\prime} \\ & =-\sin \theta \cdot x^{\prime}+\cos \theta \cdot y^{\prime} \end{aligned} xy=cos(θ)xsin(θ)y=cosθx+sinθy=sin(θ)x+cos(θ)y=sinθx+cosθy
  • 整理上述公式可得到顺时针时的旋转矩阵公式:
    x = cos ⁡ θ ⋅ x ′ + sin ⁡ θ ⋅ y ′ y = − sin ⁡ θ ⋅ x ′ + cos ⁡ θ ⋅ y ′ ⇒ [ x y ] = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] [ x ′ y ′ ] \begin{aligned} x&=\cos \theta \cdot x^{\prime}+\sin \theta \cdot y^{\prime} \\ y&=-\sin \theta \cdot x^{\prime}+\cos \theta \cdot y^{\prime} \\ \Rightarrow \left[\begin{array}{l} x \\ y \end{array}\right] &= \left[\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] \left[\begin{array}{l} x^{\prime} \\ y^{\prime}\end{array}\right] \end{aligned} xy[xy]=cosθx+sinθy=sinθx+cosθy=[cosθsinθsinθcosθ][xy]

二、二维坐标系的旋转变换

二维坐标系 XOY \text{XOY} XOY中有一点 P ( x , y ) P(x, y) P(x,y),将坐标系 XOY \text{XOY} XOY逆时针旋转 θ \theta θ角度后得到新坐标系 X ′ O ′ Y ′ \text{X}^{\prime}\text{O}^{\prime}\text{Y}^{\prime} XOY,求点 P P P在新坐标系下的坐标 P ′ ( x ′ , y ′ ) P^{\prime}(x^{\prime}, y^{\prime}) P(x,y),这个过程称为坐标系变换。

新坐标的求法可以转换为逆向旋转坐标点的方式,并利用点的旋转变换求得。因此,坐标系时针旋转 θ \theta θ角度,相当于原坐标系中某一点时针旋转 θ \theta θ角度,反之亦然。

总结

  • 某点逆时针旋转 θ \theta θ角度(坐标系顺时针旋转 θ \theta θ角度)的旋转矩阵为:
    R = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R = \left[\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] R=[cosθsinθsinθcosθ]
  • 某点顺时针旋转 θ \theta θ角度(坐标系逆时针旋转 θ \theta θ角度)的旋转矩阵为:
    R ′ = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] R^{\prime} = \left[\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] R=[cosθsinθsinθcosθ]
    三维坐标变换可进一步参考Link3。

参考:
Link1
Link2
Link3

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Surfshark下载到使用完整教程|2023最新

2023年3月16日更新 在正式介绍surfshark的教程( 教程直达学习地址: qptool.net/shark.html )之前,我们可以来看看最近surfshark的服务与产品退化到什么程度了。我曾经是Surshark两年的忠实用户,但是,现在,作为一个负责人的测评&a…

文件操作File类,OutputStream、InputStream、Reader、Writer的用法

文章目录File 类OutputStream、InputStreamInputStreamOutputStreamReader、WriterReaderWriter注意事项简单模拟实战File 类 Java标准库中提供的File类是对硬盘上的文件的抽象,每一个File对象代表了一个文件,因为文件在硬盘上存储,而直接操…

网络编程三要素

网络编程三要素 IP、端口号、协议 三要素分别代表什么 ip:设备在网络中的地址,是唯一的标识 端口号:应用程序在设备中的唯一标识 协议:数据在网络中传输的规则 常见的协议有UDP、TCP、http、https、ftp ip:IPv4和…

Java通过继承的方法来实现长方形的面积和体积

目录 前言 一、测试.java类 1.1运行流程(思想) 1.2代码段 二、Changfangxing.java类 1.1运行流程(思想) 1.2代码段 三、Jxing.java类 1.1运行流程(思想) 1.2代码段 1.3运行截图 前言 1.若有选择…

五、Locust之HTTP用户类

HttpUser是最常用的用户。它增加了一个客户端属性,用来进行HTTP请求。 from locust import HttpUser, task, betweenclass MyUser(HttpUser):wait_time between(5, 15)task(4)def index(self):self.client.get("/")task(1)def about(self):self.client.…

Java避免死锁的几个常见方法(有测试代码和分析过程)

目录 Java避免死锁的几个常见方法 死锁产生的条件 上死锁代码 然后 :jstack 14320 >> jstack.text Java避免死锁的几个常见方法 Java避免死锁的几个常见方法 避免一个线程同时获取多个锁。避免一个线程在锁内同时占用多个资源,尽量保证每个锁…

DMDSC问题测试

问题一:手动停止两节点,单独启动节点二测试 集群停库前状态,登录监视器查看 dmcssm INI_PATHdmcssm.ini show 节点一: [dmdbalocalhost ~]$ DmServiceDMSERVER stop Stopping DmServiceDMSERVER: …

亚马逊 CodeWhisperer: 个人免费的类似GitHubCopilot能代码补全的 AI 编程助手

1、官网 AI Code Generator - Amazon CodeWhisperer - AWS 官方扩展安装教程 2、安装VSCode 下载安装VSCode 3、VSCode安装CodeWhisperer插件 安装VSCode插件 - AWS Toolkit主侧栏,点击AWS ,展开CodeWhisperer,点击Start 在下拉菜单中点…

SAR ADC系列24:冗余设计

目录 冗余(Redundancy) 比较器出错:原因 比较器出错:后果 引入冗余:纠错 冗余:容错量 冗余:非二进制CDAC --sub二进制 冗余:提速 另一种冗余设计方法: 下面的关…

【Homebrew】MacBook的第二个AppStore

英文官网:Homebrew — The Missing Package Manager for macOS (or Linux) 中文官网:macOS(或 Linux)缺失的软件包的管理器 — Homebrew 1 简介 Homebrew 由开发者 Max Howell 开发,并基于 BSD 开源,是一…

Java虚拟机内存区域

Java虚拟机所管理的内存将会包括以下几个运行时数据区域 程序计数器 是一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要通过更改这个计数器的值来改变下一条需要执行的字节码。 由于各个线…

如虎添翼,强大插件让ChatGPT更加游刃有余

ChatGPT模型是当前人工智能领域中备受瞩目的存在。作为一款强大的自然语言处理模型,它具备跨时代的意义,将深刻影响我们的未来。而强大的插件不仅可以丰富ChatGPT的功能,提高其应对复杂问题的能力。还也可以解决一些常见的错误,如…

rust的并发以及kv server网络处理和网络安全部分

理解并发和并行 Golang 的创始人之一,对此有很精辟很直观的解释:并发是一种同时处理很多事情的能力,并行是一种同时执行很多事情的手段。 我们把要做的事情放在多个线程中,或者多个异步任务中处理,这是并发的能力。在多…

Moviepy模块之视频添加图片水印

文章目录前言视频添加图片水印1.引入库2.加载视频文件3.加载水印图片4.缩放水印图片大小5.设置水印的位置5.1 相对于视频的左上角5.2 相对于视频的左下角5.3 相对于视频的右上角5.4 相对于视频的右下角5.5 相对于视频的左中位置5.6 相对于视频的正中位置5.7 相对于视频的右中位…

Redis源码之SDS简单动态字符串

Redis 是内存数据库,高效使用内存对 Redis 的实现来说非常重要。 看一下,Redis 中针对字符串结构针对内存使用效率做的设计优化。 一、SDS的结构 c语言没有string类型,本质是char[]数组;而且c语言数组创建时必须初始化大小&#…

uniapp 之 小球根据当前时间 显示位置

目录 效果图 前言 总代码 1. template 代码 2. script 代码 3. js文件 4.样式 注解 1.小球运动代码 2. picker 时间选择器 补充 效果图 前言 最里面的是一张图片&#xff0c;并不是手写的样式&#xff0c; 总代码 1. template 代码 <uni-popup ref"appointm…

反序列化漏洞及PHP魔法函数

目录 1、漏洞原理 2、序列化&#xff08;以PHP语言为例&#xff09; 3、反序列化 4、PHP魔法函数 &#xff08;1&#xff09;__wakeup() &#xff08;2&#xff09;__destruct() &#xff08;3&#xff09;__construct() &#xff08;4&#xff09;__toString() &…

Pytorch基础 - 3. torch.utils.tensorboard

目录 1. 简介 2. 基本步骤 3. 示例1 - 可视化单条曲线 4. 示例2 - 可视化多条曲线 5. 示例3 - 可视化网络结构 1. 简介 Tensorboard是Tensorflow的可视化工具&#xff0c;常用来可视化网络的损失函数&#xff0c;网络结构&#xff0c;图像等。后来将Tensorboard集成到了P…

【Linux】认识协议

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…

QT程序退出还占进程

问题情况 程序运行时的样子&#xff1a; 程序退出时的样子&#xff1a; 其跑到了后台进程里面&#xff1a; 程序退出了&#xff0c;但在任务管理器里查看&#xff0c;其从进程里面转移到后台进程了。 这种问题&#xff0c;怎么办&#xff0c;代码里&#xff0c;应该释放的也都…