注意:这个旋转角度我要求的是欧拉旋转角。
求高人指点迷津啊,有点急求高人给个实际的想法或者代码实现更好。在网上找了好久没照着合适的
2 个解决方案
#1
搜索“Project 投影”
#2
给你一个绕任意轴旋转角度的矩阵计算函数
自己改写吧
这个函数计算出来的矩阵 M
M*V(1,0,0) 就是旋转后X轴方向 类推
欧拉旋转角有多种组合,你自己按照前面的新 XYZ方向和旧XYZ方向应该可以算出来 向量夹角
//绕某方向旋转角度 矩阵
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
给你一个绕任意轴旋转角度的矩阵计算函数
自己改写吧
这个函数计算出来的矩阵 M
M*V(1,0,0) 就是旋转后X轴方向 类推
欧拉旋转角有多种组合,你自己按照前面的新 XYZ方向和旧XYZ方向应该可以算出来 向量夹角
//绕某方向旋转角度 矩阵
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方向应该可以算出来 向量夹角