SharpMath.float3x3.EigenValues C# (CSharp) 메소드

EigenValues() 공개 메소드

public EigenValues ( ) : float3
리턴 float3
        public float3 EigenValues()
        {
            // We compute det(M-lambda.I)=0
            // With:
            //
            //		| A B C |
            //	M=	| D E F |
            //		| G H I |
            //
            // det(M-lambda.I)	= det(M)
            //					+ (GC+HF+DB - AI-EI-AE).lambda
            //					+ (A + E + I).lambda^2
            //					+ lambda^3
            //
            // That we solve for lambda...
            //
            float3x3	M = this;
            double	a = Determinant();
            double	b = M[COEFFS.G]*M[COEFFS.C] + M[COEFFS.H]*M[COEFFS.F] + M[COEFFS.D]*M[COEFFS.B] - M[COEFFS.A]*M[COEFFS.I] - M[COEFFS.E]*M[COEFFS.I] - M[COEFFS.A]*M[COEFFS.E];
            double	c = M[COEFFS.A] + M[COEFFS.E] + M[COEFFS.I];

            double[]	Roots = Functions.SolveCubic( a, b, c, 1 );

            double	Check0 = a + (Roots[0] * (b + Roots[0] * (c + Roots[0])));
            double	Check1 = a + (Roots[1] * (b + Roots[1] * (c + Roots[1])));
            double	Check2 = a + (Roots[2] * (b + Roots[2] * (c + Roots[2])));

            return new float3( (float) Roots[0], (float) Roots[1], (float) Roots[2] );
        }