关于Matlab:3D空间中的旋转

Rotations in 3D space

对于我正在从事的项目,我需要编写一个函数,该函数将3D空间中形成一条线的两个点作为输入,并给出一个旋转矩阵作为其输出,该旋转矩阵使该线与Z轴平行轴。

我已经对旋转矩阵学到了足够的知识,知道如何从欧拉角构成它们。但是我对如何弄清楚输入线的正确angular感到困惑。

有人可以提供一些建议吗?我正在用Matlab编写此代码,但我认为从理论上讲会更有价值。


编辑:由于答案不够完整,因此重写了答案。而且,除了使用欧拉角之外,您还可以通过这种方式创建矩阵。

获得Z向量,并使用叉积获得其他向量以构成矩阵。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Vec3 start;  // start of the line
Vec3 end;    // end of the line

Vec3 Z = end - start;
Z.normalize();

Vec3 X = Vec3(0,1,0).cross(Z);
X.normalize();

Vec3 Y = Z.cross(X);
Y.normalize();

// here's the 3X3 rotation matrix
_m11 = X.x; _m12 = Y.x; _m13 = Z.x;
_m21 = X.y; _m22 = Y.y; _m23 = Z.y;
_m31 = X.z; _m32 = Y.z; _m33 = Z.z;

说明组成旋转矩阵的过程的链接:http://nghiaho.com/?page_id=846。