繞空間任意軸旋轉矩陣


 

 其中,(u,v,w)為單位旋轉軸,(a,b,c)為旋轉軸上一點坐標

//繞空間任意軸旋轉矩陣
        public static double[] GetRotateMatrix(XDPOINT p,XDVector axis,double angleRad)
        {
            axis = axis.Unit();
            double[] M = LCMetroKernel.IdentityMatrix4x4();
            double a = p.x; double b = p.y; double c = p.z;
            double u = axis.I;  double v = axis.J;  double w = axis.K;
            double Cos = Math.Cos(angleRad);
            double Sin = Math.Sin(angleRad);

            M[0] = u * u + (v * v + w * w) * Cos;
            M[1] = u * v * (1 - Cos) - w * Sin;
            M[2] = u * w * (1 - Cos) + v * Sin;
            M[3] = (a * (v * v + w * w) - u * (b * v + c * w)) * (1 - Cos) + (b * w - c * v) * Sin;
            M[4] = u * v * (1 - Cos) + w * Sin;
            M[5] = v * v + (u * u + w * w) * Cos;
            M[6] = v * w * (1 - Cos) - u * Sin;
            M[7] = (b * (u * u + w * w) - v * (a * u + c * w)) * (1 - Cos) + (c * u - a * w) * Sin;
            M[8] = u * w * (1 - Cos) - v * Sin;
            M[9] = v * w * (1 - Cos) + u * Sin;
            M[10] = w * w + (u * u + v * v) * Cos;
            M[11] = (c * (u * u + v * v) - w * (a * u + b * v)) * (1 - Cos) + (a * v - b * u) * Sin;

            return M;
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM