3D空间中的旋转

时间:2013-08-14 19:33:42

标签: matlab 3d geometry

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

我已经对旋转矩阵有了足够的了解,知道如何从欧拉角中组合它们。但我对如何找出输入线的正确角度感到困惑。

有人可以提供一些建议吗?我在Matlab写这篇文章,但我认为理论上的处理会更有价值。

1 个答案:

答案 0 :(得分:3)

编辑:重写了答案,因为它不够完整。而不是使用欧拉角,你可以用这种方式创建矩阵。

你得到Z向量并使用叉积来得到其他向量来组成矩阵。

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