【问题标题】:What is wrong with my rotation matrix?我的旋转矩阵有什么问题?
【发布时间】:2013-03-24 12:24:21
【问题描述】:
//---------------------------------------------------------------------------
//  arbitraryRotate - rotates v theta degrees around n
//---------------------------------------------------------------------------
private static Vector3D arbitraryRotate(Vector3D v, Vector3D n, double theta)
{
    theta = Math.toRadians(theta);
    double cosTheta = Math.cos(theta);
    double sinTheta = Math.sin(theta);

    double M11 = n.x * n.x * (1 - cosTheta) + cosTheta;
    double M12 = n.x * n.y * (1 - cosTheta) + (n.z * sinTheta);
    double M13 = n.x * n.z * (1 - cosTheta) - (n.y * sinTheta);

    double M21 = n.x * n.y * (1 - cosTheta) - (n.z * sinTheta);
    double M22 = n.y * n.y * (1 - cosTheta) + cosTheta;
    double M23 = n.y * n.z * (1 - cosTheta) + (n.x * sinTheta);

    double M31 = n.x * n.z * (1 - cosTheta) + (n.y * sinTheta);
    double M32 = n.y * n.z * (1 - cosTheta) - (n.x * sinTheta);
    double M33 = n.z * n.z * (1 - cosTheta) + cosTheta;

    return new Vector3D(v.x * M11 + v.y * M21 + v.z * M31,
                        v.x * M12 + v.y * M22 + v.z * M32,
                        v.x * M13 + v.y * M23 + v.z * M33);
}

谁能告诉我我的矩阵有什么问题?围绕 Z 轴的旋转效果很好,但是 X 和 Y 轴旋转会导致变形。

【问题讨论】:

    标签: java matrix 3d rotation


    【解决方案1】:

    您的矩阵设置不正确。这是正确旋转的方法

    1. 创建一个旋转矩阵,使您的轴沿 XZ 平面旋转
    2. 创建一个旋转矩阵,使新轴沿 Z 轴旋转
    3. 使用 Z 轴旋转矩阵绕 Z 轴旋转 theta 度。
    4. 乘以 2 的倒数
    5. 乘以 1 的倒数。

    你得到

    new vector = (Rx^-1)(Ry^-1)RzRyRx(original vector)
    

    这里有一个link 很好地说明了它。您不必将向量和矩阵扩展到 4 维 - 如果您围绕空间中的任意线旋转,这仅用于平移目的,而不是源自原点的向量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多