public SMat3 Mul_ata(Mat3 a) { SMat3 m = new SMat3(); m.SetSymmetric(a.m00 * a.m00 + a.m10 * a.m10 + a.m20 * a.m20, a.m00 * a.m01 + a.m10 * a.m11 + a.m20 * a.m21, a.m00 * a.m02 + a.m10 * a.m12 + a.m20 * a.m22, a.m01 * a.m01 + a.m11 * a.m11 + a.m21 * a.m21, a.m01 * a.m02 + a.m11 * a.m12 + a.m21 * a.m22, a.m02 * a.m02 + a.m12 * a.m12 + a.m22 * a.m22); return m; }
public SMat3 Mul_ata(Mat3 a) { SMat3 m = new SMat3(); m.SetSymmetric(a.m00 * a.m00 + a.m10 * a.m10 + a.m20 * a.m20, a.m00 * a.m01 + a.m10 * a.m11 + a.m20 * a.m21, a.m00 * a.m02 + a.m10 * a.m12 + a.m20 * a.m22, a.m01 * a.m01 + a.m11 * a.m11 + a.m21 * a.m21, a.m01 * a.m02 + a.m11 * a.m12 + a.m21 * a.m22, a.m02 * a.m02 + a.m12 * a.m12 + a.m22 * a.m22); return(m); }
public SMat3 MulATA() { SMat3 m = new SMat3(); m.SetSymmetric(m00 * m00 + m10 * m10 + m20 * m20, m00 * m01 + m10 * m11 + m20 * m21, m00 * m02 + m10 * m12 + m20 * m22, m01 * m01 + m11 * m11 + m21 * m21, m01 * m02 + m11 * m12 + m21 * m22, m02 * m02 + m12 * m12 + m22 * m22); return(m); }
public static void GetSymmetricSvd(ref SMat3 a, ref SMat3 vtav, ref Mat3 v, float tol, int max_sweeps) { vtav.SetSymmetric(a); v.Set(1, 0, 0, 0, 1, 0, 0, 0, 1); float delta = tol * vtav.Fnorm(); for (int i = 0; i < max_sweeps && vtav.Off() > delta; i++) { Rotate01(ref vtav, ref v); Rotate02(ref vtav, ref v); Rotate12(ref vtav, ref v); } }
public SMat3 MulATA() { SMat3 m = new SMat3(); m.SetSymmetric(m00 * m00 + m10 * m10 + m20 * m20, m00 * m01 + m10 * m11 + m20 * m21, m00 * m02 + m10 * m12 + m20 * m22, m01 * m01 + m11 * m11 + m21 * m21, m01 * m02 + m11 * m12 + m21 * m22, m02 * m02 + m12 * m12 + m22 * m22); return m; }
private void SetAta() { ata.SetSymmetric(this.data.ata_00, this.data.ata_01, this.data.ata_02, this.data.ata_11, this.data.ata_12, this.data.ata_22); }