首先给出有关四元数讲解一份比较好的pdf


2.1 设线性⽅程 Ax=b\bm Ax = bAx=b,则有解充要条件为:系数矩阵An×n\bm A_{n \times n}An×n​与其增广矩阵Bn×(n+1)\bm B_{n \times (n+1)}Bn×(n+1)​的秩相,即R(A)=R(B)R(\bm A)=R(\bm B)R(A)=R(B);且解唯一的条件为R(A)=R(B)=nR(\bm A)=R(\bm B)=nR(A)=R(B)=n。

2.2 高斯消元法的原理是通过初等行变换把AAA变换为上三角矩阵,然后从最下面一行(仅有一个未知量)开始求解,逐行回代依次解除每个未知量

2.3 实数矩阵A\bm AA的QR分解是把A\bm AA分解为 A=QR\bm A = \bm Q \bm RA=QR ,这里的Q\bm QQ是正交矩阵,而R\bm RR是上三角矩阵,如果A\bm AA是非奇异的,且限定R\bm RR的对角线元素为正,则这个分解是唯一的。 计算有很多方法,例如Givens旋转、Householder变换,以及Gram-Schmidt正交化等等。
用QR分解建立了计算矩阵特征值的QR方法

2.4 摘自wiki百科:Cholesky分解

2.5

#include <iostream>
#include <ctime>
// Eigen 核心部分
#include <Eigen/Core>
// 稠密矩阵的代数运算(逆,特征值等)
#include <Eigen/Dense>using namespace std;
using namespace Eigen;#define MATRIX_SIZE 100int main(int argc, char **argv) {MatrixXd matrix_NN = MatrixXd::Random(MATRIX_SIZE, MATRIX_SIZE);matrix_NN = matrix_NN * matrix_NN.transpose();  // 对称阵,保证半正定
//    cout << "matrix_NN:\n" << matrix_NN << endl;// 实对称矩阵可以正交相似对角化,保证对角化成功SelfAdjointEigenSolver<MatrixXd> eigen_solver(matrix_NN);cout << "Eigen values = \n" << eigen_solver.eigenvalues() << endl;
//    The eigenvalues are sorted in increasing order. 所有特征值均大于0,保证正定cout << "Eigen values min = \n" << eigen_solver.eigenvalues()(0) << endl;clock_t time_stt = clock(); // 计时Matrix<double, MATRIX_SIZE, 1> v_Nd = MatrixXd::Random(MATRIX_SIZE, 1);Matrix<double, MATRIX_SIZE, 1> x;// 通常用矩阵分解来求,例如QR分解,速度会快很多time_stt = clock();x = matrix_NN.colPivHouseholderQr().solve(v_Nd);cout << "time of Qr decomposition is "<< 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC << "ms" << endl;cout << "x = " << x.transpose() << endl;// 对于正定矩阵,还可以用cholesky分解来解方程time_stt = clock();x = matrix_NN.ldlt().solve(v_Nd);cout << "time of ldlt decomposition is "<< 1000 * (clock() - time_stt) / (double) CLOCKS_PER_SEC << "ms" << endl;cout << "x = " << x.transpose() << endl;return 0;
}

运行结果:

3.

#include<iostream>
#include<cmath>
using namespace std;
#include<Eigen/Core>
#include<Eigen/Dense>
using namespace Eigen;int main(int argc,char **argv)
{Quaterniond q1(0.55,0.3,0.2,0.2),q2(-0.1,0.3,-0.7,0.2);Vector3d t1(0.7,1.1,0.2),t2(-0.1,0.4,0.8);q1.normalize();q2.normalize();Vector3d p1(0.5,-0.1,0.2);//记得初始化为单位阵Isometry3d T1 = Isometry3d::Identity();Isometry3d T2 = Isometry3d::Identity();T1.rotate(q1);T2.rotate(q2);T1.pretranslate(t1);T2.pretranslate(t2);Vector3d p2=T2*T1.inverse()*p1;cout<<endl<<p2.transpose()<<endl;return 0;
}

运行结果:

4.1
坐标系[e1,e2,e3]\left[\bm e_{1}, \bm e_{2}, \bm e_{3}\right][e1​,e2​,e3​]发生了旋转,变成[e1′,e2′,e3′]\left[\bm e_{1}^{\prime}, \bm e_{2}^{\prime}, \bm e_{3}^{\prime}\right][e1′​,e2′​,e3′​]对应坐标变换如下:
[e1,e2,e3][a1a2a3]=[e1′,e2′,e3′][a1′a2′a3′]\left[\bm e_{1}, \bm e_{2}, \bm e_{3}\right] \left[ \begin{array}{c}a_{1} \\ a_{2} \\ a_{3}\end{array}\right]= \left[\bm e_{1}^{\prime}, \bm e_{2}^{\prime}, \bm e_{3}^{\prime}\right] \left[\begin{array}{c}a_{1}^{\prime} \\ a_{2}^{\prime} \\ a_{3}^{\prime}\end{array}\right] [e1​,e2​,e3​]⎣⎡​a1​a2​a3​​⎦⎤​=[e1′​,e2′​,e3′​]⎣⎡​a1′​a2′​a3′​​⎦⎤​
上式同时左乘[e1Te2Te3T]\left[\begin{array}{c}\bm e_{1}^{T} \\ \bm e_{2}^{T} \\ \bm e_{3}^{T}\end{array}\right]⎣⎡​e1T​e2T​e3T​​⎦⎤​得:
a≜[a1a2a3]=[e1Te1′e1Te2′e1Te3′e2Te1′e2Te2′e2Te3′e3Te1′e3Te2′e3Te3′][a1′a2′a3′]≜Ra′\bm a \triangleq \left[\begin{array}{l} a_{1} \\a_{2} \\a_{3} \end{array}\right]= \left[\begin{array}{lll} \bm e_{1}^{T} \bm{e}_{1}^{\prime} & \bm e_{1}^{T} \bm{e}_{2}^{\prime} & \bm{e}_{1}^{T} \bm{e}_{3}^{\prime} \\ \bm e_{2}^{T} \bm{e}_{1}^{\prime} & \bm e_{2}^{T} \bm{e}_{2}^{\prime} & \bm{e}_{2}^{T} \bm{e}_{3}^{\prime} \\ \bm e_{3}^{T} \bm{e}_{1}^{\prime} & \bm e_{3}^{T} \bm{e}_{2}^{\prime} & \bm{e}_{3}^{T} \bm{e}_{3}^{\prime} \end{array}\right] \left[\begin{array}{l} a_{1}^{\prime} \\a_{2}^{\prime} \\a_{3}^{\prime} \end{array}\right] \triangleq \bm R \bm a^{\prime} a≜⎣⎡​a1​a2​a3​​⎦⎤​=⎣⎡​e1T​e1′​e2T​e1′​e3T​e1′​​e1T​e2′​e2T​e2′​e3T​e2′​​e1T​e3′​e2T​e3′​e3T​e3′​​⎦⎤​⎣⎡​a1′​a2′​a3′​​⎦⎤​≜Ra′

同理若上式同时左乘[e1′Te2′Te3′T]\left[\begin{array}{c}\bm e_{1}^{\prime T} \\ \bm e_{2}^{\prime T} \\ \bm e_{3}^{\prime T}\end{array}\right]⎣⎡​e1′T​e2′T​e3′T​​⎦⎤​得:
R−1a≜[e1′Te1e1′Te2e1′Te3e2′Te1e2′Te2e2′Te3e3′Te1′e3′Te2e3′Te3][a1a2a3]=[a1′a2′a3′]≜a′\bm R^{-1} \bm a \triangleq \left[\begin{array}{lll} \bm e_{1}^{\prime T} \bm{e}_{1} & \bm e_{1}^{\prime T} \bm{e}_{2} & \bm{e}_{1}^{\prime T} \bm{e}_{3} \\ \bm e_{2}^{\prime T} \bm{e}_{1} & \bm e_{2}^{\prime T} \bm{e}_{2} & \bm{e}_{2}^{\prime T} \bm{e}_{3} \\ \bm e_{3}^{\prime T} \bm{e}_{1}^{\prime} & \bm e_{3}^{\prime T} \bm{e}_{2} & \bm{e}_{3}^{\prime T} \bm{e}_{3} \end{array}\right] \left[\begin{array}{l} a_{1} \\a_{2} \\a_{3} \end{array}\right]= \left[\begin{array}{l} a_{1}^{\prime} \\a_{2}^{\prime} \\a_{3}^{\prime} \end{array}\right] \triangleq \bm a^{\prime} R−1a≜⎣⎡​e1′T​e1​e2′T​e1​e3′T​e1′​​e1′T​e2​e2′T​e2​e3′T​e2​​e1′T​e3​e2′T​e3​e3′T​e3​​⎦⎤​⎣⎡​a1​a2​a3​​⎦⎤​=⎣⎡​a1′​a2′​a3′​​⎦⎤​≜a′

R−1=[e1′Te1e1′Te2e1′Te3e2′Te1e2′Te2e2′Te3e3′Te1′e3′Te2e3′Te3]\bm R^{-1} = \left[\begin{array}{lll} \bm e_{1}^{\prime T} \bm{e}_{1} & \bm e_{1}^{\prime T} \bm{e}_{2} & \bm{e}_{1}^{\prime T} \bm{e}_{3} \\ \bm e_{2}^{\prime T} \bm{e}_{1} & \bm e_{2}^{\prime T} \bm{e}_{2} & \bm{e}_{2}^{\prime T} \bm{e}_{3} \\ \bm e_{3}^{\prime T} \bm{e}_{1}^{\prime} & \bm e_{3}^{\prime T} \bm{e}_{2} & \bm{e}_{3}^{\prime T} \bm{e}_{3} \end{array}\right] R−1=⎣⎡​e1′T​e1​e2′T​e1​e3′T​e1′​​e1′T​e2​e2′T​e2​e3′T​e2​​e1′T​e3​e2′T​e3​e3′T​e3​​⎦⎤​

RT=[e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e2Te3′e3Te3′]\bm R^{T} =\left[\begin{array}{lll} \bm e_{1}^{T} \bm{e}_{1}^{\prime} & \bm e_{2}^{T} \bm{e}_{1}^{\prime} & \bm e_{3}^{T} \bm{e}_{1}^{\prime} \\ \bm e_{1}^{T} \bm{e}_{2}^{\prime} & \bm e_{2}^{T} \bm{e}_{2}^{\prime} & \bm e_{3}^{T} \bm{e}_{2}^{\prime}\\ \bm{e}_{1}^{T} \bm{e}_{3}^{\prime}& \bm{e}_{2}^{T} \bm{e}_{3}^{\prime} & \bm{e}_{3}^{T} \bm{e}_{3}^{\prime} \end{array}\right] RT=⎣⎡​e1T​e1′​e1T​e2′​e1T​e3′​​e2T​e1′​e2T​e2′​e2T​e3′​​e3T​e1′​e3T​e2′​e3T​e3′​​⎦⎤​
同时
[ei1,ei2,ei3][ej1′ej2′ej3′]=eiTej′=ej′Tei=[ej1′,ej2′,ej3′][ei1ei2ei3]\left[ e_{i1}, e_{i2}, e_{i3}\right] \left[ \begin{array}{c}e_{j1}^{\prime} \\e_{j2}^{\prime} \\e_{j3}^{\prime}\end{array}\right]= \bm e_{i}^{T} \bm{e}_{j}^{\prime} = \bm e_{j}^{\prime T} \bm{e}_{i}= \left[ e_{j1}^{\prime }, e_{j2}^{\prime }, e_{j3}^{\prime } \right] \left[ \begin{array}{c}e_{i1}\\ e_{i2}\\ e_{i3}\end{array}\right] [ei1​,ei2​,ei3​]⎣⎡​ej1′​ej2′​ej3′​​⎦⎤​=eiT​ej′​=ej′T​ei​=[ej1′​,ej2′​,ej3′​]⎣⎡​ei1​ei2​ei3​​⎦⎤​

R−1=RT\bm R^{-1}=\bm R^{T}R−1=RT

∣R∣=∣e1Te2Te3T∣∣e1′,e2′,e3′∣=1|\bm R| =\left|\begin{array}{c}\bm e_{1}^{T} \\ \bm e_{2}^{T} \\ \bm e_{3}^{T}\end{array}\right| \left|\bm e_{1}^{\prime}, \bm e_{2}^{\prime}, \bm e_{3}^{\prime}\right| =1 ∣R∣=∣∣∣∣∣∣​e1T​e2T​e3T​​∣∣∣∣∣∣​∣e1′​,e2′​,e3′​∣=1

4.2 四元数的实部η\etaη是一维,虚部ε\bm \varepsilonε是三维

4.3

q1=[ε1,η1]T,q2=[ε2,η2]T\bm {q}_{1}=[\bm \varepsilon_1,\eta_1]^T, \quad \bm {q}_{2}=[\bm \varepsilon_2,\eta_2]^Tq1​=[ε1​,η1​]T,q2​=[ε2​,η2​]T

或原始四元数表示法:
q1=η1+x1i+y1j+z1k,q2=η2+x2i+y2j+z2k\bm {q}_{1}=\eta_1+x_1 \bm i + y_1 \bm j + z_1\bm k, \quad \bm {q}_{2}=\eta_2+x_2 \bm i + y_2 \bm j + z_2\bm kq1​=η1​+x1​i+y1​j+z1​k,q2​=η2​+x2​i+y2​j+z2​k

q1q2=η1η2−x1x2−y1y2−z1z2+(η1x2+x1η2+y1z2−z1y2)i+(η1y2−x1z2+y1η2+z1x2)j+(η1z2+x1y2−y1x2+z1η2)k\begin{aligned} \bm {q}_{1}\bm {q}_{2}= &\eta_{1} \eta_{2}-x_{1} x_{2}-y_{1} y_{2}-z_{1} z_{2} \\ &+ \left(\eta_{1} x_{2}+x_{1} \eta_{2}+y_{1} z_{2}-z_{1} y_{2}\right)\bm i \\ &+\left(\eta_{1} y_{2}-x_{1} z_{2}+y_{1} \eta_{2}+z_{1} x_{2}\right)\bm j \\ &+\left(\eta_{1} z_{2}+x_{1} y_{2}-y_{1} x_{2}+z_{1} \eta_{2}\right)\bm k \end{aligned}q1​q2​=​η1​η2​−x1​x2​−y1​y2​−z1​z2​+(η1​x2​+x1​η2​+y1​z2​−z1​y2​)i+(η1​y2​−x1​z2​+y1​η2​+z1​x2​)j+(η1​z2​+x1​y2​−y1​x2​+z1​η2​)k​
q1q2=η1η2−x1x2−y1y2−z1z2+(x1η2+η1x2−z1y2+y1z2)i+(y1η2+z1x2+η1y2−x1z2)j+(z1η2−y1x2+x1y2+η1z2)k\begin{aligned} \bm {q}_{1}\bm {q}_{2}= &\eta_1 \eta_2-x_1 x_2-y_1 y_2-z_1 z_2\\ &+(x_1 \eta_2+\eta_1 x_2-z_1 y_2+y_1 z_2)\bm i \\ &+(y_1 \eta_2+z_1 x_2+\eta_1 y_2-x_1 z_2) \bm j \\ &+(z_1 \eta_2-y_1 x_2+x_1 y_2+\eta_1 z_2)\bm k \end{aligned}q1​q2​=​η1​η2​−x1​x2​−y1​y2​−z1​z2​+(x1​η2​+η1​x2​−z1​y2​+y1​z2​)i+(y1​η2​+z1​x2​+η1​y2​−x1​z2​)j+(z1​η2​−y1​x2​+x1​y2​+η1​z2​)k​

写成向量形式并利用内外积运算表示:
q1q2=[η1ε2+η2ε1+ε1×ε2,η1η2−ε1Tε2]T\bm {q}_{1}\bm {q}_{2}=[\eta_1 \bm \varepsilon_2 + \eta_2 \bm \varepsilon_1 + \bm \varepsilon_1 \times \bm \varepsilon_2, \eta_1 \eta_2 - \bm \varepsilon_1^T \bm \varepsilon_2]^Tq1​q2​=[η1​ε2​+η2​ε1​+ε1​×ε2​,η1​η2​−ε1T​ε2​]T

q1+=[η11+ε1×ε1−ε1Tη1],q2⊕=[η21−ε2×ε2−ε2Tη2]\bm {q}^{+}_1=\left[\begin{array}{cc} \eta_1 \bm {1}+ \bm {\varepsilon}^{\times}_1 & \bm {\varepsilon}_1 \\ -\bm \varepsilon^{T}_1 & \eta_1 \end{array}\right] , \quad \bm {q}^{\oplus}_2=\left[\begin{array}{cc} \eta_2 \bm 1-\bm \varepsilon^{\times}_2 & \bm \varepsilon_2 \\ -\bm \varepsilon^{T}_2 & \eta_2 \end{array}\right]q1+​=[η1​1+ε1×​−ε1T​​ε1​η1​​],q2⊕​=[η2​1−ε2×​−ε2T​​ε2​η2​​]

q1+q2=[η11+ε1×ε1−ε1Tη1][ε2η2]=[η1ε2+ε1×ε2+η2ε1−ε1Tε2+η1η2]=q1q2\bm {q}^{+}_1\bm {q}_{2}=\left[\begin{array}{cc} \eta_1 \bm {1}+ \bm {\varepsilon}^{\times}_1 & \bm {\varepsilon}_1 \\ -\bm \varepsilon^{T}_1 & \eta_1 \end{array}\right] \left[\begin{array}{c} \bm \varepsilon_2 \\ \eta_2 \end{array}\right]= \left[\begin{array}{c} \eta_1 \bm \varepsilon_2 + \bm \varepsilon_1 \times \bm \varepsilon_2 +\eta_2 \bm \varepsilon_1 \\ -\bm \varepsilon_1^T \bm \varepsilon_2 +\eta_1 \eta_2 \end{array}\right] = \bm {q}_{1}\bm {q}_{2} q1+​q2​=[η1​1+ε1×​−ε1T​​ε1​η1​​][ε2​η2​​]=[η1​ε2​+ε1​×ε2​+η2​ε1​−ε1T​ε2​+η1​η2​​]=q1​q2​
q2⊕q1=[η21−ε2×ε2−ε2Tη2][ε1η1]=[η2ε1−ε2×ε1+η1ε2−ε2Tε1+η1η2]=q1q2\bm {q}^{\oplus}_2\bm {q}_{1}= \left[\begin{array}{cc} \eta_2 \bm 1-\bm \varepsilon^{\times}_2 & \bm \varepsilon_2 \\ -\bm \varepsilon^{T}_2 & \eta_2 \end{array}\right] \left[\begin{array}{c} \bm \varepsilon_1 \\ \eta_1 \end{array}\right]= \left[\begin{array}{c} \eta_2 \bm \varepsilon_1 - \bm \varepsilon_2 \times \bm \varepsilon_1 +\eta_1 \bm \varepsilon_2 \\ -\bm \varepsilon_2^T \bm \varepsilon_1 +\eta_1 \eta_2 \end{array}\right] = \bm {q}_{1}\bm {q}_{2} q2⊕​q1​=[η2​1−ε2×​−ε2T​​ε2​η2​​][ε1​η1​​]=[η2​ε1​−ε2​×ε1​+η1​ε2​−ε2T​ε1​+η1​η2​​]=q1​q2​

5. 摘自维基百科 Rodrigues’ rotation formula

基本原理是将向量v\bm vv绕转轴k\bm kk的旋转分解为平行于转轴的v∥\bm v_{\parallel }v∥​和垂直于转轴的v⊥\bm v _{\perp }v⊥​的旋转,并用v\bm vv和k\bm kk表示出来;v∥\bm v_{\parallel }v∥​旋转后的v∥rot\bm{v}_{\parallel\mathrm{rot}}v∥rot​保持不变,v⊥\bm v_{\perp }v⊥​旋转后的v⊥rot\bm{v}_{\perp \mathrm{rot}}v⊥rot​在由v⊥\bm v_{\perp }v⊥​和w\bm ww(与v⊥\bm v_{\perp }v⊥​垂直)张成的二维平面内表示出来;最终获得vrot\bm{v}_{\mathrm{rot}}vrot​



q=[s,v]T,p=[0,u]T\bm {q}=[s,\bm v]^{\mathrm{T}} , \bm {p}=[0,\bm u]^{\mathrm{T}} q=[s,v]T,p=[0,u]T

q+(q−1)⊕=[s−vTvsI+v∧][svT−vsI+v∧]=[100TvvT+s2I+2sv∧+(v∧)2]\bm q^{+}\left(\bm q^{-1}\right)^{\oplus}=\left[\begin{array}{cc} s & -\bm v^{\mathrm{T}} \\ \bm v & s \bm I+\bm v^{\wedge} \end{array}\right]\left[\begin{array}{cc} s & \bm v^{\mathrm{T}} \\ -\bm v & s\bm I+\bm v^{\wedge} \end{array}\right]= \left[\begin{array}{cc} 1 & \bm 0 \\ \bm 0^{\mathrm{T}} & \bm v\bm v^{\mathrm{T}}+s^{2} \bm I+2 s \bm v^{\wedge}+\left(\bm v^{\wedge}\right)^{2} \end{array}\right]q+(q−1)⊕=[sv​−vTsI+v∧​][s−v​vTsI+v∧​]=[10T​0vvT+s2I+2sv∧+(v∧)2​]
p′=qpq−1=q+(q−1)⊕p=[10T0vvT+s2I+2sv∧+(v∧)2][0u]=[0((vvT+s2I+2sv∧+(v∧)2)u]\bm p^{\prime} =\bm q \bm p \bm q^{-1}=\bm q^{+}\left(\bm q^{-1}\right)^{\oplus}\bm p= \left[\begin{array}{cc} 1 & \bm 0^{\mathrm{T}} \\ \bm 0 & \bm v\bm v^{\mathrm{T}}+s^{2} \bm I+2 s \bm v^{\wedge}+\left(\bm v^{\wedge}\right)^{2} \end{array}\right] \left[\begin{array}{c} 0 \\ \bm u \end{array}\right]= \left[\begin{array}{c} 0 \\ \left((\bm v\bm v^{\mathrm{T}}+s^{2} \bm I+2 s \bm v^{\wedge}+\left(\bm v^{\wedge}\right)^{2}\right) \bm u \end{array}\right] p′=qpq−1=q+(q−1)⊕p=[10​0TvvT+s2I+2sv∧+(v∧)2​][0u​]=[0((vvT+s2I+2sv∧+(v∧)2)u​]
由上式结果看p′\bm p^{\prime}p′实部为000即p′\bm p^{\prime}p′为虚四元数
若记q=s+xi+yj+zk\bm q =s+x\bm i+y\bm j+z\bm kq=s+xi+yj+zk则旋转矩阵Q\bm QQ可表示为:
Q=q+(q−1)⊕=[100TvvT+s2I+2sv∧+(v∧)2]=[100001−2y2−2z22xy−2sz2sy+2xz02xy+2sz1−2x2−2z22yz−2sx02xz−2sy2sx+2yz1−2x2−2y2]\bm Q =\bm q^{+}\left(\bm q^{-1}\right)^{\oplus}= \left[\begin{array}{cc} 1 & \bm 0 \\ \bm 0^{\mathrm{T}} & \bm v\bm v^{\mathrm{T}}+s^{2} \bm I+2 s \bm v^{\wedge}+\left(\bm v^{\wedge}\right)^{2} \end{array}\right]= \left[\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1-2 y^{2}-2 z^{2} & 2 x y-2 s z & 2 s y+2 x z \\ 0 & 2 x y+2 s z & 1-2 x^{2}-2 z^{2} & 2 y z-2 s x \\ 0 & 2 x z-2 s y & 2 s x+2 y z & 1-2 x^{2}-2 y^{2} \end{array}\right]Q=q+(q−1)⊕=[10T​0vvT+s2I+2sv∧+(v∧)2​]=⎣⎢⎢⎡​1000​01−2y2−2z22xy+2sz2xz−2sy​02xy−2sz1−2x2−2z22sx+2yz​02sy+2xz2yz−2sx1−2x2−2y2​⎦⎥⎥⎤​

方法二:摘自 A brief introduction to the quaternions and its applications in 3D geometry

7.
所用的新特性已写在注释中

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;class A {public:A(const int &i) : index(i) {}int index = 0;
};int main() {A a1(3), a2(5), a3(9);vector<A> avec{a1, a2, a3}; // 初始化列表// 运用lambda表达式 []// 提供了一个类似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用std::sort(avec.begin(), avec.end(), [](const A&a1, const A&a2) {return a1.index<a2.index;});// 范围for循环:用a遍历容器avec中的每个量  auto自动类型推导:根据a获得的值,自动推断出a的类型for ( auto& a: avec ) cout<<a.index<<" ";cout<<endl;return 0;
}

深蓝学院视觉slam十四讲第2章作业相关推荐

  1. 深蓝学院-视觉SLAM十四讲-第四章作业

    目录 第四节课作业 2.图像去畸变 3.鱼眼模型与去畸变 4.双目视差的使用 5.矩阵运算微分 6.高斯牛顿法的曲线拟合实验 7.批量最大似然估计 第四节课作业 2.图像去畸变 本题主要内容是根据提供 ...

  2. 【视觉SLAM十四讲】第一章理论详解

    文章目录 第一讲 概述与预备知识 SLAM是什么 室内/室外定位 稀疏-半稠密重建 稠密重建 SLAM可以用在哪些地方? **作业1.** SLAM会在哪些场合中⽤到?⾄少列举三个⽅向. SLAM: ...

  3. 视觉SLAM十四讲-第三章笔记

    视觉SLAM14讲-第三章笔记 3.1 旋转矩阵 欧式变换 欧式变换:改变位资,不改变形状.大小. 旋转矩阵:R(3x3).是两个坐标系基的内积. 正交阵 行列式为1 逆表示相反的旋转 平移向量:t( ...

  4. 视觉slam十四讲第8章课后习题3+稀疏直接法程序注释

    版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8571653.html  3.题目回顾: 在稀疏直接法中,假设单个像素周围小块的光度 ...

  5. 《视觉SLAM十四讲》第二版源码slambook2编译调试

    slambook2-master/ch2 编译正常,log如下: slambook2-master/ch2# mkdir build && cd build && cm ...

  6. 视觉SLAM十四讲 第9讲 后端1 贝叶斯法则 式9.5推导

    视觉SLAM十四讲 第9讲 后端1 贝叶斯法则 式9.5推导 在学习高博的视觉SLAM十四讲第9讲后端1的时候,看到了式9.5,有如下内容: 下面我们来看如何对状态进行估计.按照贝叶斯法则,把zkz_ ...

  7. 视觉SLAM总结——视觉SLAM十四讲笔记整理

    视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...

  8. 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM

    浅读<视觉SLAM十四讲:从理论到实践>--操作1--初识SLAM 下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/s ...

  9. 视觉SLAM十四讲(3):三维空间刚体运动

    本章需要掌握的知识点有:旋转矩阵,变换矩阵,四元数,欧拉角定义和数学表达:同时也要掌握Eigen库关于矩阵.几何模块的使用方法. 文章目录 3.1 旋转矩阵 3.1.1 点,向量和矩阵的关系 3.1. ...

最新文章

  1. oracle中显示周,oracle中得到一段时间内天,月,周列表
  2. PHPRAP v1.0.8 版本发布,安装时数据库不存在自动创建
  3. 基于linux和php的稳定的分布式数据采集架构
  4. 正则表达式三种模式:贪婪模式、懒惰模式、独占模式
  5. .NET 缓存的设计
  6. linux下常用FTP命令
  7. 【计算机科学基础】VonNeumann体系结构
  8. Python CGI 编程 | 类FieldStorage的使用
  9. Keil5 C51版 下载与安装教程(51单片机编程软件)
  10. 红外接收头图片_红外接收头引脚定义图解
  11. matlab中fft与fftshift,在matlab中使用fft,ifft和fftshift
  12. noi题目答案c语言,NOI2019基础知识题库
  13. 航空器滑行时间预测研究(一)---定义及影响因素
  14. with dlz mysql 条件_BIND+DLZ+MYSQL实现区域记录动态更新
  15. can和could的用法_情态动词:can与could的用法详解
  16. 电子信息类与计算机类专业,电子信息类与计算机类有什么不同?就业方向呢
  17. CocoaPods的使用和安装
  18. 华为发布MetaAAU,能耗降低30%,性能节能双提升
  19. 不坚持,P都不是--leo看赢在中国第三季(4)
  20. 三星平板 N8000刷机升级安卓版本到7.1过程记录

热门文章

  1. 如何让CFree5.0支持C++11
  2. 1.网络通讯-9种常用网络命令
  3. Julia实现GCC-PHAT算法
  4. 什么是API测试?开发必知的8种API自动化测试类型
  5. 1367: [蓝桥杯2018初赛]付账问题
  6. 【mcuclub】称重-HX711
  7. python如何调用自己写的matlab函数和mat数据
  8. Potree使用指南
  9. NVl和NVL2的语法使用详解
  10. Linux常用 bash命令