Exemple #1
0
        public static void EigenDecomposition(Matrix2x2f m, out float e1, out float e2)
        {
            // solve the characteristic polynomial
            float a = 1.0f;
            float b = -(m.m00 + m.m11);
            float c = m.m00 * m.m11 - m.m01 * m.m10;

            SolveQuadratic(a, b, c, out e1, out e2);
        }
        /// <summary>
        /// Subtract two matrices.
        /// </summary>
        public static Matrix2x2f operator -(Matrix2x2f m1, Matrix2x2f m2)
        {
            Matrix2x2f kSum = new Matrix2x2f();

            kSum.m00 = m1.m00 - m2.m00;
            kSum.m10 = m1.m10 - m2.m10;
            kSum.m01 = m1.m01 - m2.m01;
            kSum.m11 = m1.m11 - m2.m11;
            return(kSum);
        }
Exemple #3
0
        public static Matrix2x2f QRDecomposition(Matrix2x2f m)
        {
            Vector2f   a = m.GetColumn(0).Normalized;
            Matrix2x2f q = new Matrix2x2f();

            q.SetColumn(0, a);
            q.SetColumn(1, a.PerpendicularCCW);

            return(q);
        }
        /// <summary>
        /// Are these matrices equal.
        /// </summary>
        public override bool Equals(object obj)
        {
            if (!(obj is Matrix2x2f))
            {
                return(false);
            }

            Matrix2x2f mat = (Matrix2x2f)obj;

            return(this == mat);
        }
        /// <summary>
        /// Multiply a matrix by a scalar.
        /// </summary>
        public static Matrix2x2f operator *(Matrix2x2f m, float s)
        {
            Matrix2x2f kProd = new Matrix2x2f();

            kProd.m00 = m.m00 * s;
            kProd.m10 = m.m10 * s;
            kProd.m01 = m.m01 * s;
            kProd.m11 = m.m11 * s;

            return(kProd);
        }
        /// <summary>
        /// Multiply two matrices.
        /// </summary>
        public static Matrix2x2f operator *(Matrix2x2f m1, Matrix2x2f m2)
        {
            Matrix2x2f kProd = new Matrix2x2f();

            kProd.m00 = m1.m00 * m2.m00 + m1.m01 * m2.m10;
            kProd.m10 = m1.m10 * m2.m00 + m1.m11 * m2.m10;
            kProd.m01 = m1.m00 * m2.m01 + m1.m01 * m2.m11;
            kProd.m11 = m1.m10 * m2.m01 + m1.m11 * m2.m11;

            return(kProd);
        }
Exemple #7
0
        public static Matrix2x2f PolarDecomposition(Matrix2x2f m)
        {
            Matrix2x2f q = m + new Matrix2x2f(m.m11, -m.m10, -m.m01, m.m00);

            Vector2f c0 = q.GetColumn(0);
            Vector2f c1 = q.GetColumn(1);

            float s = c0.Magnitude;

            q.SetColumn(0, c0 / s);
            q.SetColumn(1, c1 / s);

            return(q);
        }
        /// <summary>
        /// The Inverse of the matrix copied into mInv.
        /// Returns false if the matrix has no inverse.
        /// A matrix multipled by its inverse is the idenity.
        /// </summary>
        public bool TryInverse(ref Matrix2x2f mInv)
        {
            float det = Determinant;

            if (Math.Abs(det) <= 1e-06f)
            {
                return(false);
            }

            float invDet = 1.0f / det;

            mInv.m00 = m11 * invDet;
            mInv.m01 = -m01 * invDet;
            mInv.m10 = -m10 * invDet;
            mInv.m11 = m00 * invDet;
            return(true);
        }
        /// <summary>
        /// Are these matrices equal.
        /// </summary>
        public bool EqualsWithError(Matrix2x2f m, float eps)
        {
            if (Math.Abs(m00 - m.m00) > eps)
            {
                return(false);
            }
            if (Math.Abs(m10 - m.m10) > eps)
            {
                return(false);
            }
            if (Math.Abs(m01 - m.m01) > eps)
            {
                return(false);
            }
            if (Math.Abs(m11 - m.m11) > eps)
            {
                return(false);
            }

            return(true);
        }
 /// <summary>
 /// A matrix copied from the matrix m.
 /// </summary>
 public Matrix2x2f(Matrix2x2f m)
 {
     m00 = m.m00; m01 = m.m01;
     m10 = m.m10; m11 = m.m11;
 }
 /// <summary>
 /// Are these matrices equal.
 /// </summary>
 public bool Equals(Matrix2x2f mat)
 {
     return(this == mat);
 }