首页 > 其他分享 >Games 101: 旋转矩阵

Games 101: 旋转矩阵

时间:2024-04-27 13:44:43浏览次数:18  
标签:cos end cdot 矩阵 Games vec theta 101 sin

旋转矩阵

本文主要介绍了旋转矩阵的推导,分为两种方式:

  • 旋转坐标
  • 旋转坐标轴
    以下坐标系都是右手坐标系

旋转坐标

已知坐标点\(A(x_a,y_a)\), 旋转\(\theta\)角后变为坐标点\(B(x_b,y_b)\),求解旋转矩阵.

\[{\large \begin{align*} \begin{split} x_a &=r_a \cdot cos(\alpha) =r_b \cdot cos(\alpha) \\ y_a &=r_a \cdot sin(\alpha) =r_b \cdot sin(\alpha) \\ x_b &=r_b \cdot cos(\alpha+\theta) \\ &=r_b \cdot cos(\alpha) \cdot cos(\theta)-r_b \cdot sin(\alpha) \cdot sin(\theta) \\ &=x_a \cdot cos(\theta) - y_a \cdot sin(\theta) \\ y_b &=r_b \cdot sin(\alpha+\theta) \\ &=r_b \cdot cos(\alpha) \cdot sin(\theta)+r_b \cdot sin(\alpha) \cdot cos(\theta) \\ &=x_a \cdot sin(\theta) + y_a \cdot cos(\theta) \end{split} \end{align*} } \]

即:

\[{\large \begin{align*} \begin{split} \begin{bmatrix} x_b \\ y_b \\ \end{bmatrix} =\begin{bmatrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta) \end{bmatrix} \cdot \begin{bmatrix} x_a \\ y_a \\ \end{bmatrix} \end{split} \end{align*} } \]

推广到三维以及其他轴,可以得到三维坐标点的旋转矩阵为:

\[{\large \begin{align*} \begin{split} R_x(\alpha)= \begin{bmatrix} 1 & 0 & 0 \\ 0 & cos(\alpha) & -sin(\alpha) \\ 0 & sin(\alpha) & cos(\alpha) \\ \end{bmatrix} \qquad R_y(\beta)= \begin{bmatrix} cos(\beta) & 0 & sin(\beta)\\ 0 & 1 & 0 \\ -sin(\beta) & 0 & cos(\beta) \\ \end{bmatrix} \qquad R_z(\theta)= \begin{bmatrix} cos(\theta) & -sin(\theta) & 0 \\ sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} \end{split} \end{align*} } \]

旋转坐标

坐标轴\(OX_1Y_1\)绕z轴旋转\(\theta\)角后变为坐标轴\(OX_2Y_2\),点A在坐标轴\(OX_1Y_1\)中坐标为\((x_a,y_a)\), 在坐标轴\(OX_2Y_2\)中\((x_b,y_b)\),求解旋转矩阵.
坐标轴\(OX_1Y_1\),两个方向的单位向量为\(\vec{x_1},\vec{y_1}\),坐标轴\(OX_2Y_2\),两个方向的单位向量为\(\vec{x_2},\vec{y_2}\)

分解单位向量:

\[{\large \begin{align*} \begin{split} \vec{x_1} &=\left | \vec{x_1} \right | \cdot cos(\theta) \cdot \vec{x_2} - \left | \vec{x_1} \right | \cdot sin(\theta) \cdot \vec{y_2} = cos(\theta) \cdot \vec{x_2} - sin(\theta) \cdot \vec{y_2} \\ \vec{y_1} &=\left | \vec{y_1} \right | \cdot sin(\theta) \cdot \vec{x_2} + \left | \vec{x_1} \right | \cdot cos(\theta) \cdot \vec{y_2} = sin(\theta) \cdot \vec{x_2} + cos(\theta) \cdot \vec{y_2} \end{split} \end{align*} } \]

向量变换:

\[{\large \begin{align*} \begin{split} \vec{r_a} &= x_a \cdot \vec{x_1} + y_a \cdot \vec{y_1} \\ &= x_a \cdot ( cos(\theta) \cdot \vec{x_2} - sin(\theta) \cdot \vec{y_2}) + y_a \cdot ( sin(\theta) \cdot \vec{x_2} + cos(\theta) \cdot \vec{y_2})\\ &=(x_a \cdot cos(\theta) +y_a \cdot sin(\theta)) \cdot \vec{x_2} +(-sin(\theta) \cdot x_a + cos(\theta) \cdot y_a)\cdot \vec{y_2} \\ \vec{r_a} &= x_b \cdot \vec{x_2} + y_b \cdot \vec{y_2} \end{split} \end{align*} } \]

\[{\large \begin{align*} \begin{split} \begin{bmatrix} x_b \\ y_b \end{bmatrix} =\begin{bmatrix} cos(\theta) & sin(\theta)\\ -sin(\theta) & cos(\theta) \end{bmatrix} \cdot \begin{bmatrix} x_a \\ y_a \end{bmatrix} \end{split} \end{align*} } \]

推广到三维以及其他轴,可以得到三维坐标轴的旋转矩阵为:

\[{\large \begin{align*} \begin{split} R_x(\alpha)= \begin{bmatrix} 1 & 0 & 0 \\ 0 & cos(\alpha) & sin(\alpha) \\ 0 & -sin(\alpha) & cos(\alpha) \\ \end{bmatrix} \qquad R_y(\beta)= \begin{bmatrix} cos(\beta) & 0 & -sin(\beta)\\ 0 & 1 & 0 \\ sin(\beta) & 0 & cos(\beta) \\ \end{bmatrix} \qquad R_z(\theta)= \begin{bmatrix} cos(\theta) & sin(\theta) & 0 \\ -sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} \end{split} \end{align*} } \]

标签:cos,end,cdot,矩阵,Games,vec,theta,101,sin
From: https://www.cnblogs.com/naiveDevil/p/18161918

相关文章

  • 力扣-54. 螺旋矩阵
    1.题目题目地址(54.螺旋矩阵-力扣(LeetCode))https://leetcode.cn/problems/spiral-matrix/题目描述给你一个m行n列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:......
  • 矩阵快速幂
    1.参考参考:【矩阵快速幂】简单题学「矩阵快速幂」2.定义2.1定义如果直接求取M^n,时间复杂度是O(n),可以定义矩阵乘法,然后用快速幂算法来加速这里M^n的求取,简化时间复杂度为O(logn)主体思路就是不求M^n而是求M^(n/2),然后先不求M^(n/2),先求M^(n/4)具体实现同......
  • 【刚度矩阵推导】2d frame 单元
    2dframe单元是x-y平面上的单元,每个节点上有2个平移自由度的和一个转动自由度.局部坐标系下,单元位移向量为:\(u=[u_1,u_2,u_3,u_4,u_5,u_6]^{T}\)其局部坐标系下的刚度矩阵可以由2dtruss单元和2dbornoulli-beam单元的刚度矩阵组合而成.使用matlab进行推导:%!b......
  • 【知识点】快速幂与矩阵快速幂
    什么是快速幂,为什么要使用快速幂?Macw:快速幂有好多好处。Penelope:例如?Macw:它比较快。见名知意,快速幂算法可以在非常短的时间内求出一个数的\(n\)次幂。虽然快速幂在初学阶段的应用不算太多,但是快速幂背后的思想是非常值得我们去理解的。举例而言,如果我们要求出\(3^......
  • 矩阵树定理 BEST 定理
    矩阵树定理\(\text{BEST}\)定理证明很复杂,连\(\text{cmd}\)这种无敌神犇都不会,而且对定理本身的可扩展性几乎为\(0\),即每次套用的定理都跟模板一模一样。矩阵树无论任何情况,一定要不能有自环无论任何情况,一定要不能有自环无论任何情况,一定要不能有自环对于无向无权图,......
  • 记 Intel 的 31.0.101.5186 版本驱动带崩 WPF 程序
    本文记录一个Intel显卡驱动问题,暂时只在IntelUHDGraphics770显卡带31.0.101.5186版本的显卡驱动时,才概率复现问题显卡驱动31.0.101.5186版本是在2024.01.24之前发布的,在出现问题的设备上的表现是,运行任何的WPF应用程序,都会闪崩,最多窗口创建出来,但是没有任何窗口内......
  • 矩阵树定理 BEST 定理
    矩阵树定理\(\text{BEST}\)定理证明很复杂,连\(\text{cmd}\)这种无敌神犇都不会,而且对定理本身的可扩展性几乎为\(0\),即每次套用的定理都跟模板一模一样。矩阵树无论任何情况,一定要不能有自环无论任何情况,一定要不能有自环无论任何情况,一定要不能有自环对于无向无权图,......
  • Hessian矩阵以及在血管增强中的应用—OpenCV实现【2024年更新】
    有别于广为人知的Sobel、Canny等一阶算法,基于Hessian矩阵能够得到图像二阶结果,这将帮助我们深入分析图像本质。Hessian矩阵在图像处理中有着广泛的应用:其中在图像分割领域,包括边缘检测、纹理分析等;在图像增强领域,包括边缘增强、边缘消除等。本文从Hessian矩阵定义出发,通过清晰简......
  • 矩阵
    矩阵的定义:矩阵(matrix)其实就是一个二维数组,第\(i\)行\(j\)列的元素即为\(a_{i,j}\)矩阵的运算:加减:它们均为逐个元素进行。只有同型矩阵之间可以对应相加减。转置:矩阵的转置,就是在矩阵的右上角写上转置「T」记号,表示将矩阵的行与列互换。对称矩阵转置前后保持不变。乘......
  • cf gym101981e Eva and Euro coins
     20182019-acmicpc-asia-nanjing-regional-contest-en.pdf(codeforces.com) 这类字符串的能否从s状态到达t状态的题。还可以删除若干子串后然后比较。感觉是一种套路。 100↔111↔001011↔000↔110 01001↔10010可以移动 用栈,如果找到k个连续相同,然后栈删掉这k......