草庐IT

欧拉角、旋转矩阵及四元数

大作家佚名 2025-07-09 原文

欧拉角、旋转矩阵及四元数

1. 简介

常用姿态参数表达方式包括方向余弦矩阵、欧拉轴/角参数、欧拉角、四元数以及罗德里格参数等。高分辨率光学遥感卫星主要采用欧拉角与四元数对姿态参数进行描述。这里着重讲解欧拉角、旋转矩阵和四元数。

2. 欧拉角

2.1 欧拉角定义

欧拉角是表征刚体旋转的一种方法之一,由莱昂哈德·欧拉 引入的三个角度,用于描述刚体相对于固定坐标系的方向。在摄影测量、空间科学或其它技术领域,一般用一组(三个)欧拉角描述两个空间坐标之间的旋转变换关系。

刚体在三维空间的一次旋转可以由绕 X \mathrm{X} X 轴旋转的角度、绕 Y \mathrm{Y} Y 轴旋转的角度、绕 Z \mathrm{Z} Z 轴旋转的角度来表征, 这三个角度分别是横滚角(roll, 符号 φ \varphi φ )、俯仰角(pitch, 符号 θ \theta θ )、航向角(yaw, 符号 ψ \psi ψ ),或者用符号 α \alpha α β \beta β γ \gamma γ分别表示绕XYZ轴(横滚、俯仰和航向)旋转的角度。 三个角的正负号可由右手定则表示。

相比于其它姿态参数表达方式,欧拉角参数具有明显的几何意义,可以更加直接对姿态动力学方程进行描述。根据欧拉定理得到,刚体绕固定点的位移可以转成若干次有限转动的合成。针对高分辨率光学遥感卫星,同样可以采用上述原理与方法实现参考坐标系(J2000坐标系、WGS84坐标系)与卫星本体坐标系之间转换。参考坐标系与本体坐标系间转换过程中,不同的转动顺序与方式将会得到不同形式的欧拉角参数

2.2 右手系和左手系


左图和右图分别是左手系和右手系。
对于右手坐标,右拇指沿 z 轴指向正方向,食指指向x 轴,中指指向y轴。
对于左手坐标,左拇指沿 z 轴指向正方向,食指指向x 轴,中指指向y轴。

2.3 转换流程

刚体的取向可以用三个基本旋转矩阵来决定。换句话说,任何关于刚体旋转的旋转矩阵是由三个基本旋转矩阵复合而成的 。 由坐标系 S a S_{a} Sa S b S_{b} Sb 的变换可通过以下三次连续的转动实现:

Step1:坐标系 O − x a y a z a O-x_{a} y_{a} z_{a} Oxayaza z a z_{a} za 轴逆时针转过角 ψ \psi ψ, 称为 O − x ′ y ′ z a O-x^{\prime} y^{\prime} z_{a} Oxyza;
Step2:坐标系 O − x ′ y ′ z a O-x^{\prime} y^{\prime} z_{a} Oxyza y ′ y' y 轴逆时针转过角 θ \theta θ, 称为 O − x b y ′ z ′ ′ O-x_b y^{\prime} z'' Oxbyz;
Step3: 坐标系 O − x b y ′ z ′ ′ O-x_{b} y^{\prime} z^{\prime \prime} Oxbyz x b x_{b} xb 轴逆时针转过角 φ \varphi φ, 称为 O − x b y b z b O-x_{b} y_{b} z_{b} Oxbybzb

上述旋转角 φ , θ , ψ \varphi, \theta, \psi φ,θ,ψ 就是一组欧拉角, 它们完全决定 S a S_{a} Sa S b S_{b} Sb 之间的相对姿态, 其中转动过程可用符号表示:
S a ⟶ R z ( ψ ) ∘ ⟶ R y ( θ ) ∘ ⟶ R x ( φ ) S b S_{a} \stackrel{R_{z}(\psi)}{\longrightarrow} \circ \stackrel{R_{y}(\theta)}{\longrightarrow} \circ \stackrel{R_{x}(\varphi)}{\longrightarrow} S_{b} SaRz(ψ)Ry(θ)Rx(φ)Sb

经过三次变换,得到:

[ x b y b z b ] = R x ( φ ) R y ( θ ) R z ( ψ ) [ x a y a z a ] \left[\begin{array}{l} x_{b} \\ y_{b} \\ z_{b} \end{array}\right]=R_{x}(\varphi) R_{y}(\theta) R_{z}(\psi)\left[\begin{array}{l} x_{a} \\ y_{a} \\ z_{a} \end{array}\right] xbybzb=Rx(φ)Ry(θ)Rz(ψ)xayaza

所以由 S a S_{a} Sa S b S_{b} Sb 的坐标变换矩阵为:

R = R x ( φ ) R y ( θ ) R z ( ψ ) R=R_{x}(\varphi) R_{y}(\theta) R_{z}(\psi) R=Rx(φ)Ry(θ)Rz(ψ)

一般来说, 三维空间的坐标变换可以由三次基元变换矩阵相乘得到。当欧拉角的定义与上述顺序和旋转方向不一致时,仍可按照上述原则处理。使用欧拉角时,我们必须明确表示出夹角的顺序。这三个旋转是依次施加的,顺序不同,产生的结果也不同。因此,使用欧拉角前,必须先做好明确的定义。

旋转顺序: 在经典力学里,时常用yxz顺序来设定欧拉角;照着第二个转动轴的轴名,简称为x顺序。还有一种顺序,xyz顺序,常用在航空航天工程中

任何方向都可以通过从已知的标准方向开始组成三个元素旋转来实现。等价地,任何旋转矩阵R都可以分解为三个元素旋转矩阵的乘积。例如:
R = R x ( α ) R y ( β ) R z ( γ ) {\displaystyle R=R_x(\alpha )R_y(\beta )R_z(\gamma )} R=RxαRyβRzγ
或者
R = R x ( φ ) R y ( θ ) R z ( ψ ) {\displaystyle R=R_x(\varphi )R_y(\theta )R_z(\psi )} R=RxφRyθRzψ

滚动角的大小范围为 − π — π -\pi—\pi ππ 。在围绕 X \mathrm{X} X 轴旋转 φ \varphi φ 之后, 可以用旋转矩阵 R x ( φ ) R_{x}(\varphi) Rx(φ) 表 示, 如下式:

R x ( φ ) = [ 1 0 0 0 cos ⁡ φ sin ⁡ φ 0 − sin ⁡ φ cos ⁡ φ ] \boldsymbol{R}_{x}(\varphi)=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \varphi & \sin \varphi \\ 0 & -\sin \varphi & \cos \varphi \end{array}\right] Rx(φ)=1000cosφsinφ0sinφcosφ

俯仰角的大小在 − π / 2 — π / 2 -\pi / 2—\pi / 2 π/2π/2 之间。在绕 Y \mathrm{Y} Y 轴转动 θ \theta θ 之后, 可以用 R y ( θ ) \boldsymbol{R}_{\mathrm{y}}(\theta ) Ry(θ) 来表示:

R y ( θ ) = [ cos ⁡ θ 0 − sin ⁡ θ 0 1 0 sin ⁡ θ 0 cos ⁡ θ ] \boldsymbol{R}_{y}(\theta)=\left[\begin{array}{ccc} \cos \theta & 0 & -\sin \theta \\ 0 & 1 & 0 \\ \sin \theta & 0 & \cos \theta \end{array}\right] Ry(θ)=cosθ0sinθ010sinθ0cosθ

航向角的大小范围为 − π — π -\pi—\pi ππ 。在绕 Z 轴旋转 φ \varphi φ 后, 可以用旋转矩阵 R y ( ψ ) \boldsymbol{R}_{\mathrm{y}}(\psi) Ry(ψ) 来表 示:

R z ( ψ ) = [ cos ⁡ ψ sin ⁡ ψ 0 − sin ⁡ ψ cos ⁡ ψ 0 0 0 1 ] \boldsymbol{R}_{z}(\psi )=\left[\begin{array}{ccc} \cos \psi & \sin \psi & 0 \\ -\sin \psi & \cos \psi & 0 \\ 0 & 0 & 1 \end{array}\right] Rz(ψ)=cosψsinψ0sinψcosψ0001

沿着不同旋转方向的欧拉角会导致旋转矩阵不同, 所以在用欧拉角表征时, 要给出旋转顺序。下图为转换的基元变化:

欧拉角优点和缺点:
(1)三个角度组成,直观,容易理解。可以进行从一个方向到另一个方向旋转大于180度的角度。
(2)对两个朝向进行插值比较困难。简单地对X、Y、Z角度进行插值得到的结果不太理想。
(3)实施多次旋转很复杂且不精确,必须计算出最终的旋转矩阵,然后据此推测出欧拉角。
(4)死锁问题

参考:四元数与欧拉角

3. 旋转矩阵

参考:旋转矩阵与欧拉角之间的转换Euler Angle Formulas 给出了不同顺序下测转换矩阵,下面是xyz顺序转换矩阵。其中,cx、cy、cz分别表示绕xyz轴的旋转角余弦,sx、sy、sz分别表示绕xyz轴的旋转角正弦。当旋转顺序为航向角-俯仰角-横滚角时, 其对应的旋转矩阵是按顺序矩阵相乘的结果:
R = R x ( φ ) R y ( θ ) R z ( ψ ) = [ cos ⁡ θ cos ⁡ ψ sin ⁡ ψ cos ⁡ θ − sin ⁡ θ − cos ⁡ ψ sin ⁡ ψ cos ⁡ ψ cos ⁡ φ + sin ⁡ ψ sin ⁡ θ sin ⁡ φ cos ⁡ θ sin ⁡ φ sin ⁡ ψ sin ⁡ φ + cos ⁡ ψ sin ⁡ θ cos ⁡ φ − cos ⁡ ψ sin ⁡ φ + sin ⁡ ψ sin ⁡ θ cos ⁡ φ cos ⁡ θ cos ⁡ φ ] = [ R 11 R 12 R 13 R 21 R 22 R 23 R 31 R 32 R 33 ] \begin{aligned} &\boldsymbol{R}=\boldsymbol{R}_{x}(\varphi) \boldsymbol{R}_{y}(\theta) \boldsymbol{R}_{z}(\psi ) \\ &=\left[\begin{array}{ccc} \cos \theta \cos \psi & \sin \psi \cos \theta & -\sin \theta \\ -\cos \psi \sin \psi & \cos \psi \cos \varphi+\sin \psi \sin \theta \sin \varphi & \cos \theta \sin \varphi \\ \sin \psi \sin \varphi+\cos \psi \sin \theta \cos \varphi & -\cos \psi \sin \varphi+\sin \psi \sin \theta \cos \varphi & \cos \theta \cos \varphi \end{array}\right] \\ &=\left[\begin{array}{lll} R_{11} & R_{12} & R_{13} \\ R_{21} & R_{22} & R_{23} \\ R_{31} & R_{32} & R_{33} \end{array}\right] \end{aligned} R=Rx(φ)Ry(θ)Rz(ψ)=cosθcosψcosψsinψsinψsinφ+cosψsinθcosφsinψcosθcosψcosφ+sinψsinθsinφcosψsinφ+sinψsinθcosφsinθcosθsinφcosθcosφ=R11R21R31R12R22R32R13R23R33
或者
R = [ c y c z − c y s z s y c z s x s y + c x s z c x c z − s x s y s z − c y s x − c x c z s y + s x s z c z s x + c x s y s z c x c y ] \mathrm{R}=\left[\begin{array}{ccc} c_y c_z & -c_y s_z & s_y \\ c_z s_x s_y+c_x s_z & c_x c_z-s_x s_y s_z & -c_y s_x \\ -c_x c_z s_y+s_x s_z & c_z s_x+c_x s_y s_z & c_x c_y \end{array}\right] R=cyczczsxsy+cxszcxczsy+sxszcyszcxczsxsyszczsx+cxsyszsycysxcxcy

旋转矩阵变换到欧拉角的公式:

{ ψ = tan ⁡ − 1 R 12 R 22 θ = − sin ⁡ − 1 R 13 φ = tan ⁡ − 1 R 23 R 33 \left\{\begin{array}{l} \psi=\tan ^{-1} \frac{R_{12}}{R_{22}} \\ \theta=-\sin ^{-1} R_{13} \\ \varphi=\tan ^{-1} \frac{R_{23}}{R_{33}} \end{array}\right. ψ=tan1R22R12θ=sin1R13φ=tan1R33R23

4. 四元数

1843 年爱尔兰数学家哈密顿 (W.R.Hamilton) 发明了四元数, 即形如 q ˙ = q 0 + q 1 i + q 2 j + q 3 k \dot{q}=q_{0}+q_{1} i+q_{2} \boldsymbol{j}+q_{3} k q˙=q0+q1i+q2j+q3k 的超复数, 同时他也给出了四元数的加法、乘法规则以及四元数 的逆和模, 指出四元数能够通过旋转、伸长或缩短等变换将一个给定的矢量变成另一个矢量。四元数表达中, q 0 , q 1 , q 2 , q 3 q_{0}, q_{1}, q_{2}, q_{3} q0,q1,q2,q3 为任意实数, i , j , k i, j, k i,j,k 是虚数单位, 满足 i 2 = j 2 = k 2 = − 1 , j k = − k j = i , k i = − i k = j , i j = − j i = k ′ i^{2}=j^{2}=k^{2}=-1, j k=-k j=i, k i=-i k=j, i j=-j i=k^{\prime} i2=j2=k2=1,jk=kj=i,ki=ik=j,ij=ji=k 。 其中 q 0 + q 1 i + q 2 j + q 3 k q_{0}+q_{1} i+q_{2} j+q_{3} k q0+q1i+q2j+q3k 为四元数的代数形式, q 0 q_{0} q0 为四元数 q ˙ \dot{q} q˙ 的实部, q 1 i + q 2 j + q 3 k q_{1} \boldsymbol{i}+q_{2} \boldsymbol{j}+q_{3} \boldsymbol{k} q1i+q2j+q3k 为四元数 q ˙ \dot{q} q˙ 的虚部。

四元数是当前用于高分辨率光学遥感卫星在轨姿态测量与控制的常用姿态参数表达方式,不存在奇点情况,表达方式具有唯一性。

4.1 四元数与欧拉角和旋转矩阵之间等效变换

四元数与旋转矩阵变换为:

R = [ 2 q 0 2 + 2 q 1 2 − 1 2 q 1 q 2 − 2 q 0 q 3 2 q 1 q 3 + 2 q 0 q 2 2 q 1 q 2 + 2 q 0 q 3 2 q 0 2 + 2 q 2 2 − 1 2 q 2 q 3 − 2 q 0 q 1 2 q 1 q 3 − 2 q 0 q 2 2 q 2 q 3 + 2 q 0 q 1 2 q 0 2 + 2 q 3 2 − 1 ] \boldsymbol{R}=\left[\begin{array}{ccc} 2 q_{0}^{2}+2 q_{1}^{2}-1 & 2 q_{1} q_{2}-2 q_{0} q_{3} & 2 q_{1} q_{3}+2 q_{0} q_{2} \\ 2 q_{1} q_{2}+2 q_{0} q_{3} & 2 q_{0}^{2}+2 q_{2}^{2}-1 & 2 q_{2} q_{3}-2 q_{0} q_{1} \\ 2 q_{1} q_{3}-2 q_{0} q_{2} & 2 q_{2} q_{3}+2 q_{0} q_{1} & 2 q_{0}^{2}+2 q_{3}^{2}-1 \end{array}\right] R=2q02+2q1212q1q2+2q0q32q1q32q0q22q1q22q0q32q02+2q2212q2q3+2q0q12q1q3+2q0q22q2q32q0q12q02+2q321

欧拉角到四元数变换为:

{ q 0 = cos ⁡ ψ 2 cos ⁡ θ 2 cos ⁡ φ 2 + sin ⁡ ψ 2 sin ⁡ θ 2 sin ⁡ φ 2 q 1 = − cos ⁡ ψ 2 cos ⁡ θ 2 cos ⁡ φ 2 + sin ⁡ ψ 2 sin ⁡ θ 2 sin ⁡ φ 2 q 2 = − cos ⁡ ψ 2 cos ⁡ θ 2 cos ⁡ φ 2 − sin ⁡ ψ 2 sin ⁡ θ 2 sin ⁡ φ 2 q 3 = − cos ⁡ ψ 2 cos ⁡ θ 2 cos ⁡ φ 2 + sin ⁡ ψ 2 sin ⁡ θ 2 sin ⁡ φ 2 \left\{\begin{array}{l} q_{0}=\cos \frac{\psi}{2} \cos \frac{\theta}{2} \cos \frac{\varphi}{2}+\sin \frac{\psi}{2} \sin \frac{\theta}{2} \sin \frac{\varphi}{2} \\ q_{1}=-\cos \frac{\psi}{2} \cos \frac{\theta}{2} \cos \frac{\varphi}{2}+\sin \frac{\psi}{2} \sin \frac{\theta}{2} \sin \frac{\varphi}{2} \\ q_{2}=-\cos \frac{\psi}{2} \cos \frac{\theta}{2} \cos \frac{\varphi}{2}-\sin \frac{\psi}{2} \sin \frac{\theta}{2} \sin \frac{\varphi}{2} \\ q_{3}=-\cos \frac{\psi}{2} \cos \frac{\theta}{2} \cos \frac{\varphi}{2}+\sin \frac{\psi}{2} \sin \frac{\theta}{2} \sin \frac{\varphi}{2} \end{array}\right. q0=cos2ψcos2θcos2φ+sin2ψsin2θsin2φq1=cos2ψcos2θcos2φ+sin2ψsin2θsin2φq2=cos2ψcos2θcos2φsin2ψsin2θsin2φq3=cos2ψcos2θcos2φ+sin2ψsin2θsin2φ

四元数变换为欧拉角:

{ ψ = tan ⁡ − 1 2 q 1 q 2 − 2 q 0 q 3 2 q 0 2 + 2 q 1 2 − 1 θ = − sin ⁡ − 1 ( 2 q 1 q 3 + 2 q 0 q 2 ) φ = tan ⁡ − 1 2 q 2 q 3 − 2 q 0 q 1 2 q 0 2 + 2 q 3 2 − 1 \left\{\begin{array}{l} \psi=\tan ^{-1} \frac{2 q_{1} q_{2}-2 q_{0} q_{3}}{2 q_{0}^{2}+2 q_{1}^{2}-1} \\ \theta=-\sin ^{-1}\left(2 q_{1} q_{3}+2 q_{0} q_{2}\right) \\ \varphi=\tan ^{-1} \frac{2 q_{2} q_{3}-2 q_{0} q_{1}}{2 q_{0}^{2}+2 q_{3}^{2}-1} \end{array}\right. ψ=tan12q02+2q1212q1q22q0q3θ=sin1(2q1q3+2q0q2)φ=tan12q02+2q3212q2q32q0q1

四元数由四个数字组成,然而这些数字不表示角度或轴,并且通常不需要直接访问它们。除非你特别有兴趣深入了解四元数学,你只需要知道四元数表示三维空间中的旋转,你通常不需要知道或修改x,y和z属性。

优点:四元旋转不存在万向节锁问题。
优点:存储空间小,计算效率高。
弱点:单个四元数不能表示在任何方向上超过180度的旋转。
弱点:四元数的数字表示不直观。

参考:【Unity编程】四元数(Quaternion)与欧拉角

4.2 测试Matlab代码

验证测试:3D Rotation Converter

clc; clear; close all

% Axis rotation sequence for the Euler angles, specified as one of these string scalars:
% "ZYX" (default) – The order of rotation angles is z-axis, y-axis, x-axis.
% "ZYZ" – The order of rotation angles is z-axis, y-axis, z-axis.
% "XYZ" – The order of rotation angles is x-axis, y-axis, z-axis.

% 三个欧拉角
eul = deg2rad([30 60 90]);

% 指定旋转顺序为XYZ
rotm = eul2rotm(eul,'XYZ')  %欧拉角转旋转矩阵
quat = eul2quat(eul,'XYZ')  %欧拉角转四元数

eul = rad2deg(rotm2eul(rotm,'XYZ'))     %旋转矩阵转欧拉角
quat = rotm2quat(rotm)                  %旋转矩阵转四元数

eul = rad2deg(quat2eul(quat,'XYZ'))     %四元数转欧拉角
rotm = quat2rotm(quat)                  %四元数转旋转矩阵

旋转矩阵

-2.22044604925031e-16	-0.500000000000000	0.866025403784439
0.866025403784439	-0.433012701892220	-0.250000000000000
0.500000000000000	0.750000000000000	0.433012701892219

四元数

0.500000000000000	0.500000000000000	0.183012701892219	0.683012701892219

5. 总结

本文分别描述了四元数与旋转矩阵、欧拉角与四元数、四元数与欧拉角之间的变化关系。欧拉角、旋转矩阵与四元数这三种表征姿态的方法各有其优劣。欧拉角在某种情况下会遇到万向锁问题,即会丢失一个自由度的信息;旋转矩阵里面有九个数值,而三维旋转一次只需要三个自由度,这会造成计算量有点大。而四元数没有欧拉角和旋转矩阵所特有的奇异性,可以很好地表征运动物体的姿态,故四元数表征姿态应用较多。

有关欧拉角、旋转矩阵及四元数的更多相关文章

  1. 旋转矩阵的几何意义 - 2

    点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度;     在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。

  2. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  3. 华为OD机试真题 C++ 实现【带传送阵的矩阵游离】【2023 Q2 | 200分】 - 2

            所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。

  4. 欧拉角表示的姿态矩阵(313和312转序) - 2

    一、习惯约定图片来自PSINS(高精度捷联惯导算法)PSINS工具箱入门与详解.pptx二、基本旋转矩阵绕x轴逆时钟旋转α\alphaα角度Rx(α)=[ 1000cos⁡αsin⁡α0−sin⁡αcos⁡α]R_x(\alpha)=\begin{bmatrix}\1&0&0\\0&\cos\alpha&\sin\alpha\\0&-\sin\alpha&\cos\alpha\end{bmatrix}Rx​(α)=​ 100​0cosα−sinα​0sinαcosα​​绕y轴逆时钟旋转α\alphaα角度Ry(α)=[ cos⁡α0−sin⁡α010sin⁡α0cos⁡α]R_y(\alpha

  5. 欧拉角、旋转矩阵及四元数 - 2

    欧拉角、旋转矩阵及四元数1.简介2.欧拉角2.1欧拉角定义2.2右手系和左手系2.3转换流程3.旋转矩阵4.四元数4.1四元数与欧拉角和旋转矩阵之间等效变换4.2测试Matlab代码5.总结1.简介常用姿态参数表达方式包括方向余弦矩阵、欧拉轴/角参数、欧拉角、四元数以及罗德里格参数等。高分辨率光学遥感卫星主要采用欧拉角与四元数对姿态参数进行描述。这里着重讲解欧拉角、旋转矩阵和四元数。2.欧拉角2.1欧拉角定义欧拉角是表征刚体旋转的一种方法之一,由莱昂哈德·欧拉引入的三个角度,用于描述刚体相对于固定坐标系的方向。在摄影测量、空间科学或其它技术领域,一般用一组(三个)欧拉角描述两个空间坐标之间的旋

  6. ruby - 我可以在传递给方法的 block 上强制执行元数吗? - 2

    有什么方法可以“开启”使用Proc.new或Kernel.proc实例化的Proc的严格元数强制执行,使其表现得像Proc用lambda实例化?我的initialize方法采用block&action并将其分配给实例变量。我希望action严格执行arity,因此当我稍后对其应用参数时,它会引发一个ArgumentError,我可以挽救它并引发一个更有意义的异常。基本上:classCommandattr_reader:name,:actiondefinitialize(name,&action)@name=name@action=actionenddefperform(*args)be

  7. ruby - 如何修改矩阵(Ruby std-lib Matrix 类)? - 2

    我理解RubystdlibMatrix是不可修改的,也就是说,例如。m=Matrix.zero(3,4)不会写m[0,1]=7但我非常想做...我可以用笨拙的编程来做,比如defmodify_value_in_a_matrix(matrix,row,col,newval)ary=(0...m.row_size).map{|i|m.rowi}.map(&:to_a)ary[row][col]=newvalMatrix[*ary]end...或者作弊,比如Matrix.send:[]=,0,1,7但我想知道,这一定是人们一直遇到的问题。有没有一些标准的、习惯的方法可以做到这一点,而不必使用

  8. 欧拉系统安装与部署NextCloud及数据迁移 - 2

    欧拉系统部署NextCloud与常见部署问题解决以及数据盘迁移一、欧拉系统安装二、openEuler安装图形界面Ukui三、yum安装的npm包进行本地保存设置(个人任务需要)四、部署nextCloud4.1构建LAMP环境基础4.1.1开启httpd,防火墙端口号4.1.2开启MariaDB服务4.1.3安装并测试php4.2下载安装nextCloud4.2.1创建nextCloud数据库,存放网盘文件索引与用户信息4.2.2拷贝NextCloud并创建data目录,目录赋予权限五、离线npm包方式部署NextCloud(个人需要,正常联网状态搭建LAMP环境后,拷贝NextCloud安装即

  9. 线性代数让我想想:快速求三阶矩阵的逆矩阵 - 2

    快速求三阶矩阵的逆矩阵前言一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示)A−1=1[  ][−[  ]−[  ]−[  ]  −[  ]]=A−1=1[  ][   M11−[M12]   M13−[M21]   M22−[M23]     M31−[M32]   M33]⊤\begin{aligned}&A^{-1}=\frac{1}{[\\]}\left[\begin{array}{cccccc}&-[\\]&\\-[\\]&&-[\\]\\\\&-[\\]&\\\end{array}\right]=\\\\&A^{-1}=\frac{1}{[\\]}\left[\b

  10. 相机校准—外参矩阵 - 2

    在本文中,我们将探讨摄影机的外参,并通过Python中的一个实践示例来加强我们的理解。相机外参摄像头可以位于世界任何地方,并且可以指向任何方向。我们想从摄像机的角度来观察世界上的物体,这种从世界坐标系到摄像机坐标系的转换被称为摄像机外参。那么,我们怎样才能找到相机外参呢?一旦我们弄清楚相机是如何变换的,我们就可以找到从世界坐标系到相机坐标系的基变换的变化。我们将详细探讨这个想法。具体来说,我们需要知道相机是如何定位的,以及它在世界空间中的位置,有两种转换可以帮助我们:有助于确定摄影机方向的旋转变换。有助于移动相机的平移变换。让我们详细看看每一个。旋转通过旋转改变坐标让我们看一下将点旋转一个角度

随机推荐