网站建设报价模块,网站全网建设 莱芜,加强网站建设与管理的通知,wordpress 视频黑屏文章目录1. 转换矩阵、平移矩阵、旋转矩阵之间的关系2. 缩放变换、平移变换和旋转变换2. python实现旋转矩阵、四元数、欧拉角互相转化由于在平时总是或多或少的遇到平移旋转的问题#xff0c;每次都是现查资料#xff0c;然后查了忘#xff0c;忘了继续查#xff0c;这次弄…
文章目录1. 转换矩阵、平移矩阵、旋转矩阵之间的关系2. 缩放变换、平移变换和旋转变换2. python实现旋转矩阵、四元数、欧拉角互相转化由于在平时总是或多或少的遇到平移旋转的问题每次都是现查资料然后查了忘忘了继续查这次弄明白之后干脆写一篇文章给人方便同时于己方便后续如有扩充或变动也方便添加。1. 转换矩阵、平移矩阵、旋转矩阵之间的关系
假设有两个向量a1(x1,y1,z1)a_1 (x_1, y_1, z_1)a1(x1,y1,z1)和a2(x2,y2,z2)a_2 (x_2, y_2, z_2)a2(x2,y2,z2)它们的转换关系为
a1R∗a2Ta_1 R * a_2 T a1R∗a2T 这里RRR就是它的旋转矩阵TTT就是它的平移矩阵。使用齐次方式表示如下
(a11)(RT01)∗(a21)\begin{pmatrix} a_1\\ 1 \end{pmatrix} \begin{pmatrix} RT\\ 01 \end{pmatrix}* \begin{pmatrix} a_2\\1 \end{pmatrix} (a11)(R0T1)∗(a21) 使用元素值替换后表示如下 (x1y1z11)(r11r12r13t1r21r22r23t2r31r32r33t30001)∗(x2y3z21)\begin{pmatrix} x_1\\y_1\\z_1\\1 \end{pmatrix} \begin{pmatrix} r_{11}r_{12}r_{13}t_{1}\\ r_{21}r_{22}r_{23}t_{2}\\ r_{31}r_{32}r_{33}t_{3}\\ 0001 \end{pmatrix}* \begin{pmatrix} x_2\\y_3\\z_2\\1 \end{pmatrix} x1y1z11r11r21r310r12r22r320r13r23r330t1t2t31∗x2y3z21 在仿射变换中的转换矩阵表示先线性变换再平移。在这里转换矩阵表示如下 转换矩阵(r11r12r13t1r21r22r23t2r31r32r33t30001)转换矩阵 \begin{pmatrix} r_{11}r_{12}r_{13}t_{1}\\ r_{21}r_{22}r_{23}t_{2}\\ r_{31}r_{32}r_{33}t_{3}\\ 0001 \end{pmatrix} 转换矩阵r11r21r310r12r22r320r13r23r330t1t2t31 平移矩阵表示如下 平移矩阵T(t1t2t3)平移矩阵T\begin{pmatrix} t_{1}\\ t_{2}\\ t_{3}\\ \end{pmatrix} 平移矩阵Tt1t2t3 旋转矩阵表示如下 旋转矩阵R(r11r12r13r21r22r23r31r32r33)旋转矩阵R\begin{pmatrix} r_{11}r_{12}r_{13}\\ r_{21}r_{22}r_{23}\\ r_{31}r_{32}r_{33} \end{pmatrix} 旋转矩阵Rr11r21r31r12r22r32r13r23r33
2. 缩放变换、平移变换和旋转变换
如果理解以上知识点之后缩放变换、平移变换和旋转变换的特殊情况也迎刃而解。
缩放变换
缩放变换只是在尺度上进行改变所以它的变换形式如下 平移变换
平移变换的时候角度不发生改变也就是旋转矩阵R为单位矩阵所以它的变换形式如下 旋转变换
当空间内的物体绕着 x 轴y 轴或者 z 轴旋转的时候变换矩阵为 对于一般性的旋转问题可以用简单的旋转描述复杂的旋转。用 x 轴y 轴和 z 轴上的旋转来定义旋转 这三个角就被称作欧拉角Euler angles。
一目了然这个也不错
2. python实现旋转矩阵、四元数、欧拉角互相转化
在应用中我们往往会遇到旋转矩阵、四元数和欧拉角之间的互相转换在这里我们只使用python代码来实现它们之间互相转换。
from scipy.spatial.transform import Rotation as Rdef quaternion2euler(quaternion):r R.from_quat(quaternion)euler r.as_euler(xyz, degreesTrue)return eulerdef euler2quaternion(euler):r R.from_euler(xyz, euler, degreesTrue)quaternion r.as_quat()return quaterniondef euler2rotation(euler):r R.from_euler(xyz, euler, degreesTrue)rotation_matrix r.as_matrix()return rotation_matrixdef quaternion2rotation_matrix(quaternion):r R.from_quat(quaternion)rotation_matrix r.as_matrix()return rotation_matrixdef rotation_matrix2euler(rotation_matrix):r R.from_matrix(rotation_matrix)euler r.as_euler(xyz, degreesTrue)return eulerdef rotation_matrix2quaternion(rotation_matrix):r R.from_matrix(rotation_matrix)quaternion r.as_quat()return quaternionif __name__ __main__:# 四元数欧拉角quaternion [0.71934025092983234, -1.876085535681999e-06, -3.274841213980097e-08, -0.69465790385533299]euler quaternion2euler(quaternion) # [-9.20000743e01 1.52039496e-04 -1.52039496e-04]print(feuler: {euler})# 四元数旋转矩阵rotation_matrix quaternion2rotation_matrix(quaternion)print(frotation_matrix: {rotation_matrix})# 欧拉角四元数quaternion euler2quaternion(euler)print(fquaternion: {quaternion}) # [-7.19340251e-01 1.87608554e-06 3.27484122e-08 6.94657904e-01]# 欧拉角旋转矩阵rotation_matrix euler2rotation(euler)print(frotation_matrix: {rotation_matrix})# 旋转矩阵欧拉角euler rotation_matrix2euler(rotation_matrix)print(feuler: {euler})# 旋转矩阵四元数quaternion rotation_matrix2quaternion(rotation_matrix)print(fquaternion: {quaternion})