Пример #1
0
        public static Quat FromMat4x4(SqMat4 m)
        {
            Quat nq;

            nq.w = Math.Sqrt(1 + m.m00 + m.m11 + m.m22) * 0.5;
            nq.x = Math.Sqrt(1 + m.m00 - m.m11 - m.m22) * (m.m12 <= m.m21 ? 0.5 : -0.5);
            nq.y = Math.Sqrt(1 - m.m00 + m.m11 - m.m22) * (m.m20 <= m.m02 ? 0.5 : -0.5);
            nq.z = Math.Sqrt(1 - m.m00 - m.m11 + m.m22) * (m.m01 <= m.m10 ? 0.5 : -0.5);
            return(nq);
        }
Пример #2
0
 public static double Determinant(SqMat4 m)
 {
     return(m.m00 * m.m11 * m.m22 * m.m33 - m.m00 * m.m13 * m.m22 * m.m31
            + m.m01 * m.m10 * m.m23 * m.m32 - m.m01 * m.m12 * m.m23 * m.m30
            + m.m02 * m.m13 * m.m20 * m.m31 - m.m02 * m.m11 * m.m20 * m.m33
            + m.m03 * m.m12 * m.m21 * m.m30 - m.m03 * m.m10 * m.m21 * m.m32
            + m.m00 * m.m12 * m.m23 * m.m31 - m.m00 * m.m11 * m.m23 * m.m32
            + m.m02 * m.m10 * m.m21 * m.m33 - m.m02 * m.m13 * m.m21 * m.m30
            + m.m03 * m.m11 * m.m20 * m.m32 - m.m03 * m.m12 * m.m20 * m.m31
            + m.m01 * m.m13 * m.m22 * m.m30 - m.m01 * m.m10 * m.m22 * m.m33
            + m.m00 * m.m13 * m.m21 * m.m32 - m.m00 * m.m12 * m.m21 * m.m33
            + m.m03 * m.m10 * m.m22 * m.m31 - m.m03 * m.m11 * m.m22 * m.m30
            + m.m01 * m.m12 * m.m20 * m.m33 - m.m01 * m.m13 * m.m20 * m.m32
            + m.m02 * m.m11 * m.m23 * m.m30 - m.m02 * m.m10 * m.m23 * m.m31);
 }