zoukankan      html  css  js  c++  java
  • 罗德里格旋转公式的矩阵实现

    罗德里格公式:

    计算机图形学中,罗德里格向量旋转公式通常被用来填写旋转矩阵。如果把kv分别写为列向量:
    则旋转以后的向量可以表示为:
    其中
    其中E是3阶单位矩阵。需要注意的是,公式中的第二项不是点积,而是张量积,得到的是一个3行3列的矩阵。
    C++,Eigen3程序:
     1 #include <iostream>
     2 #include <Eigen/Dense>
     3 
     4 using namespace Eigen;
     5 using namespace std;
     6 
     7 int main(int argc, char *argv[])
     8 {
     9     Vector3d k(1,0,0);
    10     Vector3d v(0,1,0);
    11     Vector3d vout;
    12     Matrix3d E;
    13     Matrix3d G;
    14     float PI=3.1415926;
    15     float angle=90.0*PI/180;
    16 
    17     E.setIdentity();
    18 
    19     G<<0    ,-k(2),k(1),
    20        k(2) ,0    ,-k(0),
    21        -k(1),k(0) ,0;
    22 
    23     vout = E*cos(angle)*v+(1-cos(angle))*k*k.transpose()*v+sin(angle)*G*v;
    24     cout<<vout<<endl;
    25 
    26 }
  • 相关阅读:
    (10)时间
    (9)字符串
    (8)数组工具类
    (7)数学工具类
    (6)随机数
    (5)包装类
    (4)声明式接口和常用接口
    (3)java.lang.System
    (2)java.lang.Object
    (1)开篇
  • 原文地址:https://www.cnblogs.com/guanglun/p/7489166.html
Copyright © 2011-2022 走看看