//------------------------------------------------------------------------------ protected bool DoPCATest() { bool result = true; // create a list of vectors for the suface; List <Vectors> vcList = new List <Vectors>(leafCount); for (int k = 0; k < leafCount; k++) { vcList.Add(_leafs[k].Sigma); } PCA calc = new PCA(vcList, vcList.Count); Eigen e = calc.eigen; _vnorm = calc.Norm; _vnorm.normalize(); _tand = calc.dcent; _eigenvec2 = e.GetEigenvector(1); _eigenvec2.normalize(); _eigenvec3 = e.GetEigenvector(2); _eigenvec3.normalize(); _rg._X = Math.Sqrt(Math.Abs(e.GetEigenvalue(0))); //TODO::Check if we need Abs here? or check for NaN _rg._Y = Math.Sqrt(Math.Abs(e.GetEigenvalue(1))); _rg._Z = Math.Sqrt(Math.Abs(e.GetEigenvalue(2))); _rg._W = _rg._X / (_rg._X + _rg._Y + _rg._Z); result = C.CONST.IS_NUM(_vnorm); if (result) { result = C.CONST.IS_NUM(_tand); } if (result) { result = C.CONST.IS_NUM(_eigenvec2); } if (result) { result = C.CONST.IS_NUM(_eigenvec3); } if (result) { result = C.CONST.IS_NUM(_rg); } if (result != true) { // some thing gone wrong ? // set values to default _vnorm = new Vectors(); _eigenvec2 = new Vectors(); _eigenvec3 = new Vectors(); _rg = new Vectors(); _tand = 0.0d; } return(result); }
//------------------------------------------------------------------------------ protected bool DoPCATest() { bool result = true; PCA calc = new PCA(_pts, NumPts); Eigen e = calc.eigen; _vnorm = calc.Norm; _vnorm.normalize(); _tand = calc.dcent; _eigenvec2 = e.GetEigenvector(1); _eigenvec2.normalize(); _eigenvec3 = e.GetEigenvector(2); _eigenvec3.normalize(); _rg._X = Math.Sqrt(Math.Abs(e.GetEigenvalue(0))); //TODO::Check if we need Abs here? or check for NaN _rg._Y = Math.Sqrt(Math.Abs(e.GetEigenvalue(1))); _rg._Z = Math.Sqrt(Math.Abs(e.GetEigenvalue(2))); _rg._W = _rg._X / (_rg._X + _rg._Y + _rg._Z); result = C.CONST.IS_NUM(_vnorm); if (result) { result = C.CONST.IS_NUM(_tand); } if (result) { result = C.CONST.IS_NUM(_eigenvec2); } if (result) { result = C.CONST.IS_NUM(_eigenvec3); } if (result) { result = C.CONST.IS_NUM(_rg); } if (result != true) { // some thing gone wrong ? // set values to default _vnorm = new Vectors(); _eigenvec2 = new Vectors(); _eigenvec3 = new Vectors(); _rg = new Vectors(); _tand = 0.0d; } return(result); }