Ejemplo n.º 1
0
        //------------------------------------------------------------------------------
        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);
        }
Ejemplo n.º 2
0
        //------------------------------------------------------------------------------
        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);
        }