向量的旋转矩阵

news/2024/5/17 20:18:56

我们都知道,矩阵的乘法可以表示旋转。那么,这一理论的数学机理是什么呢?以及,这个旋转角度该怎么用矩阵表示呢?

本文用二维向量旋转来推导旋转矩阵的公式。假设,我们有一个向量P(x, y),准备通过一个旋转矩阵将其旋转到Q(x’, y’),假设旋转角度为 α \alpha α

我们用极坐标表示向量P和向量Q,默认原点是向量的起点, θ \theta θ ϕ \phi ϕ分别表示P和Q与x轴正向的夹角。那么有,
x = r ∗ c o s ( θ ) (1) x=r*cos(\theta)\tag{1} x=rcos(θ)(1) y = r ∗ s i n ( θ ) (2) y=r*sin(\theta)\tag{2} y=rsin(θ)(2) x ′ = r ∗ c o s ( ϕ ) = r ∗ c o s ( α − θ ) (3) x'=r*cos(\phi)=r*cos(\alpha-\theta)\tag{3} x=rcos(ϕ)=rcos(αθ)(3) y ′ = r ∗ s i n ( ϕ ) = r ∗ s i n ( α − θ ) (4) y'=r*sin(\phi)=r*sin(\alpha-\theta)\tag{4} y=rsin(ϕ)=rsin(αθ)(4)
咱们用一张图可以清晰解释上面5个公式:
极坐标
我们直接把式(3)、(4)展开:
x ′ = r ∗ c o s ( θ ) c o s ( α ) + r ∗ s i n ( θ ) s i n ( α ) x'=r*cos(\theta)cos(\alpha)+r*sin(\theta)sin(\alpha) x=rcos(θ)cos(α)+rsin(θ)sin(α) = x c o s ( α ) + y s i n ( α ) (5) =xcos(\alpha)+ysin(\alpha)\tag{5} =xcos(α)+ysin(α)(5)
y ′ = r ∗ s i n ( α ) c o s ( θ ) − r ∗ s i n ( θ ) c o s ( α ) y'=r*sin(\alpha)cos(\theta)-r*sin(\theta)cos(\alpha) y=rsin(α)cos(θ)rsin(θ)cos(α) = x s i n ( α ) − y c o s ( α ) (6) =xsin(\alpha)-ycos(\alpha)\tag{6} =xsin(α)ycos(α)(6)
整理(5)(6)得知,旋转矩阵R可以表示为:
R = [ c o s ( α ) − s i n ( α ) s i n ( α ) c o s ( α ) ] R= \begin{bmatrix} {cos(\alpha)}&{-sin(\alpha)}\\ {sin(\alpha)}&{cos(\alpha)} \end{bmatrix} R=[cos(α)sin(α)sin(α)cos(α)]
这里,我们需要明确的是:旋转角度 α \alpha α表示的是逆时针旋转
综上,我们可以总结出二维向量的旋转公式:
v ′ = R v (7) v'=Rv\tag{7} v=Rv(7)


推广到三维

在空间中,有一个三维向量v,要旋转到v’,假设其旋转的欧拉角为 ( ψ , θ , φ ) (ψ, θ, φ) (ψ,θ,φ),那么可以拆解成三个二维来进行。
我们先绕x轴旋转 φ φ φ、再绕y轴旋转 θ \theta θ,最后绕z轴旋转 ψ ψ ψ。于是有:
rotation
R = R z ( ψ ) ∗ R y ( θ ) ∗ R x ( φ ) (8) R = R_z(ψ) * R_y(θ) * R_x(φ)\tag{8} R=Rz(ψ)Ry(θ)Rx(φ)(8) v ′ = R v (9) v'=Rv\tag{9} v=Rv(9)


http://www.mrgr.cn/p/11617284

相关文章

C语言-调试技巧

目录 一、调试介绍1.1 Debug和Release的介绍1.2 Windows环境调试介绍1.2.1 学会快捷键1.2.2 查看临时变量的值1.2.3 查看内存信息1.2.4 查看调用堆栈1.2.4 查看汇编信息1.2.5 查看寄存器信息 二、编程常见的错误2.1 编译型错误2.2 链接型错误2.3 运行时错误 三、易于调试的代码…

PEI是聚醚酰亚胺(Polyetherimide)主要作用是什么?

PEI是聚醚酰亚胺(Polyetherimide)主要作用是什么? 聚醚酰亚胺(Polyetherimide,PEI)作为一种高性能的工程塑料,具有多种优异的性能,因此在不同领域中有广泛的应用。其主要作用包括&…

Visual Studio安装MFC开发组件

MFC由于比较古老了,Visual Studio默认没有这个开发组件。最近由于一些原因,需要使用这个库,这就需要另外安装。 参考了网上的一些资料,根据实际使用,其实很多步骤不是必须的。 https://zhuanlan.zhihu.com/p/68117276…

【Scala---01】Scala『 Scala简介 | 函数式编程简介 | Scala VS Java | 安装与部署』

文章目录 1. Scala简介2. 函数式编程简介3. Scala VS Java4. 安装与部署 1. Scala简介 Scala是由于Spark的流行而兴起的。Scala是高级语言,Scala底层使用的是Java,可以看做是对Java的进一步封装,更加简洁,代码量是Java的一半。 因…

mysql刷题题后感

刷题的时候会将一些题目收藏,也会收藏错题,做完了整合一下,会有一些补充知识点。函数篇(和长篇大论的查询有交集) Q1: 查询语句select stuff(lo ina,3, 1, ve ch)结果为?love love china china love china答:stuff,删除并加入字符,STUFF(原字符, 开始位置, 删除长度,…

软件设计师:UML

UML基本概念UML(Unified Modeling Language,统一建模语言) UML词汇表包含3种构造块:事物、关系、图 事物结构事物:静态部分,如类、接口、用例等 行为事物:动态部分,如交互、状态机、活动 分组事物:包Package 注释事物:注释关系 UML中有4种关系:依赖、关联、泛化、实现…

【Mac】Photoshop 2024 for mac最新安装教程

软件介绍 Photoshop 2024是Adobe公司推出的一款图像处理软件,它支持Windows和Mac OS系统。Adobe Photoshop是业界领先的图像编辑和处理软件之一,广泛用于设计、摄影、数字绘画等领域。 Photoshop 2024的功能包括: 1.图像编辑:提…

react核心知识

1. 对 React 的理解、特性 React 是靠数据驱动视图改变的一种框架,它的核心驱动方法就是用其提供的 setState 方法设置 state 中的数据从而驱动存放在内存中的虚拟 DOM 树的更新 更新方法就是通过 React 的 Diff 算法比较旧虚拟 DOM 树和新虚拟 DOM 树之间的 Chan…

ElasticSearch教程入门到精通——第四部分(基于ELK技术栈elasticsearch 7.x新特性)

ElasticSearch教程入门到精通——第四部分(基于ELK技术栈elasticsearch 7.x新特性) 1. Elasticsearch进阶1.1 核心概念1.1.1 索引Index1.1.1.1 索引创建原则1.1.1.2 Inverted Index 1.1.2 类型Type1.1.3 文档Document1.1.4 字段Field1.1.5 映射Mapping1.…

linux13-用户,用户组

linux13-用户,用户组需要root权限执行 group add 创建用户组 # 查看含有关键词catcats66的组, 不存在 getent group | catcats66# 添加用户组catcats66 sudo groupadd catcats66 # 查询到含有关键词catcats66的组 getent group | catcats66groupdel 删除用户组 # 删除用户组 gr…

如何用OceanBase的 Load Data 导入CSV文件

0 前言 CSV文件(Comma-Separated Values,字符分隔值)是一种普遍采用的数据存储格式,有不少企业和机构都用它来进行数据的管理和存储。身为开发者,您可能经常遇到这样的需求:需要将CSV的数据导入OceanBase数…

GPT3 终极指南(一)

原文:zh.annas-archive.org/md5/6de8906c86a2711a5a84c839bec7e073 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 GPT-3,或者说是 Generative Pre-trained Transformer 3,是由 OpenAI 开发的基于 Transformer 的大型语言模型…

C语言二叉树和堆

二叉树基础知识: 1.栈、队列和顺序表都是线性结构 但是二叉树不是,二叉树是多分支结构 2.任何一棵树都可以拆分为子树和根节点,许多二叉树的相关问题都是用分治的思想进行函数的递归进行解决。 例:前序,中序&#x…

【VMware vSAN】如何删除虚拟机存储策略中的vSAN默认存储策略。

登录vSphere Client,展开左上角设置-策略和配置文件-虚拟机存储策略,可以查看系统默认创建的虚拟机存储策略。这些存储策略由系统自动生成,其中有一部分存储策略仅用于vSAN数据存储,作为vSAN 默认存储策略以应用于,当在部署虚拟机时未进行自定义存储策略时所默认分配的策略…

探索软件设计的九大核心架构模式

在当今迅速发展的软件开发领域,设计出卓越的软件系统是每一位程序员的追求。软件架构扮演着至关重要的角色,决定了系统的可维护性、可扩展性和性能。本文将深入探讨九大核心架构模式,揭示它们在软件设计中的美妙之处,以及在实际应用中的最佳实践。 分层架构(Layered Archi…

XSS(Pikachu)

XSS(Pikachu靶场) 概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS; XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一…

axios 中文文档 翻译

0.18.0的版本更新有一段时间了,使用起来跟原先基本没有什么变化。但是增加了一些功能,例如错误处理的辨别,于07-06-2018重新翻译和校验了该翻译,更正了一些错别字和表达不准的地方,但是难免仍有错误,欢迎指…

【Unity学习笔记】第十四 Prefab 概念解惑

目录 1 prefab、prefab变体、prefab覆盖和prefab 嵌套2 connect 与unpack3 prefab到底是什么,它和gameobject又有什么区别?4 为什么要用prefab?5 代码动态加载prefab6 为什么我unity PrefabUtility.InstantiatePrefab() 得到的是null7 Prefab…

【数据结构】:链表的带环问题

🎁个人主页:我们的五年 🔍系列专栏:数据结构 🌷追光的人,终会万丈光芒 前言: 链表的带环问题在链表中是一类比较难的问题,它对我们的思维有一个比较高的要求,但是这一类…

Xcode隐私协议适配

1. Privacy manifest files 1.1 简介 自己App或三方SDK(通过XCFrameworks|Swift packages|Xcode projects集成的)需要包含一个隐私清单文件(privacy manifest)叫作 PrivacyInfo.xcprivacy。它是一个属性列表,记录了A…