MFC代码实现空间坐标系旋转之后旋转角度怎么求?

时间:2022-05-06 19:05:40
在MFC当中,用代码实现算法即空间直角坐标系绕一任意坐标轴旋转之后旋转角度怎么求?

注意:这个旋转角度我要求的是欧拉旋转角。

求高人指点迷津啊,有点急求高人给个实际的想法或者代码实现更好。在网上找了好久没照着合适的

2 个解决方案

#1


搜索“Project 投影”

#2


给你一个绕任意轴旋转角度的矩阵计算函数

//绕某方向旋转角度 矩阵

GCMatrix4D operator%( GCVector4D const & vecAxis, double fTheta )
{
fTheta = ( double )( fTheta/2.0 );
        //输入向量单位化
GCVector4D uvAxis = vecAxis.ToUnitVector();

double cosa = cos( fTheta );
double sina = sin( fTheta );

double a = uvAxis.X() * sina;
double b = uvAxis.Y() * sina;
double c = uvAxis.Z() * sina;

double Data00 = 1.0 - 2.0*( b*b + c*c );
double Data11 = 1.0 - 2.0*( c*c + a*a );
double Data22 = 1.0 - 2.0*( a*a + b*b );

double Data01 = 2.0 * ( a*b - c*cosa );
double Data02 = 2.0 * ( a*c + b*cosa );

double Data10 = 2.0 * ( a*b + c*cosa );
double Data12 = 2.0 * ( b*c - a*cosa );

double Data20 = 2.0 * ( a*c - b*cosa );
double Data21 = 2.0 * ( b*c + a*cosa );

        //可以把这些数字填到double[16]里面
return GCMatrix4D( GCVector4D( Data00, Data10, Data20),
                        GCVector4D( Data01, Data11, Data21),
GCVector4D( Data02, Data12, Data22),
GCVector4D( 0,0,0,1)
);
}


自己改写吧

这个函数计算出来的矩阵 M 
M*V(1,0,0) 就是旋转后X轴方向 类推

欧拉旋转角有多种组合,你自己按照前面的新 XYZ方向和旧XYZ方向应该可以算出来 向量夹角

#1


搜索“Project 投影”

#2


给你一个绕任意轴旋转角度的矩阵计算函数

//绕某方向旋转角度 矩阵

GCMatrix4D operator%( GCVector4D const & vecAxis, double fTheta )
{
fTheta = ( double )( fTheta/2.0 );
        //输入向量单位化
GCVector4D uvAxis = vecAxis.ToUnitVector();

double cosa = cos( fTheta );
double sina = sin( fTheta );

double a = uvAxis.X() * sina;
double b = uvAxis.Y() * sina;
double c = uvAxis.Z() * sina;

double Data00 = 1.0 - 2.0*( b*b + c*c );
double Data11 = 1.0 - 2.0*( c*c + a*a );
double Data22 = 1.0 - 2.0*( a*a + b*b );

double Data01 = 2.0 * ( a*b - c*cosa );
double Data02 = 2.0 * ( a*c + b*cosa );

double Data10 = 2.0 * ( a*b + c*cosa );
double Data12 = 2.0 * ( b*c - a*cosa );

double Data20 = 2.0 * ( a*c - b*cosa );
double Data21 = 2.0 * ( b*c + a*cosa );

        //可以把这些数字填到double[16]里面
return GCMatrix4D( GCVector4D( Data00, Data10, Data20),
                        GCVector4D( Data01, Data11, Data21),
GCVector4D( Data02, Data12, Data22),
GCVector4D( 0,0,0,1)
);
}


自己改写吧

这个函数计算出来的矩阵 M 
M*V(1,0,0) 就是旋转后X轴方向 类推

欧拉旋转角有多种组合,你自己按照前面的新 XYZ方向和旧XYZ方向应该可以算出来 向量夹角