簡體   English   中英

我的旋轉矩陣有什么問題?

[英]What is wrong with my rotation matrix?

//---------------------------------------------------------------------------
//  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軸旋轉會導致變形。

您的矩陣設置不正確。 這是您正確旋轉的方式

  1. 創建一個旋轉矩陣,該矩陣旋轉軸以使其沿着XZ平面
  2. 創建一個旋轉矩陣,將新軸旋轉為沿Z軸
  3. 使用Z軸旋轉矩陣繞Z軸旋轉theta度。
  4. 乘以2的倒數
  5. 乘以1的倒數。

你得到

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

這里的鏈接說明得很好。 您不必將向量和矩陣擴展到4維-僅出於繞空間中的任意線旋轉而不是源於原點的向量旋轉的目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM