【问题标题】:Rotations in 3D space3D 空间中的旋转
【发布时间】:2013-08-15 04:08:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: matlab 3d geometry


    【解决方案1】:

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

    你得到 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

    【讨论】:

    • 感谢您的回复。我如何获得定义旋转所需的其他角​​度?如果我理解正确,只有一个角度,这将在双锥表面上给出一系列关于旋转点的解决方案?
    • 欧拉角合成和分解的链接很有用,谢谢
    • 感谢更新的答案!我喜欢使用叉积来制作矩阵然后分解它的想法,这比我之前尝试考虑的方式更有意义!
    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2011-06-05
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多