Vmul() 공개 메소드

public Vmul ( Vector3 v ) : Vector3
v Vector3
리턴 Vector3
예제 #1
0
        public static float CalcError(Mat3 a, Vector3 x, Vector3 b)
        {
            Vector3 vtmp = a.Vmul(x);

            vtmp = b - vtmp;
            return(vtmp.X * vtmp.X + vtmp.Y * vtmp.Y + vtmp.Z * vtmp.Z);
        }
예제 #2
0
파일: SVD.cs 프로젝트: Lin20/isosurface
 public static float CalcError(SMat3 origA, Vector3 x, Vector3 b)
 {
     Mat3 A = new Mat3();
     A.SetSymmetric(origA);
     Vector3 vtmp = A.Vmul(x);
     vtmp = b - vtmp;
     return vtmp.X * vtmp.X + vtmp.Y * vtmp.Y + vtmp.Z * vtmp.Z;
 }
예제 #3
0
        public static float CalcError(SMat3 origA, Vector3 x, Vector3 b)
        {
            Mat3 A = new Mat3();

            A.SetSymmetric(origA);
            Vector3 vtmp = A.Vmul(x);

            vtmp = b - vtmp;
            return(vtmp.X * vtmp.X + vtmp.Y * vtmp.Y + vtmp.Z * vtmp.Z);
        }
예제 #4
0
        public static float SolveSymmetric(SMat3 A, Vector3 b, ref Vector3 x, float svd_tol, int svd_sweeps, float pinv_tol)
        {
            Mat3  mtmp = new Mat3(), pinv = new Mat3(), V = new Mat3();
            SMat3 VTAV = new SMat3();

            GetSymmetricSvd(ref A, ref VTAV, ref V, svd_tol, svd_sweeps);
            pinv = PseudoInverse(VTAV, V, pinv_tol);
            x    = pinv.Vmul(b);
            return(CalcError(A, x, b));
        }
예제 #5
0
        float SolveLeastSquares(Mat3 a, Vector3 b, ref Vector3 x, float svd_tol, int svd_sweeps, float pinv_tol)
        {
            Mat3    at  = new Mat3();
            SMat3   ata = new SMat3();
            Vector3 atb = new Vector3();

            at  = a.Transpose();
            ata = a.MulATA();
            atb = at.Vmul(b);
            return(SolveSymmetric(ata, atb, ref x, svd_tol, svd_sweeps, pinv_tol));
        }
예제 #6
0
파일: SVD.cs 프로젝트: Lin20/isosurface
 public static float SolveSymmetric(SMat3 A, Vector3 b, ref Vector3 x, float svd_tol, int svd_sweeps, float pinv_tol)
 {
     Mat3 mtmp = new Mat3(), pinv = new Mat3(), V = new Mat3();
     SMat3 VTAV = new SMat3();
     GetSymmetricSvd(ref A, ref VTAV, ref V, svd_tol, svd_sweeps);
     pinv = PseudoInverse(VTAV, V, pinv_tol);
     x = pinv.Vmul(b);
     return CalcError(A, x, b);
 }
예제 #7
0
파일: SVD.cs 프로젝트: Lin20/isosurface
 public static float CalcError(Mat3 a, Vector3 x, Vector3 b)
 {
     Vector3 vtmp = a.Vmul(x);
     vtmp = b - vtmp;
     return vtmp.X * vtmp.X + vtmp.Y * vtmp.Y + vtmp.Z * vtmp.Z;
 }
예제 #8
0
파일: SVD.cs 프로젝트: Lin20/isosurface
 float SolveLeastSquares(Mat3 a, Vector3 b, ref Vector3 x, float svd_tol, int svd_sweeps, float pinv_tol)
 {
     Mat3 at = new Mat3();
     SMat3 ata = new SMat3();
     Vector3 atb = new Vector3();
     at = a.Transpose();
     ata = a.MulATA();
     atb = at.Vmul(b);
     return SolveSymmetric(ata, atb, ref x, svd_tol, svd_sweeps, pinv_tol);
 }