Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C+中从Scipy重复旋转+;(本征或Qt) 我有一个与Scipy一起完成的旋转,我想用C++来复制它,使用Qt库(或者作为最后的手段)。如何做到这一点?我尝试使用QQuaternion::fromEulerAngles,但输出的Euler角度完全不同。你能告诉我如何重复这个旋转组合吗 从scipy.spatial.transform导入旋转为R r=r.自欧拉('xyz',[84.8715505575325,-18.6072424802551106.28342910934],度=真) 打印(r.as_matrix().transpose()) >>数组([[-0.26573263,0.90971132,0.31907911], [ 0.003305 , -0.33011727, 0.94393414], [ 0.9640411 , 0.25188866, 0.08471633]]) r2=R,从欧拉角度('XYZ',[90,180,90],度=真) r3=r2*r 打印(r3.as_euler('xyz',度=真)) >>阵列([0.19642533,15.41049032,19.32819967])_C++_Qt_Scipy_Eigen - Fatal编程技术网

如何在C+中从Scipy重复旋转+;(本征或Qt) 我有一个与Scipy一起完成的旋转,我想用C++来复制它,使用Qt库(或者作为最后的手段)。如何做到这一点?我尝试使用QQuaternion::fromEulerAngles,但输出的Euler角度完全不同。你能告诉我如何重复这个旋转组合吗 从scipy.spatial.transform导入旋转为R r=r.自欧拉('xyz',[84.8715505575325,-18.6072424802551106.28342910934],度=真) 打印(r.as_matrix().transpose()) >>数组([[-0.26573263,0.90971132,0.31907911], [ 0.003305 , -0.33011727, 0.94393414], [ 0.9640411 , 0.25188866, 0.08471633]]) r2=R,从欧拉角度('XYZ',[90,180,90],度=真) r3=r2*r 打印(r3.as_euler('xyz',度=真)) >>阵列([0.19642533,15.41049032,19.32819967])

如何在C+中从Scipy重复旋转+;(本征或Qt) 我有一个与Scipy一起完成的旋转,我想用C++来复制它,使用Qt库(或者作为最后的手段)。如何做到这一点?我尝试使用QQuaternion::fromEulerAngles,但输出的Euler角度完全不同。你能告诉我如何重复这个旋转组合吗 从scipy.spatial.transform导入旋转为R r=r.自欧拉('xyz',[84.8715505575325,-18.6072424802551106.28342910934],度=真) 打印(r.as_matrix().transpose()) >>数组([[-0.26573263,0.90971132,0.31907911], [ 0.003305 , -0.33011727, 0.94393414], [ 0.9640411 , 0.25188866, 0.08471633]]) r2=R,从欧拉角度('XYZ',[90,180,90],度=真) r3=r2*r 打印(r3.as_euler('xyz',度=真)) >>阵列([0.19642533,15.41049032,19.32819967]),c++,qt,scipy,eigen,C++,Qt,Scipy,Eigen,您可以使用Eigen并从Euler角度轻松创建旋转对象(请参见)。然而,内部/外部系统必须手动处理,需要更多的努力 使用C++11和Eigen的开发/主分支: #define _USE_MATH_DEFINES #include "Eigen/Core" #include "Eigen/Geometry" #include <iostream> #include <math.h> long double operator&quo

您可以使用Eigen并从Euler角度轻松创建旋转对象(请参见)。然而,内部/外部系统必须手动处理,需要更多的努力

使用C++11和Eigen的开发/主分支:

#define _USE_MATH_DEFINES

#include "Eigen/Core"
#include "Eigen/Geometry"
#include <iostream>
#include <math.h>

long double operator"" _deg(long double x ) 
{ 
    return M_PI * x / 180; 
} 

int main()
{
    std::cout.precision(8);

    Eigen::Quaterniond r, r2, r3;

    // 'xyz' - extrinsic rotation -> z*y*x 
    r =  Eigen::AngleAxisd(106.28342910934_deg, Eigen::Vector3d::UnitZ())
        * Eigen::AngleAxisd(-18.6072424802551_deg, Eigen::Vector3d::UnitY())
        * Eigen::AngleAxisd(84.8715505575325_deg, Eigen::Vector3d::UnitX());
    
    std::cout << r.matrix().transpose() << std::endl << std::endl;

    // 'XYZ' - intrinsic rotation -> x*y*z
    r2 = Eigen::AngleAxisd(90.0_deg, Eigen::Vector3d::UnitX())
        * Eigen::AngleAxisd(180.0_deg, Eigen::Vector3d::UnitY())
        * Eigen::AngleAxisd(90.0_deg, Eigen::Vector3d::UnitZ());
    
    r3 = r2 * r;

    // 'xyz' - extrinsic rotation -> z,y,x (reversed to obtain x,y,z)
    std::cout << (r3.matrix().eulerAngles(2,1,0).reverse() / M_PI) * 180 << std::endl;

    return 1;
}
 -0.26573263   0.90971132   0.31907911
0.0033050049  -0.33011727   0.94393414
   0.9640411   0.25188866   0.08471633

0.19642533
  15.41049
   19.3282