namespace FSO.Common.MeshSimplify { public class SymmetricMatrix { public SymmetricMatrix(double c) { for (int i = 0; i < 10; i++) m[i] = c; } public SymmetricMatrix(double m11, double m12, double m13, double m14, double m22, double m23, double m24, double m33, double m34, double m44) { m[0] = m11; m[1] = m12; m[2] = m13; m[3] = m14; m[4] = m22; m[5] = m23; m[6] = m24; m[7] = m33; m[8] = m34; m[9] = m44; } // Make plane public SymmetricMatrix(double a, double b, double c, double d) { m[0] = a * a; m[1] = a * b; m[2] = a * c; m[3] = a * d; m[4] = b * b; m[5] = b * c; m[6] = b * d; m[7] = c * c; m[8] = c * d; m[9] = d * d; } public double this[int c] { get { return m[c]; } set { m[c] = value; } } public double[] m = new double[10]; //determinant public double det(int a11, int a12, int a13, int a21, int a22, int a23, int a31, int a32, int a33) { double det = m[a11] * m[a22] * m[a33] + m[a13] * m[a21] * m[a32] + m[a12] * m[a23] * m[a31] - m[a13] * m[a22] * m[a31] - m[a11] * m[a23] * m[a32] - m[a12] * m[a21] * m[a33]; return det; } public static SymmetricMatrix operator +(SymmetricMatrix m, SymmetricMatrix n) { return new SymmetricMatrix(m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3], m[4] + n[4], m[5] + n[5], m[6] + n[6], m[7] + n[7], m[8] + n[8], m[9] + n[9]); } } }