Esempio n. 1
0
    public float solve(out Vec3 outx, float svd_tol,
                       int svd_sweeps, float pinv_tol)
    {
        if (this.data.numPoints == 0)
        {
            throw new UnityException("...");
        }

        this.massPoint.set(this.data.massPoint_x, this.data.massPoint_y, this.data.massPoint_z);
        VecUtils.scale(out this.massPoint, 1.0f / this.data.numPoints, this.massPoint);

        this.setAta();
        this.setAtb();

        Vec3 tmpv;

        MatUtils.vmul_symmetric(out tmpv, this.ata, this.massPoint);
        VecUtils.sub(out this.atb, this.atb, tmpv);

        this.x.clear();
        float result = Svd.solveSymmetric(this.ata, this.atb, out this.x,
                                          svd_tol, svd_sweeps, pinv_tol);

        VecUtils.addScaled(out this.x, 1.0f, this.massPoint);

        this.setAtb();
        outx             = x;
        this.hasSolution = true;
        return(result);
    }